Stratis
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?
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
# stratis pool add-data my_pool /dev/sdc
# 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.
Senior Chief Consultant bei ORDIX.
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare