[[Vorlage(Ausbaufähig,"Ausgehend von der Fortschreibung der '''btrfs-tools''' auf Version 2.x rc sind einige, weitergehende Befehle noch nicht enthalten.")]] [[Vorlage(Getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Pakete_installieren:Pakete installieren] }}} [[Vorlage(Hinweis,"Die nachfolgende Beschreibung basiert auf den '''btrfs-tools''' der Version 0.19 von 2010. Um den aktuellen Befehlsumfang zu `btrfs` zu erhalten (Optionen, Ergänzungen), sollte man den jeweiligen Befehl im Terminal[1] ohne Option (entspricht der Option `--help`) abfragen - die [:man:Manpages] sind teilweise fehlerhaft bzw. Hinweise fehlen ganz!")]] [[Inhaltsverzeichnis(2)]] [[Bild(btrfs_logo.png, align=left)]] =Btrfs Allgemein= ==Sachstand btrfs-tools== {{{#!vorlage Hinweis Das Paket '''btrfs-tools''' wurde in '''btrfs-progs''' umbenannt. Je nach Ubuntuversion muss das entsprechende Paket installiert werden. Das Tool '''btrfs-convert''' ist in der Version 4.20.x des Paketes __nicht__ enthalten, dies betrifft mindestens Ubunutu 19.04 Disco. Ab Paket 5.2.x ist '''btrfs-convert''' wieder enthalten (Ubuntu 19.10). }}} In diesem Artikel zum [wikipedia:Btrfs:Btrfs-Dateisystem] ist eine Übersicht der Befehle mit Kurzbeschreibungen aufgeführt. Manche Befehle sind mit anderer Syntax mehrfach vorhanden - welche man endgültig anwenden kann, wird die Entwicklung der Btrfs-Tools in Zukunft zeigen. [[Vorlage(Paketinstallation,btrfs-tools)]] bzw. [[Vorlage(Paketinstallation,btrfs-progs)]] Dieses Paket ist in der Regel schon nach der Installation vorhanden. ==Befehle zum Btrfs-Dateisystem== Der Aufbau der Syntax unterscheidet sich zur Zeit in * [#Befehle-mit-Optionen Befehle mit Optionen] * [#Direkte-Befehle Direkte Befehle] * [#Kompakte-Befehle Kompakte Befehle] * [#Obsolete-Befehle Obsolete Befehle] Der nachfolgende Aufbau der Beschreibung wurde danach gegliedert - über das Inhaltsverzeichnis kann man sich vorab informieren und die jeweilige Beschreibung dieser Befehle auch direkt aufrufen. ==Ausgelagerte Beschreibungen== Diese Teilbeschreibung behandelt die Befehle für das normale Arbeiten mit dem Btrfs-Dateisystem. Für folgende Teilaspekte wurden, um die Übersicht zu behalten, separate Beschreibungen erstellt. Die [wikipedia:Btrfs:Btrfs]-Befehle enthalten dann nachfolgend __nur__ eine kurze Beschreibung der Syntax und einen Link in das relevante WIKI. * Installieren auf Btrfs-Dateisystem] * Installation auf Btrfs-Dateisystem * Formatierung mit `mkfs.btrfs` * Normales System * Btrfs-RAID-Verbund * Formatierung überprüfen mit `btrfs filesystem show` * Zusatzmaßnahmen * Probleme und Abhilfe [[Vorlage(Hinweis,"Die in den nachfolgenden Beispielen angeführten Laufwerke, Geräte bzw. Bezeichnungen sind dem jeweils eigenen System anzupassen.")]] =Befehle mit Optionen= Die Eingabe in das Terminal[1] von: [[Vorlage(Befehl,"btrfs")]] ohne weitere Ergänzung ergibt eine Liste der Befehle mit den Optionen und Ergänzungen. Diese werden hier nachfolgend alphabetisch sortiert beschrieben. [[Vorlage(Hinweis,"Alle Befehle, bis auf das einleitende `btrfs`, können abgekürzt werden, soweit das zu einer eindeutigen Zuordnung führt. Solange man sich nicht sicher ist, sollte man die nachfolgend beschriebenen Langformen der Befehle verwenden! Zum Beispiel bewirken: [[Vorlage(Befehl,'sudo btrfs filesystem balance')]] [[Vorlage(Befehl,'sudo btrfs fi ba')]] das Gleiche.")]] ==btrfs balance== Mit der Zeit sind bei einem Btrfs-RAID-Verbund, nach dem Hinzufügen bzw. Entfernen von externen Speicherplatz, die Metadaten und Filedaten nicht mehr gleichmäßig auf den Laufwerken bzw. dem Laufwerk verteilt. Um diese wieder ins Lot zu bringen, sollte man die Verteilung neu anordnen lassen. Dazu gibt man folgendes im laufenden System oder nach dem Einhängen eines externen Laufwerkes (siehe Fallbeispiele) in ein Terminal[1] ein: * für das Wurzelverzeichnis: [[Vorlage(Befehl,"sudo btrfs balance start /")]] * für ein selektives Verzeichnis: [[Vorlage(Befehl,"sudo btrfs balance start /var/cache")]] Nachdem man diesen Befehl gestartet hat, kann man die folgenden Optionen anwenden: * sudo btrfs balance pause - Hält die Reorganisation an. * sudo btrfs balance cancel - Bricht die Reorganisation ab. * sudo btrfs balance resume - Nimmt eine angehaltene Reorganisation wieder auf. * sudo btrfs balance status - Zeigt den aktuellen Stand der Reorganisation an. {{{#!vorlage Hinweis Die obige Eingabe von `sudo btrfs balance start /` sperrt das Terminal bis der Vorgang abgeschlossen ist. Will man einen der obigen Folgebefehle anwenden, muss man eine weitere Instanz vom Terminal öffnen und dort dann z.B. `sudo btrfs balance status /` eingeben. Je nach Datenmenge und Zustand des Btrfs-Dateisystemes kann diese Maßnahme eine längere Zeit in Anspruch nehmen. Man kann aber während des Abgleiches eingeschränkt weiter arbeiten, ohne das es dabei zu Konflikten (mit den Daten) kommt. }}} Auch ist es durch diesen Befehl möglich, das Dateisystem in eine andere Form zu konvertieren (Zum Beispiel von Raid1 zu Raid0) Dazu gibt man in ein Terminal folgendes ein: [[Vorlage(Befehl,"sudo btrfs balance start -dconvert=raid0 -mconvert=raid0 /")]] {{{#!vorlage Warnung Bei "-mconvert=raid0" wird die Sicherheit der Metadaten reduziert! Deshalb muss bei dieser Aktion die Option "-f" hinzugefügt werden. }}} ==btrfs device add== Falls es zu Speicherplatzproblemen kommt und mit dem Befehl [#btrfs-filesystem-resize `btrfs filesystem resize`] keine Abhilfe mehr möglich ist, so kann man einem '''laufenden System''' weiteren Speicherplatz hinzufügen. Dies funktioniert sowohl pauschal, indem man das Wurzelverzeichnis erweitert bzw. selektiv, indem man einen beliebigen Ast (Pfad) in der [:Verzeichnisstruktur:] ausbaut. Das Laufwerk, das hinzugefügt werden soll, darf nicht schon an anderer Stelle eingebunden sein und sollte mit dem Btrfs-Dateisystem formatiert sein. Siehe auch folgende Fallbeispiele: * Dem Wurzelverzeichnis einen Speicherbereich hinzufügen: Dazu gibt man im Terminal[1] ein: [[Vorlage(Befehl,"sudo btrfs device add /dev/sda6 /")]] Der gesamte Wurzelbereich wird hierdurch um den Speicherplatz von '''/dev/sda6''' vergrößert. * Einem Bereich einen Speicherbereich hinzufügen: Dazu gibt man im Terminal[1] ein: [[Vorlage(Befehl,"sudo btrfs device add /dev/loop0 /var/cache")]] Das Verzeichnis '''/var/cache''' wird um den Speicherplatz von '''/dev/loop0''' erweitert. Das bestehende Dateisystem passt den Speicherplatz auf dem hinzugefügten Laufwerk automatisch an. Es muss kein zusätzlicher Eintrag in der '''/etc/fstab''' vorgenommen werden. Beim nächsten Booten, wird dieses Laufwerk automatisch mit dem Basislaufwerk richtig eingebunden. Damit der Speicherplatz auch optimal und richtig benutzt werden kann, sollte man im Anschluss den Befehl [#btrfs-device-scan `btrfs device scan`] ausführen, damit das Dateisystem alle Komponenten korrekt zuordnet. Danach sollte noch [#btrfs-balance `btrfs balance`] ausgeführt werden, damit die Daten wieder gleichmäßig verteilt sind. [[Vorlage(Warnung,"Der Inhalt des zusätzlichen Laufwerkes wird beim Hinzufügen gelöscht bzw. überschrieben. Das zusätzliche Laufwerk __muss__, solange es nicht mit dem Befehl [#btrfs-device-delete `btrfs device delete`] entfernt wurde, schon beim Booten vom System __erreichbar__ sein. Das gilt insbesondere bei externen Laufwerken!")]] == btrfs check == Wenn das btrfs-System mal nicht funktionieren sollte, oder balance nicht seinen Dienst verrichtet, hilft der Befehl "btrfs check". Dafür darf das Volumen aber '''nicht''' eingehängt sein! {{{#!vorlage Befehl btrfs check --repair /dev/sdX }}} ==btrfs device delete== [[Vorlage(Hinweis,'Dieser Befehl wird zur Zeit nicht (richtig) ausgeführt. Ein korrektes Aushängen ist nicht in allen Fällen möglich!')]] Hat man seinen Speicherplatz aus einzelnen Laufwerken zusammengestellt - siehe [#btrfs-device-add btrfs device add], so kann man diesen Speicherplatz bedarfsweise wieder freigeben und ggf. an anderer Stelle verwenden. Dazu gibt man in ein Terminal[1] ein: [[Vorlage(Befehl,"sudo btrfs device delete /dev/sda6 /")]] Damit wird der Speicherplatz an dieser Stelle um die Größe des genannten Laufwerkes verkleinert. Damit der Speicherplatz wieder optimal benutzt werden kann, sollte man im Anschluss den Befehl [#btrfs-filesystem-balance `btrfs filesystem balance`] ausführen. ==btrfs device scan== Nachdem man in ein Terminal[1] [[Vorlage(Befehl,"sudo btrfs device scan")]] eingibt. Ergibt dieser Befehl nur die Ausgabe von: {{{failed to read /dev/sdh failed to read /dev/sdg failed to read /dev/sdf failed to read /dev/sde failed to read /dev/sdd failed to read /dev/sr0}}} und damit nur Laufwerke, welche __kein__ Btrfs-Dateisystem besitzen (Negativliste). Mit der Ergänzung eines Laufwerkpfades [[Vorlage(Befehl,"sudo btrfs device scan /dev/sdXY")]] erhält man bei * einem Btrfs-Dateisystem * {{{Scanning for Btrfs filesystems in '/dev/sdb1'}}} * Ohne ein Btrfs-Dateisystem * {{{Scanning for Btrfs filesystems in '/dev/sda1' ERROR: unable to scan the device '/dev/sda1'}}} Um weitergehende Informationen zu erhalten, sollte man den Befehl `btrfs filesystem show` anwenden. ==btrfs filesystem defragment== [[Vorlage(Experten,"[wikipedia:Copy-On-Write:Copy On Write] Dateisysteme (COW) haben viele Vorteile, aber auch Nachteile - z.B. [wikipedia:Defragmentierung:]. Btrfs legt die Daten beim ersten Schreiben einer Datei sequentiell ab, aber COW erfordert, das geänderte Daten nicht einfach überschrieben werden, sondern in freie Speicherbereiche abgelegt werden. Damit sind dann die Dateien nicht mehr zusammenhängend - also fragmentiert. Das hat dann ggf. auch noch Einfluss auf das Speichern anderer Dateien. Es wird empfohlen bei normalen Festplatten - nicht jedoch bei [:SSD:]-Laufwerken - die Struktur und die der Metadaten in einem Btrfs-Dateisystem ab und an zu reorganisieren. Dies ist jedoch nicht zwingend erforderlich. Das wird unter dem Btrfs-Dateisystem als Defragmentierung bezeichnet und kann in einem laufenden System durchgeführt werden bzw. wenn ein Laufwerk oder Unterlaufwerk (Subvolume) dazu eingebunden wurde.")]] [[Vorlage(Hinweis,"Diese Defragmentierung ist vergleichbar mit der vom [wikipedia:Windows:]-Betriebssystem - es wird eine Reorganisation der eigentlichen Daten durchgeführt! Je nach Datenmenge und Zustand des Btrfs-Dateisystemes kann diese Maßnahme eine längere Zeit in Anspruch nehmen. Man kann aber während einer Defragmentierung eingeschränkt weiter arbeiten, ohne dass es dabei zu Konflikten (mit den Daten) kommt.")]] Um den Zeitaufwand zu reduzieren, sollte man Schnappschüsse, die man nicht mehr benötigt, entfernen bzw. diese extern auslagern. Siehe auch die Hinweise bei den Befehlen [#btrfs-subvolume-snapshot `btrfs subvolume snapshot`] bzw. [#btrfs-image `btrfs-image`]. Eine Defragmentierung erreicht man durch die (hier beispielhafte) Eingabe im Terminal[1] von: [[Vorlage(Befehl,"sudo btrfs filesystem defragment /home")]] Dabei muss der angegebene Pfad, hier im Beispiel '''/home''', nicht zwingend mit den Unterlaufwerken (Subvolumes) korrespondieren! ==btrfs filesystem df== Mit dem Befehl: [[Vorlage(Befehl,"sudo btrfs filesystem df PFAD")]] erhält man eine grobe Aussage zur Belegung des abgefragten Speichermedium. Mit der Option `PFAD` wird der Bereich festgelegt. Die beispielhafte Ausgabe für ein Btrfs-RAID-Verbund ist: {{{ Data, RAID0: total=4.00GB, used=2.37GB System, RAID1: total=8.00MB, used=4.00KB System: total=4.00MB, used=0.00 Metadata, RAID1: total=768.00MB, used=181.83MB}}} bzw. für ein einzelnes Laufwerk / Partition z.B.: {{{ Data, single: total=55.01GiB, used=51.68GiB System, DUP: total=8.00MiB, used=16.00KiB Metadata, DUP: total=1.00GiB, used=55.27MiB GlobalReserve, single: total=55.11MiB, used=0.00B}}} oder auch für ein bestimmtes Verzeichnis z.B. bei: [[Vorlage(Befehl,"sudo btrfs filesystem df /boot")]] {{{ Data, single: total=55.01GiB, used=51.68GiB System, DUP: total=8.00MiB, used=16.00KiB Metadata, DUP: total=1.00GiB, used=55.27MiB GlobalReserve, single: total=55.11MiB, used=0.00B }}} ==btrfs filesystem resize== Um die Größe eines Speicherbereiches festzulegen bzw. zu verändern, kann man im Terminal[1] [[Vorlage(Befehl,"sudo btrfs filesystem resize [Option] /PFAD")]] eingeben. Die Optionen sind wie folgt zu setzen (Fallbeispiele), '''/mnt''': ist der Pfad eines eingehängtes Laufwerk oder Unterlaufwerk (Subvolume): * Laufwerk vergrößern: * mit Vorzeichen: + = vergrößern um * Wert = 4 * Faktor: g = GiB, m = MiB, k = KiB [[Vorlage(Befehl,"sudo btrfs filesystem resize +4g /mnt")]] * Laufwerk verkleinern: * mit Vorzeichen: - = verkleinern um * Wert = 4 * Faktor: g = GiB, m = MiB, k = KiB [[Vorlage(Befehl,"sudo btrfs filesystem resize -4g /mnt")]] * Laufwerk eine definierte Größe zuweisen: * Wert = 4 * Faktor: g = GiB, m = MiB, k = KiB [[Vorlage(Befehl,"sudo btrfs filesystem resize 16g /mnt")]] * einem Laufwerk bzw. Unterlaufwerk (Subvolume) den gesamten noch zur Verfügung stehenden Speicherplatz zuweisen [[Vorlage(Befehl,"sudo btrfs filesystem resize max /mnt")]] In allen Fällen wird bei erfolgreicher Veränderung eine Anzeige ausgegeben, die beispielhaft so aussieht: {{{resize '/mnt' of '+4g'}}} ==btrfs filesystem show== Will man eine Übersicht zu vorhandenen Btrfs-Dateisystemen erhalten, kann man im Terminal[1] [[Vorlage(Befehl,"sudo btrfs filesystem show")]] eingeben. Dann werden entsprechende Informationen zu __allen__ Laufwerken angezeigt, unabhängig vom Mount-Status, ob ein Btrfs-Dateisystem vorhanden ist oder auch nicht. ==btrfs filesystem sync== Dieser Befehl ist __nur__ wirksam, wenn beim Formatieren eines Btrfs_RAID-Verbundes die Optionen * `-d` = Datenprofil mit raid0 bis raid10 * `-m` = Metadatenprofil mit raid0 bis raid10 eingesetzt wurden. Die Eingabe erfolgt in ein Terminal[1] mit: [[Vorlage(Befehl,"sudo btrfs filesystem sync PFAD")]] Die Angabe `PFAD` kann dabei ein beliebiger Pfad im laufendem System sein. ==btrfs property list=== Dieser Befehl zeigt veränderbare Eigenschaften eines Btrfs-Objektes an. [[Vorlage(Befehl,"btrfs property list PFAD")]] ==btrfs property get=== Dieser Befehl liest eine Eigenschaft eines Btrfs-Objektes aus. Man kann z.B. mit diesem Kommando prüfen, ob ein Subvolume schreibgeschützt ist: [[Vorlage(Befehl,"btrfs property get -ts PFAD ro")]] ==btrfs property set=== Dieser Befehl ändert eine Eigenschaft eines Btrfs-Objektes. Auf diese Weise kann man ein Subvolume schreibbar machen: [[Vorlage(Befehl,"sudo btrfs property set -ts PFAD ro false")]] Das ist nützlich, wenn man einen Snapshot nur lesbar erzeugt hat und ihn später als schreibbar mounten will (z.B., weil man zu dem Stand zurückkehren will). ==btrfs subvolume create== Will man eigene Unterlaufwerke (Subvolumes) anlegen, so kann man dies auf einer mit Btrfs formatierten Partition erreichen, indem man diese Partition, sofern erforderlich, * in das laufende System einbindet * alternativ zum Einbindepunkt wechselt. Dazu gibt man in ein Terminal[1] nacheinander [[Vorlage(Befehl,"sudo mount /dev/sda1 /media")]] [[Vorlage(Befehl,"sudo btrfs subvolume create /media/BEZEICHNUNG")]] [[Vorlage(Befehl,"sudo umount /dev/sda1")]] ein. Als `BEZEICHNUNG` kann man eine beliebige Information wählen, z.B.: `daten` - also auch eine Bezeichnung ohne das führende `@`. [[Vorlage(Experten,"Ein so erstelltes Unterlaufwerk (Subvolume) __muss__ als erstes die Zuweisungen für * den [:Benutzer und Gruppen:Benutzer], (sofern ungleich ''root'') → siehe [:chown:] * die [:Rechte:] → siehe [:chmod:] erhalten, da ansonsten keine Daten bzw. Verzeichnisse darin ohne root-Rechte angelegt werden können.")]] ==btrfs subvolume delete== Um ein bestehendes Unter-Laufwerk (Subvolume) wieder zu löschen, kann man dieses (ggf. nach dem Einbinden in das eigene System) mit der Eingabe in ein Terminal[1] von: [[Vorlage(Befehl,"sudo btrfs subvolume delete /media/BEZEICHNUNG")]] Um einen Snapshot zu löschen, geht man folgendermaßen vor: {{{ -sudo btrfs subvolume list / ID 257 gen 968515 top level 5 path @ ID 544 gen 968508 top level 5 path @apt-snapshot-2017-03-21_08:53:57 -mount /dev/sda9 /mnt/temp => die 9 ersetzen durch die aktuelle Platte, /mnt/temp vorher anlegen -ls /mnt/temp total 16K drwxr-xr-x 1 root root 76 Feb 3 18:13 .. drwxr-xr-x 1 root root 266 Feb 20 12:08 @apt-snapshot-2017-03-21_08:53:57 drwxr-xr-x 1 root root 68 Apr 22 08:53 . drwxr-xr-x 1 root root 272 Apr 22 09:01 @ -sudo btrfs subvolume delete /mnt/temp/@apt-snapshot-2017-03-21_08:53:57 Delete subvolume (no-commit): '/mnt/temp/@apt-snapshot-2017-03-21_08:53:57' -sudo umount /mnt/temp }}} [[Vorlage(Experten,"Die normale Bash-Routine/Befehlsequenz [[Vorlage(Befehl,'sudo rm -rf /mnt/BEZEICHNUNG')]] ist für ein Subvolume unwirksam. Es wird dabei nur der Inhalt des Unterlaufwerkes (Subvolume) gelöscht und das kann zu unkontrolliertem Verhalten bzw. auch Datenverlust führen. Man sollte daher vorab mit dem Befehl [#btrfs-subvolume-list `btrfs subvolume list`] den Status eines Verzeichnisses überprüfen!")]] ==btrfs subvolume find-new== Will man Informationen über den Zustand einzelner Dateien angezeigt bekommen, so kann man diese im Terminal[1] abfragen mit: [[Vorlage(Befehl,"sudo btrfs subvolume find-new /home 20725 > liste.txt")]] Dabei bedeuten * `/home` ein gültiges Unterlaufwerk (Subvolume) und * `20725` die laufende Nummer der Metadaten-Information, ab der ein Suchvorgang erfolgen soll (jünger als Parameter). Man sollte erst einmal mit einer zu hohen Zahl (z.B. 1 000 000) anfangen, dann erhält man als Ausgabe die letzte lfd. Zählnummer - z.B.: {{{transid marker was 20741}}} mit der man dann (<=) eine erneute Suche einleiten kann und erhält u.a.: {{{inode 9690 file offset 0 len 20 disk start 0 offset 0 gen 20728 flags INLINE ~/.local/share/zeitgeist/bb.fts.index/postlist.baseB}}} * `> liste.txt` Damit wird die Ausgabe in eine Datei umgeleitet. Dieses ist immer vorzuziehen - ein Abbrechen der Ausgabe ist jederzeit möglich mit [[Vorlage(Tasten,strg + c)]]. ==btrfs subvolume list== Um die Unter-Laufwerke (Subvolumes) ID in einem aktiven System abzufragen, gibt man in ein Terminal[1] ein: [[Vorlage(Befehl,"btrfs subvolume list /")]] und erhält (die beispielhafte) Ausgabe für das aktuelle Wurzelverzeichnis: {{{ ID 260 top level 5 path @ ID 258 top level 5 path @home ID 261 top level 5 path @data}}} Diese Daten sind für das Einbinden von Partitionen mit Subvolumes von Interesse, sowohl für das aktuelle einmalige Einbinden als auch für die '''/etc/fstab'''. Unterlaufwerke (Subvolumes), welche nicht zum Wurzelverzeichnis gehören, kann man dann anstelle mit `… -o subvol=@data …` z.B. sicherer einbinden mit: [[Vorlage(Befehl,"sudo mount -o subvolid=261 /dev/sda3 /media/daten")]] bzw. in der '''/etc/fstab''': {{{UUID=2f613613-85b4-46cf-bbbe-90a1748f7753 /media/daten btrfs defaults,subvolid=261 0 0}}} ==btrfs subvolume set-default== Legt ein Subvolume als Standard fest, welches beim Mounten ohne weitere Mount-Optionen in den Zielordner gemountet wird. Standardmäßing ist dies das beim Anlegen des Dateisystems erstellte Top-Level-Subvolume mit der internen subvolid=5. [[Vorlage(Befehl,"sudo btrfs subvolume set-default SUB_ID FS-PATH")]] `SUB_ID` ist die ID des neu zu spezifizierenden Subvolumes. FS-PATH ist der Ordner, in den das zu ändernde BTRFS-Dateisystem gemountet ist. Um das Top-Level-Subvolume als Standard wiederherzustellen, gibt man also z.B. ein: [[Vorlage(Befehl,"sudo mount /dev/sda1 /mnt")]] [[Vorlage(Befehl,"sudo btrfs subvolume set-default 5 /mnt")]] [[Vorlage(Befehl,"sudo umount /dev/sda1")]] ==btrfs subvolume snapshot== Um einen aktuellen Zustand des Dateisystemes bzw. Teilen davon zu erhalten (Snapshot), kann man über ein Terminal[1] diesen erstellen lassen (quasi Backup). Dieses kann in einem laufenden System oder auch aus einem Live-System erfolgen. Als Quelle wird von einer Partition mit Subvolumes ausgegangen. Als Beispiel wird hier vom Laufwerk '''/dev/sda1''' mit dem Unterlaufwerk (Subvolume) '''@home''' ausgegangen. Man gibt dann nacheinander in ein Terminal[1] ein: [[Vorlage(Befehl,"sudo mount /dev/sda1 /mnt")]] [[Vorlage(Befehl,"cd /mnt")]] Der Schnappschuss wird erstellt mit: [[Vorlage(Befehl,"sudo btrfs subvolume snapshot @home home-2012-04-28")]] Als Ziel __muss__ ein Verzeichnis auf dem gleichen Laufwerk gewählt werden, als Bezeichnung sollte eine mit aussagefähigem Text (z.B.: `home-datum`) genommen werden. Es wird dabei nur geringfügig mehr Speicherplatz in Anspruch genommen, da der Snapshot nur ein zusätzliches Unterlaufwerk (Subvolume) darstellt, intern werden die Verzeichnisse und Dateien nur mit den Metadaten verlinkt. Einen älteren Schnappschuss sollte man mit dem Befehl [#btrfs-subvolume-delete `btrfs subvolume delete`] löschen. Danach kann/sollte man den Einhängepunkt wieder lösen mit: [[Vorlage(Befehl,"cd ..")]] [[Vorlage(Befehl,"sudo umount /dev/sda1")]] [[Vorlage(Hinweis,"Nach dem Löschen eines Schnappschusses werden in dem automatisch startenden Hintergrundprozess (`btrfs-cleaner`) alle überflüssigen Dateien und Metadaten überprüft und gelöscht. Dass kann je nach Datenmenge und Zugriffszeit auf die Festplatte(n) erhebliche Zeit in Anspruch nehmen. Ein Weiterarbeiten ist dabei grundsätzlich möglich.")]] [[Vorlage(Experten,"Nach einem Schnappschuss bleiben die realen Dateien auf der Festplatte solange erhalten, bis dieser Schnappschuss wieder gelöscht wird. Deshalb sollte man vor dem Anlegen eines Schnappschusses alle überflüssigen Daten / Dateien löschen. * Beispiel 1 Vorhanden seien Kernel A und Kernel B, als man den Schnappschuss angelegt hat. Nach einiger Zeit wird der Kernel C hinzugefügt und der Kernel A gelöscht. Dann bleiben trotzdem alle Daten für Kernel A auf der Festplatte bestehen, denn diese werden (bis zum Löschen) vom Schnappschuss gehalten. * Beispiel 2 Im Verzeichnis '''/var/cache/apt/archives''' werden die Pakete für die Installation, das Update bzw. ein Upgrade solange aufbewahrt, bis diese gelöscht werden (was nicht immer automatisch erfolgt). So sammeln sich so ggf. größere Datenmengen an!")]] =Direkte Befehle= ==btrfs-convert== Die Konvertierung von ext2 - ext4 nach Btrfs erfolgt bei einer Eingabe in das Terminal[1] von: [[Vorlage(Befehl,"btrfs-convert [-d] [-i] [-n] [-r] GERÄT")]] Die zugehörigen Optionen und Parameter sind: * `-d` = deaktiviere Prüfsummen der Daten * `-i` = ignoriere xattrs and ACLs * `-n` = verzichte auf Verdichtung kleiner Files (< Seitegröße) * `-r` = mit der Sicherungsdatei zurück konvertieren * `GERÄT` = relevantes Laufwerk / Partition ==btrfs-debug-tree== [[Vorlage(Warnung,"Der Befehl [[Vorlage(Befehl,'sudo btrfs-debug-tree')]] darf nicht auf einem eingehängten (mounted) Dateisystem angewendet werden!")]] Um den gesamten Metadatenbaum (BTree) eines Laufwerkes mit den einzelnen Einträgen (Äste und Blätter) zu überprüfen, gibt man für ein __nicht eingebundenes__ Laufwerk im Terminal[1] ein: [[Vorlage(Befehl,"sudo btrfs-debug-tree [-e] GERÄT > Ausgabe.txt")]] Die bedarfsweise Option * `-e` beschränkt die Ausgabe auf fehlerhafte Einträge. Das zu prüfende Laufwerk ist mit '''/dev/sda1''' bzw. der relevanten Laufwerksbezeichnung vorzugeben. Um die Ausgabe in Ruhe auswerten zu könnnen, sollte man die Ausgabe mit `> Ausgabe.txt` in eine Datei umleiten. ==btrfs-image== Mit diesem Befehl wird eine Image-Datei erstellt, die von der angegebenen Quelle ein Image unter dem angebenen Ziel erstellt. [[Vorlage(Hinweis,"Das Ergebnis ist __nicht__ vergleichbar mit dem, was mit dem Befehl [#btrfs-subvolume-snapshot `btrfs subvolume snapshot`] erreicht wird. Hier werden nur die Metadaten des Btrfs-Dateisystemes in eine Datei kopiert - die eigentlichen Daten werden jeweils als Null-Datei übernommen!")]] Dazu gibt man in das Terminal[1] ein: [[Vorlage(Befehl,"btrfs-image [Option(en)] QUELLE ZIEL")]] Die Optionen haben folgende Bedeutung: * `-r` = Schreibe ein älteres Image zurück * `QUELLE` ist das Image, `ZIEL` das Laufwerk * `-c WERT` = Komprimierung, Wert von 0 = keine, 1 = niedrigste `zlib`, 9 = höchste `zlib` * `-t WERT` = Anzahl der parallelen Prozesse, Wert von 1 bis 32, Default = Anzahl CPUs * `QUELLE` = ein gültiges Btrfs-Laufwerk - '''/dev/sdXY''' * `ZIEL` = eine aussagefähige Bezeichnung (inkl. Pfadangabe) Dieses Image belegt zusätzlichen Speicherplatz und sollte nach dem Fertigstellen auf ein anderes oder externes Laufwerk gesichert werden. [[Vorlage(Ausbaufähig)]] =Kompakte Befehle= ==btrfsck== Um eine manuelle Prüfung am Dateisystem für ein __nicht__ eingebundenes Laufwerk auszuführen, gibt man in das Terminal[1] ein: [[Vorlage(Befehl,"btrfsck /dev/sda1")]] und erhält bei einem fehlerfreien Durchlauf (beispielhaft): {{{found 2662187008 bytes used err is 0 total csum bytes: 2410436 total tree bytes: 192860160 total fs tree bytes: 179916800 btree space waste bytes: 46454099 file data blocks allocated: 13467791360 referenced 2771017728 Btrfs Btrfs v0.19}}} Da diese Dateiprüfung zur Zeit mit dem Standardtool keine Korrekturen ausführt, kann man sich selbst helfen, indem man eine solche Prüfung manuell ausführt. Dazu legt man sich das folgende Skript z.B. als '''dateick-btrfs''' ausführbar ab nach: * '''/usr/local/sbin''' {{{#!code bash #!/bin/bash E_BADARGS=65 function FEHLERSUCHE { find $1 -mount -type f -exec cat '{}' > /dev/null \; } if [ $# -ne 1 ] then echo "Bitte geben Sie den Pfad zu"; echo "dem eingehängten Laufwerk an"; exit $E_BADARGS fi echo "Skript \"dateick-btrfs\" wurde gestartet."; echo "Überprüfe $1, das wird eine Weile dauern!"; FEHLERSUCHE "$1" echo "Fehlersuche beendet! Bitte prüfen Sie 'dmesg' auf mögliche Fehler"; exit 0 }}} Das Skript wird im Terminal z.B. mit: [[Vorlage(Befehl,"sudo dateick-btrfs /etc")]] gestartet und überprüft den angegebenen Pfad rekursiv dahingehend, ob die Prüfsummen der Dateien mit den redundanten Prüfsummen übereinstimmen. Wenn eine falsche Prüfsumme gefunden wird, sendet die Kernelroutine einen entsprechenden Hinweis, der im Terminal mit [[Vorlage(Befehl,dmesg)]] ausgelesen werden kann. [[Vorlage(Hinweis,"Das Skript arbeitet nicht auf einem mit `single` formatierten Btrfs-Dateisystem, siehe auch den Expertenhinweis beim Befehl `mkfs.btrfs`.")]] ==btrfstune== Will man ein reales Backup von einer Partition insgesamt oder einem Unterlaufwerk (Subvolume) extern anlegen, so __muss__ diese Option vorab gesetzt (enabled) werden. Alternativ kann man die Partition auch mit der Option `ro` einbinden! Will man mit einem Dateisystem (experimentell) arbeiten, so empfiehlt es sich, auch hierbei dieses auf den Status * nur lesbar (readonly) einzustellen. Dazu gibt man in ein Terminal[1] ein: [[Vorlage(Befehl,"sudo btrfstune 0 /dev/sda1")]] Die Optionen sind * `0` = normale Einstellung, les- und beschreibbar (disabled) * `1` = Seeding-Flag setzen, __nur__ lesbar (enabled) Bei erfolgreicher Umstellung wird beim Setzen des Seeding-Flags keine Rück-/Fehlermeldung ausgegeben - hingegen erfolgt im Fehlerfall bzw. beim Entfernen des Seeding-Flags folgende Ausgabe: {{{seeding flag is not set on /dev/sda1}}} =Obsolete Befehle= ==btrfsctl== Dieser alternative Befehl sollte nicht mehr verwendet werden (unsichere Befehlsausführung, wird nicht mehr gepflegt). Der `btrfsctl`-Befehl stellt eine Zusammenfassung der einzelnen `btrfs`-Befehle dar. Die Eingabe in das Terminal [1] erfolgt mit: [[Vorlage(Befehl,"sudo btrfsctl [Option(en)]")]] ==btrfs-show== Dieses ist ein alternativer Befehl zu [#btrfs-filesystem-show `btrfs filesystem show`] und sollte nicht mehr verwendet werden (unsichere Befehlsausführung, wird nicht mehr gepflegt). ==btrfs-vol== Dieses ist ein alternativer Befehl, je nach Option `-a` = [#btrfs-device-add `btrfs device add`], `-b` = [#btrfs-filesystem-balance `btrfs filesystem balance`] sowie `-r` = [#btrfs-device-delete `btrfs device delete`] und sollte nicht mehr verwendet werden (unsichere Befehlsausführung, wird nicht mehr gepflegt). ==btrfs filesystem balance== Dieses ist ein alternativer Befehl zu [#btrfs-balance `btrfs balance`] und sollte nicht mehr verwendet werden (unsichere Befehlsausführung, wird nicht mehr gepflegt). =Links= * [:Btrfs-Dateisystem:Das Btrfs Dateisystem] {Übersicht} * [:FAQ_Btrfs-Dateisystem:Allgemeine Hinweise zum Btrfs Dateisystem] ## * [:Archiv/Installieren_auf_Btrfs-Dateisystem:Installieren auf Btrfs-Dateisystem] ## * [:Archiv/Konvertierung_nach_Btrfs:Konvertierung nach Btrfs] ## * [:Archiv/Befehle_Btrfs-Dateisystem:Befehle Btrfs-Dateisystem] ## * [:Archiv/Btrfs-Mountoptionen:Btrfs-Mountoptionen] ==Informationen== * [wikipedia:Btrfs:Btrfs-Dateisystem] * [ubuntu_doc:community/btrfs: Ubuntu-Help Btrfs] * [https://btrfs.wiki.kernel.org/ btrfs.wiki.kernel.org] {us} * [https://www.admin-magazin.de/Das-Heft/2009/04/Das-neue-Linux-Dateisystem-Btrfs-im-Detail Btrfs im Detail] {de} * [https://www.funtoo.org/wiki/BTRFS_Fun funtoo.org Btrfs] {en} ==Downloads== * [sourceforge:partedmagic:PartedMagic] {en} {dl} #tag: System, Btrfs, Dateisystem