Stratis

snapshot

Wichtige Anmerkung

Dieses Dokument beschreibt die Version 1.0, welche auch Bestandteil der aktuellen Versionen von RHEL (8.1) und Fedora (31) ist. Laut der Stratis Projektseite (https://stratis-storage.github.io/) gibt es bereits die Version 2.0 bzw. 2.0.1. Da diese Version jedoch nur als Sourcecode zur Verfügung gestellt wird, wurde sie von uns noch nicht getestet. Voraussichtlich wird Fedora32 die erste Distribution sein, die diese Version zur Verfügung stellt. Sobald Fedora32 verfügbar ist, werden die Tests fortgesetzt.

Was ist Stratis?

Stratis ist kein Filesystem, sondern eine Erweiterung zu XFS bzw. eine Datenträgerverwaltung.

Red Hat hat angekündigt, die Unterstützung für das Dateisystem Btrfs offiziell einzustellen und sich stattdessen voll auf XFS zu fokussieren. Im Vergleich zu Btrfs oder ZFS fehlen XFS jedoch einige Funktionen. Das Werkzeug Stratis von RedHat bietet deshalb nun Snapshots und Storage-Pools für XFS an und ist in Version 1.0 verfügbar.

Welche Devices werden von Stratis unterstützt?

​Als zu Grunde liegendes Storage können diverse Arten von Block-Devices verwendet werden. Laut der Projekt-Homepage wurde Stratis neben normalen SAS/SATA-Festplatten z.B. auch auf iSCSI, DM-MPIO, mdraid und LUKS-Devices sowie LVM Logical Volumes getestet.

Was soll zukünftig noch aufgenommen werden?

Laut RedHat (bzw. der Stratis Projektseite) ist Stratis 1.0 ein Minimum Viable Product (MVP), einige Features fehlen also noch. Dazu gehören etwa ein Support für RAID und für Send- und Receive-Kommandos. Man wolle zukünftig weitere Devicemapper-Layer integrieren, aber auch zusätzliche Storage-APIs. Zudem will das Projekt die Flexibilität beim Ergänzen und Entfernen von Speichergeräten erhöhen, ohne das UI zu überfrachten.

Einschränkung laut RedHat

Laut Kapitel „9. Managing layered local storage with Stratis" der RedHat Dokumentation ist folgendes zu beachten:

Stratis is available as a Technology Preview. For information on Red Hat scope of support for Technology Preview features, see the Technology Preview Features Support Scope document.

Wie ist Stratis aufgebaut?

Es gibt einen Daemon „stratisd" und ein CLI „stratis" für die Kommunikation mit dem Daemon.

Wie funktioniert Stratis?

Stratis ist sehr einfach und meiner Meinung nach intuitiv aufbaut.

Ein paar Beispiele:

1. Zunächst muss ein Pool erstellt werden, wobei ein pool mehrere Devices enthalten und jederzeit erweitert werden kann:

# stratis pool create my_pool /dev/sdb 

2. Pools anzeigen:

# stratis pool list
Name     Total Physical Size  Total Physical Used
my_pool                4 GiB               52 MiB
 

3. Auf Basis eines Pools kann dann ein FS erstellt werden:

# stratis filesystem create my_pool my_fs 

4. Filesystem anzeigen:

# stratis filesystem list my_pool
Pool Name  Name   Used     Created            Device                  UUID
my_pool    my_fs  546 MiB  Sep 29 2019 18:38  /stratis/my_pool/my_fs  ebc36adf20ae444f8fb47aa03a4a26e5
 

5. Filesystem mounten:

# mount /stratis/my_pool/my_fs /my_mount
# df -h /my_mount
Dateisystem                                           Größe  Benutzt  Verf.  Verw% Eingehängt auf
/dev/mapper/stratis-1-4fb077a40bf747488e69e745bec...  1,0T   1,1G     1023G  1%    /my_mount 

Hinweis: nach dem Erstellen werden die Stratis Filesysteme immer mit einer Größe von einem Terrabyte angezeigt, unabhängig von der physikalischen Größe der darunter liegenden Hardware. RedHat begründet dies damit, dass es nur eine theoretisch Größe sei, da die Filesysteme jederzeit online erweiterbar sind.

6. Einen Snapshot erstellen:

# stratis filesystem snapshot my_pool my_fs my_fs_snap

# stratis filesystem list my_pool
Pool Name  Name        Used     Created            Device                       UUID
my_pool    my_fs       546 MiB  Sep 29 2019 18:38  /stratis/my_pool/my_fs       ebc36ad...a03a4a26e5
my_pool    my_fs_snap  546 MiB  Sep 29 2019 18:45  /stratis/my_pool/my_fs_snap  63aa42b...6120721802 
7. Einen Pool erweitern:
# stratis pool add-data my_pool /dev/sdc 
8. Blockdevices in einem Pool anzeigen:
# stratis blockdev list my_pool
Pool Name  Device Node  Physical Size  State  Tier
my_pool    /dev/sdb             4 GiB  InUse  Data
my_pool    /dev/sdc             4 GiB  InUse  Data 

Was haben die Tests ergeben?

Testumgebung:
OS: Fedora 30 aktuellste Version
Stratis 1.0.4
Oracle Virtual Box VM ( 1 CPU, 4GB RAM, 20 GB HDD(root), 5 x 4GB HDD (stratis))

1.Es gib noch ein paar kleine Baustellen wie z.B. die Command-Erweiterung in der bash:

#stratis pool <TAB>    

zeigt nur einen Teil der möglichen Optionen:

create destroy list rename

	# stratis pool -h
	usage: stratis pool [-h] {create,list,destroy,rename,add-data,add-cache} ... 

2. ...und ein paar ganz große: Filesysteme lassen sich über Hardware-Grenzen hinweg belegen (z.B. zwei 1 TB große Dateien auf einer 12 GB großen Platte):

# df -h
Dateisystem                                          Größe    Benutzt  Verf.  Verw%  Eingehängt auf
/dev/mapper/stratis-1-4fb077a40bf747488e69e745bec... 1,0T     12G      1012G    2%   /my_strat/data1
/dev/mapper/stratis-1-4fb077a40bf747488e69e745bec... 1,0T     18G      1007G    2%   /my_strat/data2
# stratis pool
Name       Total Physical Size  Total Physical Used
my_pool                 12 GiB               12 GiB 

Lediglich im journalctl steht nun folgendes:

	Jul 22 16:02:59 localhost.localdomain stratisd[623]: ERROR libstratis::engine::strat_engine::thinpool::thinpool: Thinpool out of space! -> OutOfSpace 

Einen Fehler bekommt man erst beim Erstellen eines Snapshots:

	# stratis filesystem snapshot my_pool my_fs1 my_fs_snap
	Execution failure caused by:
	ERROR: No space left on device 

Ein weiterer Snapshot führt dann zu Datenverlust:

	# stratis filesystem snapshot my_pool my_fs1 my_fs_snap
	Execution failure caused by:
	ERROR: failed to create my_fs_snap snapshot for my_fs1 - DM Core error: low-level ioctl error due to nix error: EIO: I/O error 

Nun ist das FS defekt:

	# df -h /my_strat/data1
	df: .: Input/output error
	
	# umount /my_strat/data1
	# mount /my_strat/data1
	mount: /my_strat/data1: mount(2)-Systemaufruf ist fehlgeschlagen: No space left on device. 
	# xfs_repair -L /stratis/my_pool/my_fs1  funktioniert nicht. FS ist unwiderruflich defekt. 

Das Löschen des Filesystems funktioniert zwar, nur gehen damit alle Daten verloren:

	# stratis filesystem destroy my_pool my_fs1 

Die Daten im zweiten FS lassen sich löschen (mittels rm). Der Platz im Pool bleibt jedoch belegt:

	# stratis pool
	Name       Total Physical Size  Total Physical Used
	my_pool                 16 GiB            12.00 GiB
	
	# stratis filesystem
	Pool Name  Name    Used       Created            Device                   UUID
	my_pool    my_fs2  11.41 GiB  Jul 22 2019 15:18  /stratis/my_pool/my_fs2  870ecf3c540f426290b26b5
	
	# df -h /my_strat/data2
	Dateisystem                                           Größe  Benutzt  Verf.  Verw%  Eingehängt auf
	/dev/mapper/stratis-1-4fb077a40bf747488e69e745bec...  1,0T   1,1G     1023G  1%     /my_strat/data2 

Trotz des Löschens der Daten ist das zweite FS nun auch defekt:

	# for i in 1 2 3 4 5 6 7 8 9 10 11; do dd if=/dev/zero of=/my_strat/data2/bla$i bs=1024k count=1000; done
	dd: konnte '/my_strat/data2/bla1' nicht öffnen: Input/output error
	dd: konnte '/my_strat/data2/bla2' nicht öffnen: Input/output error
	...
	dd: konnte '/my_strat/data2/bla10' nicht öffnen: Input/output error
dd: konnte '/my_strat/data2/bla11' nicht öffnen: Input/output error 

In diesem Zustand ließ sich der Pool nicht immer zerstören, da teilweise die FS nicht mehr gelöscht werden konnten.


3. Und etwas verwirrend: Die angezeigten Größen der einzelnen Tools (df, du, stratis) passen nicht: Nach mehrmaligen Schreiben (dd), Löschen (rm) sowie Snapshots Erstellen und Löschen sieht das wie folgt aus:

	# stratis filesystem
	Pool Name  Name         Used      Created            Device                        UUID                       
	my_pool    my_fs2       2.49 GiB  Jul 22 2019 18:24  /stratis/my_pool/my_fs2       3a6df6e585ec4fa9a7ff8734862
	my_pool    my_fs1_snap  4.44 GiB  Jul 22 2019 18:40  /stratis/my_pool/my_fs1_snap  ee85cb17fa4f4b5daf1cfb3ef28
	my_pool    my_fs1       4.44 GiB  Jul 22 2019 18:22  /stratis/my_pool/my_fs1       85ef04ccaf9247b3906b1ee68e5
	
	# df -h
	Dateisystem                                            Größe  Benutzt  Verf.  Verw%  Eingehängt auf
/dev/mapper/stratis-1-4fb077a40bf747488e69e745bec...   1,0T   4,0G     1020G  1%     /my_strat/data1
	
	# du -sh /my_strat/data1
	3,0G     

Fazit

Stratis ist ein sehr einfach und intuitiv zu bedienendes Tool, mit dem sich Filesysteme und die darunterliegende Hardware einfach administrieren bzw „verbinden" lassen. Leider hat es in der aktuellen Version noch zu viele Fehler um es sinnvoll einsetzen zu können.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/