Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:dateisysteme:btrfs:btrfs

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
tutorials:dateisysteme:btrfs:btrfs [2025/01/12 12:49] – [Snapshots] Richtig stellung das ein Snapshot eine Referenzierung und keine Kopie ist. gahsultutorials:dateisysteme:btrfs:btrfs [2025/02/25 18:41] (aktuell) – [Siehe auch] So verwendest du BTRFS in der PRAXIS! gahsul
Zeile 9: Zeile 9:
 ===== Dateisystem Erstellung ===== ===== Dateisystem Erstellung =====
  
-Ein BTRFS Dateisystem wird mit [[am>mkfs.btrfs.8|mkfs.btrfs]] erstellt. Die häufigsten Optionen die bei der Erstellung des Dateisystems mit angeben werden sind:+Ein BTRFS Dateisystem wird mit [[am>mkfs.btrfs.8|mkfs.btrfs]] erstellt. Die häufigsten Optionendie bei der Erstellung des Dateisystems mit angeben werden sind:
  
   * [[am>mkfs.btrfs.8#L_|-L]] Um dem Dateisystem ein Label zu geben   * [[am>mkfs.btrfs.8#L_|-L]] Um dem Dateisystem ein Label zu geben
-  * [[am>mkfs.btrfs.8#csum|--csum]] Um dem gewünschten checksum Algorithmus auszuwählen (Standard ist crc32c). **Dies lässt sich nachträglich nicht mehr ändern!** +  * [[am>mkfs.btrfs.8#csum|--csum]] Um den gewünschten Checksummen Algorithmus auszuwählen (Standard ist crc32c). <wrap important>Dies lässt sich nachträglich nicht mehr ändern!</wrap> 
-  * [[am>mkfs.btrfs.8#O_|-O]] Um nicht benötigte Funktionen wie z.b. die ''raid56'' oder ''quota'' an/abzuschalten. Für eine Vollständige Liste siehe auch ''-O list-all''+  * [[am>mkfs.btrfs.8#O_|-O]] Um nicht benötigte Funktionen wie z.b. die ''raid56'' oder ''quota'' an/abzuschalten. Für eine vollständige Liste siehe auch ''-O list-all''
  
 ==== Beispielbefehl ==== ==== Beispielbefehl ====
Zeile 26: Zeile 26:
 Ein [[https://btrfs.readthedocs.io/en/latest/Subvolumes.html|BTRFS-Subvolumen]] ist ein Teil eines Dateisystems mit einer eigenen, unabhängigen Datei-/Verzeichnishierarchie und einem Inode-Nummern-Namespace. Subvolumen können Dateibereiche gemeinsam nutzen. Ein [[https://btrfs.readthedocs.io/en/latest/Subvolumes.html|BTRFS-Subvolumen]] ist ein Teil eines Dateisystems mit einer eigenen, unabhängigen Datei-/Verzeichnishierarchie und einem Inode-Nummern-Namespace. Subvolumen können Dateibereiche gemeinsam nutzen.
  
-<WRAP info>+<WRAP tip>
 **Hinweis:** Subvolumen können verwendet werden, um bei der Erstellung eines Snapshots dieses Subvolumen auszulassen. Da immer nur das angebe, Subvolumen von einem Snapshot betroffen ist und andere Subvolumen nicht mit gesichert werden. **Hinweis:** Subvolumen können verwendet werden, um bei der Erstellung eines Snapshots dieses Subvolumen auszulassen. Da immer nur das angebe, Subvolumen von einem Snapshot betroffen ist und andere Subvolumen nicht mit gesichert werden.
 </WRAP> </WRAP>
Zeile 52: Zeile 52:
 </WRAP> </WRAP>
  
-==== Subvolumes Mounten ====+==== Subvolumen Mounten ====
  
 Es folgt ein Beispiel Mount Befehl, um ein angelegtes Subvolumen direkt zu mounten. Die wichtige Mount Option ist hierbei **''subvol=''** womit das gewünschte Subvolumen angeben wird. Andere beliebte Mount Optionen sind **''noatime,compress=zstd,discard''** Es folgt ein Beispiel Mount Befehl, um ein angelegtes Subvolumen direkt zu mounten. Die wichtige Mount Option ist hierbei **''subvol=''** womit das gewünschte Subvolumen angeben wird. Andere beliebte Mount Optionen sind **''noatime,compress=zstd,discard''**
Zeile 72: Zeile 72:
 Ein Snapshot ist ebenfalls ein Subvolumen, jedoch mit einem vorgegebenen Anfangsinhalt des ursprünglichen Subvolumen. Ein Subvolumen hat immer die Inode-Nummer 256. Somit kann ein Snapshot wie eine schnelle Art von Referenzierung mit dem Inhalt eines anderen Subvolumen betrachtet werden, das sich nicht mit ändert. Ein Snapshot ist ebenfalls ein Subvolumen, jedoch mit einem vorgegebenen Anfangsinhalt des ursprünglichen Subvolumen. Ein Subvolumen hat immer die Inode-Nummer 256. Somit kann ein Snapshot wie eine schnelle Art von Referenzierung mit dem Inhalt eines anderen Subvolumen betrachtet werden, das sich nicht mit ändert.
  
-<WRAP info>+<WRAP tip>
 **Hinweis:** Subvolumen können verwendet werden, um bei der Erstellung eines Snapshots dieses Verzeichnis (Subvolumen) auszulassen. Da immer nur das Angebe Subvolumen von einem Snapshot betroffen ist und andere Subvolumen nicht mit gesichert werden. **Hinweis:** Subvolumen können verwendet werden, um bei der Erstellung eines Snapshots dieses Verzeichnis (Subvolumen) auszulassen. Da immer nur das Angebe Subvolumen von einem Snapshot betroffen ist und andere Subvolumen nicht mit gesichert werden.
 </WRAP> </WRAP>
Zeile 81: Zeile 81:
 Ein Snapshot wird so angelegt: Ein Snapshot wird so angelegt:
  
-  * [[am>btrfs-subvolume.8#r~2|-r]] legt ein Readonly Snapshot an.+  * [[am>btrfs-subvolume.8#r~2|-r]] legt ein Read-only Snapshot an.
  
 <code bash> <code bash>
Zeile 93: Zeile 93:
 === Snapshot Automation === === Snapshot Automation ===
  
-Das Anlegen von eines Snapshots lässt sich mithilfe verschiederner Tools automatisieren. Eins davon ist [[https://github.com/hirak99/yabsnap|yabsnap]]. Für eine Erläuterung siehe dazu:+Das Anlegen von eines Snapshots lässt sich mithilfe verschiedener Tools automatisieren. Eins davon ist [[aur>yabsnap|yabsnap]]<sup>**AUR**</sup>. Für eine Erläuterung siehe dazu:
  
   * [[https://github.com/hirak99/yabsnap|yabsnap Github Repo]]   * [[https://github.com/hirak99/yabsnap|yabsnap Github Repo]]
Zeile 118: Zeile 118:
 ===== Swapdatei ===== ===== Swapdatei =====
  
-Wenn eine Swapdatei verwendet werden soll gibt es ein paar Dinge zu beachten:+Wenn eine Swapdatei verwendet werden sollgibt es ein paar Dinge zu beachten:
  
-  * Das Subvolume worin sich eine Swapdatei befindet, kann kein Snapshot für angelegt werden. Daher ist es ratsam die Swapdatei alleine für sich in ein eigenes Subvolume z.B.''@swap'' anzulegen. und diese z.b. unter ''/swap/'' zu mounten. +  * <wrap important>Eine Swapdatei kann nur mit dem Single Data Profil verwendet werden. Dies schließt eine Nutzung der Btrfs RAID Profile aus!</wrap> 
-  * Für die Swapdatei muss COW deaktiviert sein. COW lässt sich anfänglich nur für leere Dateien abschalten. um den Vorgang zu vereinfachen haben die **btrfs sools** eine Hilfefunktion dafür die diese schritte mit erledigt, siehe weiter unten+  * <wrap important>Das Subvolumen, worin sich eine Swapdatei befindet, kann kein Snapshot für angelegt werden. Daher ist es ratsam die Swapdatei alleine für sich in ein eigenes Subvolumen z.B.''@swap'' anzulegen. Und diese z.b. unter ''/swap/'' zu mounten.</wrap> 
-  * Soll die Swapdatei z.B. für den Ruhezustand verwendet werden, so lässt sich das offset der Swapdatei nicht mit ''filefrag -v'' bestimmen. Da Btrfs eine Abstartionschicht zum mappen der Dateien verwendet. um das Offset zu bestimmen gibt es auch eine Hilfefunktion in den **btrfs tools** siehe+  * Für die Swapdatei muss COW deaktiviert sein. COW lässt sich anfänglich nur für leere Dateien abschalten. um den Vorgang zu vereinfachen haben die **btrfs tools** eine Hilfefunktion dafürdie diese schritte mit erledigt, siehe [[#Swapdatei anlegen]]
 +  * <wrap important>Soll die Swapdatei z.B. für den Ruhezustand verwendet werden, so lässt sich das Offset der Swapdatei nicht mit ''filefrag -v'' bestimmen. Da Btrfs eine Abstraktionsschicht zum Mappen der Dateien verwendet. um das Offset zu bestimmengibt es auch eine Hilfefunktion in den **btrfs tools** siehe [[#Offset der Swapdatei bestimmen]]</wrap>
  
 ==== Swapdatei anlegen ==== ==== Swapdatei anlegen ====
Zeile 143: Zeile 144:
   * [[https://btrfs.readthedocs.io/en/latest/Swapfile.html|btrfs Dokumentation - Swapfile]]   * [[https://btrfs.readthedocs.io/en/latest/Swapfile.html|btrfs Dokumentation - Swapfile]]
  
 +===== NO_COW =====
 +
 +<WRAP info>
 +Verzeichnis und/oder Dateien, deren Inhalt sich schnell und häufig ändert, wirkt sich COW nachteilig auf die Geschwindigkeit des Dateisystems aus.
 +</WRAP>
 +
 +<WRAP important>
 +Wichtig: für ''NO_COW'' Dateien werden keine Checksummen gebildet. Dadurch kann keine stille Datenbeschädigung festgestellt werden. Und damit auch die Selbstheilung der Dateien deaktiviert, falls diese z.b. durch ein RAID1 Profil redundant vorgehalten werden. Da Btrfs schlicht und einfach nicht mehr feststellen kann, welche Version der Datei die noch intakte Variante ist.
 +</WRAP>
 +
 +Beispiele hierfür sind:
 +
 +  * Virtuelle Maschinen Datei Images
 +  * Datenbanken
 +  * Logdateien
 +  * Verzeichnisse, in dem Software compiliert wird und viele kleine temporäre Dateien entstehen.
 +
 +Für solche Anwendungsfälle lässt sich ''COW'' deaktivieren. Dies kann mithilfe des **''C''** ACL Flags erreicht werden. Wird das Flag auf ein Verzeichnis angewandt, so bekommen alle neu angelegten Dateien automatisch das ''C'' (nocow) zugewiesen.
 +
 +<WRAP important>
 +Soll hingegen das ''C'' Flag auf eine Datei direkt angewandt werden, muss sichergestellt sein, dass diese Datei leer ist.
 +</WRAP>
 +
 +<WRAP info>
 +Ergänzender weise sei noch die ''nodatacow'' mount Option erwähnt. Diese lässt sich aber meist nicht verwenden, da momentan Subvolumen noch nicht mit unterschiedlichen Mount Optionen gemountet werden können. Und somit dies nicht größtenteils nicht sinnvoll genutzt werden kann.
 +</WRAP>
 +
 +==== Beispiele ====
 +
 +=== Setzen des C Flags ===
 +
 +<code bash>
 +chattr +C <Verzeichnis/Datei>
 +</code>
 +
 +=== Nachträgliches setzten des C Flags auf eine Datei mit Inhalt ===
 +
 +<code bash>
 +$ mv /path/to/dir /path/to/dir_old
 +$ mkdir /path/to/dir
 +$ chattr +C /path/to/dir
 +$ cp -a --reflink=never /path/to/dir_old/. /path/to/dir
 +$ rm -rf /path/to/dir_old
 +</code>
 +
 +==== Auswirkungen auf Snapshots ====
 +
 +Für einen Snapshot ist COW erfoderlich. Aus diesem Grund wird beim anlegen eines Snapshots bei der ersten Schreibopertation auf eine ''NO_COW'' Datei. Eine COW Kopie für den Snapshot erstellt. Die nachfolgenden Schreibforgänge erfolgen dann wieder mit ''NO_COW''. Da das anlegen häufiger Snapshots von solchen Dateien wieder die Geschwindigkeit negativ beinflusst. Wird empfholen solche Dateien in einen eigenes Subvolumen unterzubringen das von dem Snapshot ausgeschlossen wird.
 +
 +==== siehe auch ====
 +
 +  * [[aw>Btrfs#Disabling_CoW]]
 +  * [[aw>Btrfs#Effect_on_snapshots]]
 +
 +===== Ermittlung des Speicherplatzes =====
 +
 +==== Einleitung ====
 +
 +BTRFS kann sehr Speicherplatz effizient Daten vorhalten, indem die COW Eigenart des Dateisystems genutzt wird. Statt eine Datei ein zweites Mal physikalisch zu kopieren, wird stattdessen auf diese referenziert. Das sorgt dafür, dass nur neue Änderungen tatsächlich gespeichert werden müssen, und der Kopiervorgang ist quasi sofort erledigt. Nach diesem Prinzip arbeiten auch die Snapshots.
 +
 +Leider kommen übliche Tools wie z.B.''df'' und ''du'' mit solch referenzierten Daten nicht mit klar. Und zeigen somit nicht die ganze Wahrheit an. Diese Tools beziehen sich nur auf die Daten des aktuellen Subvolumen, und berücksichtigen nicht das Daten vielleicht noch in einen Snapshot referenziert vorliegen.
 +Somit kann es vorkommen, dass Daten im Subvolumen **@** gelöscht wurden, ''df'' meldet, dass der Speicherplatz freigeben wurde, aber tatsächlich diese Daten noch in einem Snapshot vorliegen. Genau sowenig kann das normale ''du'' keine referenzierten Daten anzeigen.
 +
 +==== BTRFS eigene Speicherplatz Verwaltungstools ====
 +
 +Aus diesem Grund haben die ''btrfs-tools'' ihre eigenen Varianten von diesen Tools. Die Referenzierungen und Komprimierung mit berücksichtigen.
 +
 +=== btrfs filesystem df ===
 +
 +[[am>btrfs-filesystem.8.en#df|btrfs filesystem df]] zeigt somit unter anderem an:
 +
 +  * Wie groß die eigentlichen Dateiinhalte (**Data, total**) und wie viel sie eigentlich an Speicherplatz unter der Berücksichtigung von Referenzen und Komprimierung einnehmen (**used**).
 +  * Dasselbe noch einmal für die Metadaten (**Metadata**)
 +  * Und noch einmal für den Systembaum (**System**)) der **Data** und **Metadata** verbindet.
 +  * Die GlobalReserve ist Speicherplatz den sich BTRFS für die 3 Baumstrukturen zum Verwalten reserviert, damit das Dateisystem steuerbar bleibt, falls der Speicherplatz zur Neige geht.
 +
 +== Beispielausgabe ==
 +
 +<code bash>
 +$ btrfs filesystem df /path
 +Data, single: total=1.15TiB, used=1.13TiB
 +System, single: total=32.00MiB, used=144.00KiB
 +Metadata, single: total=12.00GiB, used=6.45GiB
 +GlobalReserve, single: total=512.00MiB, used=0.00B
 +</code>
 +
 +=== btrfs filesystem du ===
 +
 +**''btrfs filesystem du''** zeigt genauso wie sein analoger Bruder ''du'' die Speicherplatzbelegung einzelner Dateien, und/oder die Summe ganzer Verzeichnisse an. Nur mit dem Unterschied, das zusätzlich noch angezeigt wird, ob die Menge an Daten einzigartig sind (keine weiteren Referenzen besitzen) oder noch durch eine Refernez in einem Subvolumen oder Reflink Kopie geteilt wird.
 +
 +== Beispielausgabe ==
 +
 +<code bash>
 +$ btrfs filesystem du -s /home/ 
 +     Total   Exclusive  Set shared  Filename
 +  21.55GiB     5.85GiB    14.94GiB  /home/
 +</code>
 +
 +=== btrfs filesystem usage ===
 +
 +**''btrfs filesystem usage''** ist die nützlichste Speicherplatzanzeige, die, **''btrfs-tools''**zu bieten haben, dies muss auf ein Mountpoint des Dateisystems mit Root Rechten ausgeführt werden. Sie zeigt eine komplette Übersicht des ganzen Dateisystems an für die einzelnen Datenstrukturen wie: **Data, Metadaten und System** und was noch viel wichtiger ist, wie viel Speicherplatz das Dateisystem für bereits allokiert hat, und wie viel unallokierter Speicherplatz noch zur Verfügung steht (Tatsächlicher freier Speicher).
 +
 +Damit Allokierter Speicherplatz wieder freigeben werden kann, so müssen alle Dateien/Daten in einem [[wp>Extent_(file_systems)|Extent]] zur Löschung markiert worden sein. Oder ein [[#btrfs balance]] durchgeführt werden, um die Extents neu effizienter zusammenzupacken.
 +
 +== Beispielausgabe ==
 +
 +<code bash>
 +# btrfs filesystem usage / 
 +Overall:
 +    Device size: 931.51GiB
 +    Device allocated: 119.06GiB
 +    Device unallocated: 812.45GiB
 +    Device missing:     0.00B
 +    Device slack:     0.00B
 +    Used: 111.34GiB
 +    Free (estimated): 818.18GiB (min: 411.96GiB)
 +    Free (statfs, df): 818.18GiB
 +    Data ratio:      1.00
 +    Metadata ratio:      2.00
 +    Global reserve: 237.06MiB (used: 0.00B)
 +    Multiple profiles:        no
 +
 +Data,single: Size:115.00GiB, Used:109.26GiB (95.01%)
 +   /dev/mapper/luks-main 115.00GiB
 +
 +Metadata,DUP: Size:2.00GiB, Used:1.04GiB (51.81%)
 +   /dev/mapper/luks-main   4.00GiB
 +
 +System,DUP: Size:32.00MiB, Used:16.00KiB (0.05%)
 +   /dev/mapper/luks-main 64.00MiB
 +
 +Unallocated:
 +   /dev/mapper/luks-main 812.45GiB
 +</code>
 ===== Siehe auch ===== ===== Siehe auch =====
  
Zeile 152: Zeile 287:
   * [[https://www.suletuxe.de/forum/index.php?board=11;action=display;threadid=993|Suletuxe Forum - Sichern einzelener Subvolumes von Btrfs]]   * [[https://www.suletuxe.de/forum/index.php?board=11;action=display;threadid=993|Suletuxe Forum - Sichern einzelener Subvolumes von Btrfs]]
   * [[https://www.suletuxe.de/forum/index.php?board=18;action=display;threadid=1007|Btrfs Subvolume Backups mit restic]]   * [[https://www.suletuxe.de/forum/index.php?board=18;action=display;threadid=1007|Btrfs Subvolume Backups mit restic]]
 +  * [[ytv>VpMJ0NAZLmA|Alles, was du über BTRFS wissen musst! Dateisystem erklärt]]
 +  * [[ytv>dRgaQIZuJ1A|So verwendest du BTRFS in der PRAXIS!]]
 +
tutorials/dateisysteme/btrfs/btrfs.1736686168.txt.gz · Zuletzt geändert: 2025/01/12 12:49 von gahsul