BtrFS: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(26 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= Links = | = Links = | ||
* [[VmHost]] | * [[VmHost]] | ||
* Scrub-Script: http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html | |||
* Position einer Datei im Image: https://blogs.oracle.com/wim/btrfs-scrub-go-fix-corruptions-with-mirror-copies-please | |||
= Erstellen = | = Erstellen = | ||
* Paket: btrfs-progs | |||
* '''Achtung''': Immer Partitionsschema anlegen (fdisk...). Ohne geht auch, aber mit Einschränkungen (grub...) | * '''Achtung''': Immer Partitionsschema anlegen (fdisk...). Ohne geht auch, aber mit Einschränkungen (grub...) | ||
<pre>mkfs.btrfs -L debian10 /dev/sdb1 | <pre>mkfs.btrfs -L debian10 /dev/sdb1 | ||
btrfs filesystem label /dev/sdb1 debian10 | btrfs filesystem label /dev/sdb1 debian10 | ||
# oder RAID1 für Daten (-d) und Metadaten (-m): | # oder RAID1 für Daten (-d) und Metadaten (-m): | ||
mkfs. | mkfs.btrfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1 -f | ||
# Anzeigen: | # Anzeigen: | ||
btrfs filesystem usage /media/work | btrfs filesystem usage /media/work | ||
# Späteres Hinzufügen: | # Späteres Hinzufügen: | ||
# btrfs device NEWDEVICE OLDDEVICE | |||
btrfs device add -f /dev/sdd1 /media/work | btrfs device add -f /dev/sdd1 /media/work | ||
# Balance notwendig! | # Balance notwendig! | ||
Zeile 16: | Zeile 20: | ||
btrfs balance start -dconvert=raid1 -mconvert=raid1 /media/work | btrfs balance start -dconvert=raid1 -mconvert=raid1 /media/work | ||
</pre> | </pre> | ||
== /etc/fstab == | |||
<pre> | |||
LABEL=fs.bullseye / btrfs defaults,noatime,nodiratime,compress=zstd,autodefrag,subvol=@rootfs 0 0 | |||
LABEL=fs.bullseye /media/fs.sys btrfs defaults,noatime,nodiratime,compress=zstd,autodefrag,subvolid=5 0 0 | |||
</pre> | |||
= Kommandos = | = Kommandos = | ||
<pre> | <pre> | ||
Zeile 30: | Zeile 40: | ||
btrfs property set /usr compression lzo | btrfs property set /usr compression lzo | ||
btrfs property get /usr compression | btrfs property get /usr compression | ||
btrfs scrub start / | |||
btrfs scrub status / | |||
# Für nodatacow: | # Für nodatacow: | ||
chattr -RV +C /var/lib/mysql/images | chattr -RV +C /var/lib/mysql/images | ||
lsattr -R /var/lib/mysql/images | lsattr -R /var/lib/mysql/images | ||
# Kompression anzeigen: | |||
compsize /media/work | |||
</pre> | |||
== Info == | |||
<pre> | |||
btrfs device scan [/dev/sda6] | |||
btrfs device usage /media/work | |||
# Fehlerstatistik: | |||
btrfs device stats /media/work | |||
btrfs filesystem df | |||
#Data, single: total=20.00GiB, used=11.97GiB | |||
#System, single: total=32.00MiB, used=16.00KiB | |||
#Metadata, single: total=1.50GiB, used=568.47MiB | |||
#GlobalReserve, single: total=38.27MiB, used=0.00B | |||
btrfs filesystem du -s /media/work/backup | |||
# Total Exclusive Set shared Filename | |||
# 18.80GiB 7.82GiB 4.15GiB /media/fs.system | |||
btrfs filesystem show /media/work | |||
# Total devices 1 FS bytes used 12.53GiB | |||
# devid 1 size 32.00GiB used 21.53GiB path /dev/sda6 | |||
btrfs subvol list /media/ | |||
# nur Snapshots: | |||
btrfs subvol list -s /media/work | |||
btrfs check --readonly -Q -E -p --force /dev/sda6 | |||
# Fehlerstatistik: | |||
btrfs device stats /media/work | |||
</pre> | |||
* sehr selten: | |||
<pre> | |||
# Extend-Status für Subvol 258 anzeigen: | |||
btrfs check --readonly -E 258 --force /dev/sda6 | |||
</pre> | </pre> | ||
Zeile 41: | Zeile 90: | ||
btrfs subvolume list /media/work | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /media/work | btrfs subvolume list /media/work | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /media/work | ||
btrfs quota rescan /media/work | btrfs quota rescan /media/work | ||
btrfs quota limit <group> <size>G path | |||
btrfs qgroup limit 0/256 32G path | |||
# option -e: unshared limit -c: compressed limit | |||
btrfs btrfs qgroup show -reF path | |||
</pre> | </pre> | ||
* qgroups sind Nummern <level>/<id> | * qgroups sind Nummern <level>/<id> | ||
Zeile 49: | Zeile 102: | ||
* Erklärung: https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-quota | * Erklärung: https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-quota | ||
* Scripte, die Belegungen auflisten: https://btrfs.wiki.kernel.org/index.php/Quota_support | * Scripte, die Belegungen auflisten: https://btrfs.wiki.kernel.org/index.php/Quota_support | ||
<pre>btrfs | <pre>btrfs qgroup limit 21G 0/270 /media/work | ||
# Gruppe einrichten und nutzen (für 2 Subvolumes) | # Gruppe einrichten und nutzen (für 2 Subvolumes) | ||
btrfs qgroup create 1/100 /media/work | btrfs qgroup create 1/100 /media/work | ||
Zeile 55: | Zeile 108: | ||
btrfs qgroup assign 0/966 1/100 /media/work # subvolume b hat id 966 | btrfs qgroup assign 0/966 1/100 /media/work # subvolume b hat id 966 | ||
btrfs qgroup show -reF /media/work | btrfs qgroup show -reF /media/work | ||
</pre> | |||
<pre># qgroup total owned | |||
0/5 4698025984 8192 | |||
0/257 52432896 4096 | |||
0/263 4405821440 12288 | |||
0/264 4698025984 8192 | |||
</pre> | </pre> | ||
Zeile 95: | Zeile 154: | ||
<pre> | <pre> | ||
btrfs subvolume snapshot -r /media/work/backup /media/snapshots/dayly/backup.mon | btrfs subvolume snapshot -r /media/work/backup /media/snapshots/dayly/backup.mon | ||
# Löschen: | |||
btrfs subvol delete /media/fs.sys/snapshots/@rootfs/monthly/02 | |||
</pre> | </pre> | ||
Zeile 105: | Zeile 166: | ||
# Weitermachen | # Weitermachen | ||
btrfs balance resume /media/work | btrfs balance resume /media/work | ||
# Info | |||
btrfs balance status /media/work | |||
</pre> | </pre> | ||
== Balance bei "vollem" Laufwerk" == | |||
<source lang=bash> | |||
btrfs balance start -v -dusage=0 /mnt/btrfs | |||
# wenn das durch ist: | |||
btrfs balance start -v -dusage=10 /mnt/btrfs | |||
</source> | |||
== Balance mit zusätzlicher Partition == | |||
<source lang=bash> | |||
#hier: die "volle" btrfs-Partition ist /dev/sdx1 | |||
mount /dev/sdx1 /media/trg | |||
# Platz auf /dev/sdy2 dazufügen: | |||
btrfs device add /dev/sdy2 /media/trg | |||
btrfs balance start /media/trg | |||
# Zusatzspeicher wieder entfernen: | |||
btrfs device delete /dev/sdy2 /media/trg | |||
</source> | |||
== Balance mit Image als Zusatzspeicher == | |||
<source lang=bash> | |||
#Anlegen eines Mountpoints | |||
#mounten des "vollen" btrfs-Dateisystems | |||
mount /dev/sdx2 /media/trg | |||
mount /dev/sdy5 /media/tmp | |||
#4GB-Image-Datei erstellen | |||
dd if=/dev/zero of=externalfs/extend.img bs=1M count=4096 | |||
#Loop-Device loop10 über die Image-Datei erstellen | |||
losetup /dev/loop10 /media/tmp/big_data.img | |||
#Hinzufügen der Image-Datei zum "vollen" btrfs-Dateisystem | |||
btrfs device add /dev/loop0 /media/trg | |||
btrfs balance start /media/trg | |||
#Image-Datei vom btrfs-Dateisystem wieder entfernen | |||
btrfs device delete /dev/loop0 /media/trg | |||
</source> | |||
= Umbau / Fehlerfall = | = Umbau / Fehlerfall = | ||
<pre>btrfs device delete /dev/sda /media/data | <pre>btrfs balance start -v -mconvert=single -dconvert=single /media/work --force | ||
btrfs device delete /dev/sda /media/data | |||
# Bei einer defekten Festplatte kann das Dateisystem mit folgenden Befehl gemountet werden: | # Bei einer defekten Festplatte kann das Dateisystem mit folgenden Befehl gemountet werden: | ||
mount -o degraded,rw /dev/sda /media/work | mount -o degraded,rw /dev/sda /media/work | ||
# folgender Befehl ersetzt eine defekte Platte: | # folgender Befehl ersetzt eine defekte Platte: | ||
btrfs replace start 6 /dev/sdf1 /media/work | btrfs replace start 6 /dev/sdf1 /media/work | ||
# mount nicht möglich "inactive unit": | |||
btrfs rescue zero-log /dev/sdc5 | |||
# Reaktivierung raid1: | |||
btrfs balance start -v -mconvert=raid1 -dconvert=raid1 /media/work | |||
</pre> | </pre> | ||
Zeile 118: | Zeile 218: | ||
<pre>btrfs device scan | <pre>btrfs device scan | ||
btrfs device scan /dev/sda | btrfs device scan /dev/sda | ||
</pre> | |||
= Send/Receive = | |||
* effiziente Möglichkeit, Subvolumes zu kopieren. | |||
== Komplette Kopie == | |||
<pre> | |||
btrfs send /home/BACKUP | btrfs receive /backup/home | |||
</pre> | |||
== Differenzielle Kopie == | |||
* Initialisierung: | |||
<pre>btrfs subvolume snapshot -r /home /home/BACKUP | |||
btrfs send /home/BACKUP | btrfs receive /backup/home | |||
# Es entsteht dann ein Subvolume /backup/home/BACKUP | |||
</pre> | |||
* Update: | |||
<pre>btrfs subvolume snapshot -r /home /home/BACKUP-new | |||
sync | |||
btrfs send -p /home/BACKUP /home/BACKUP-new | btrfs receive /backup/home | |||
btrfs subvolume delete /home/BACKUP | |||
mv /home/BACKUP-new /home/BACKUP | |||
btrfs subvolume delete /backup/home/BACKUP | |||
mv /backup/home/BACKUP-new /backup/home/BACKUP | |||
</pre> | |||
= Notfall = | |||
* [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ btrfs-wiki-FAQ] | |||
<pre>btrfs device scan | |||
btrfs rescue | |||
btrfs rescue super-recover -v | |||
btrfs check --init-extent-tree | |||
# sichern von Daten nach <directory>: | |||
btrfs restore -i <device> <directory> | |||
</pre> | |||
= chattr und lsattr = | |||
<pre>chattr OPTION MODE FILE | |||
</pre> | |||
Options: | |||
* -R rekursiv | |||
* -V verbose | |||
* -f Fehler werden unterdrückt | |||
* -v VERSION Setzt für Datei Version/Generationsnummer | |||
* -p PROJ Setzt Projektnummer | |||
Hat ein Verzeichnis das Attribut c (compressed), dann auch alle Unterverzeichnisse | |||
Modes: | |||
* a: append only (a) | |||
* A: no atime updates (A) | |||
* c: compressed (c) | |||
* C: no copy on write (C) | |||
* d: no dump (d) | |||
* D: synchronous directory updates (D) | |||
* e: extent format (e) | |||
* i: immutable (i) | |||
* j: data journalling (j) | |||
* P: project hierarchy (P) | |||
* s: secure deletion (s) | |||
* S: synchronous updates (S) | |||
* t: no tail-merging (t) | |||
* T: top of directory hierarchy (T) | |||
* u: undeletable (u) | |||
<pre>lsattr OPT FILES | |||
</pre> | |||
Optionen: | |||
* -R Rekursiv | |||
* -V Verbose | |||
* -a auch verborgene (Beginn mit .) | |||
* -l Lang Namen ausgeben | |||
* -p Projektnummer ausgeben | |||
* -v Versionsnummer ausgeben | |||
= Konvertierung zu RAID1 = | |||
<pre> | |||
mount /dev/sdb1 /mnt | |||
btrfs device add /dev/sdc1 /mnt | |||
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt | |||
</pre> | </pre> |
Aktuelle Version vom 25. August 2023, 07:08 Uhr
Links[Bearbeiten]
- VmHost
- Scrub-Script: http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html
- Position einer Datei im Image: https://blogs.oracle.com/wim/btrfs-scrub-go-fix-corruptions-with-mirror-copies-please
Erstellen[Bearbeiten]
- Paket: btrfs-progs
- Achtung: Immer Partitionsschema anlegen (fdisk...). Ohne geht auch, aber mit Einschränkungen (grub...)
mkfs.btrfs -L debian10 /dev/sdb1 btrfs filesystem label /dev/sdb1 debian10 # oder RAID1 für Daten (-d) und Metadaten (-m): mkfs.btrfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1 -f # Anzeigen: btrfs filesystem usage /media/work # Späteres Hinzufügen: # btrfs device NEWDEVICE OLDDEVICE btrfs device add -f /dev/sdd1 /media/work # Balance notwendig! # Nachträglich zu RAID wandeln: btrfs balance start -dconvert=raid1 -mconvert=raid1 /media/work
/etc/fstab[Bearbeiten]
LABEL=fs.bullseye / btrfs defaults,noatime,nodiratime,compress=zstd,autodefrag,subvol=@rootfs 0 0 LABEL=fs.bullseye /media/fs.sys btrfs defaults,noatime,nodiratime,compress=zstd,autodefrag,subvolid=5 0 0
Kommandos[Bearbeiten]
btrfs subvol create /media/work/root btrfs subvol list /media/work # z.B. 257 btrfs subvol set-default 257 /media/work # kein default mehr: 5 ist das Rootsystem btrfs subvol set-default 5 /media/work btrfs subvol get-default # Readonly für Snapshot entfernen: btrfs property set -ts /media/fs.system/snapshot ro false btrfs property set /usr compression lzo btrfs property get /usr compression btrfs scrub start / btrfs scrub status / # Für nodatacow: chattr -RV +C /var/lib/mysql/images lsattr -R /var/lib/mysql/images # Kompression anzeigen: compsize /media/work
Info[Bearbeiten]
btrfs device scan [/dev/sda6] btrfs device usage /media/work # Fehlerstatistik: btrfs device stats /media/work btrfs filesystem df #Data, single: total=20.00GiB, used=11.97GiB #System, single: total=32.00MiB, used=16.00KiB #Metadata, single: total=1.50GiB, used=568.47MiB #GlobalReserve, single: total=38.27MiB, used=0.00B btrfs filesystem du -s /media/work/backup # Total Exclusive Set shared Filename # 18.80GiB 7.82GiB 4.15GiB /media/fs.system btrfs filesystem show /media/work # Total devices 1 FS bytes used 12.53GiB # devid 1 size 32.00GiB used 21.53GiB path /dev/sda6 btrfs subvol list /media/ # nur Snapshots: btrfs subvol list -s /media/work btrfs check --readonly -Q -E -p --force /dev/sda6 # Fehlerstatistik: btrfs device stats /media/work
- sehr selten:
# Extend-Status für Subvol 258 anzeigen: btrfs check --readonly -E 258 --force /dev/sda6
Quota[Bearbeiten]
- Nachträglich einrichten:
btrfs quota enable /media/work btrfs subvolume list /media/work | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /media/work btrfs quota rescan /media/work btrfs quota limit <group> <size>G path btrfs qgroup limit 0/256 32G path # option -e: unshared limit -c: compressed limit btrfs btrfs qgroup show -reF path
- qgroups sind Nummern <level>/<id>
- Level 0 ist voreingestellt, wenn Subvolume erzeugt wird
- <id> ist für Level 0 die Subvolume-ID, z.B. 0/5 ist die qgroup des Toplevel-Volumes
- <id> für Level > 0 ist frei wählbar
- Erklärung: https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-quota
- Scripte, die Belegungen auflisten: https://btrfs.wiki.kernel.org/index.php/Quota_support
btrfs qgroup limit 21G 0/270 /media/work # Gruppe einrichten und nutzen (für 2 Subvolumes) btrfs qgroup create 1/100 /media/work btrfs qgroup assign 0/965 1/100 /media/work # subvolume a hat id 965 btrfs qgroup assign 0/966 1/100 /media/work # subvolume b hat id 966 btrfs qgroup show -reF /media/work
# qgroup total owned 0/5 4698025984 8192 0/257 52432896 4096 0/263 4405821440 12288 0/264 4698025984 8192
Einhängen[Bearbeiten]
mount /dev/sdb /media/work
- In /etc/fstab:
UUID=xxx /media/work btrfs defaults,subvol=@,compress,autodefrag 0 1
Subvolumes[Bearbeiten]
Verschachteltes Design[Bearbeiten]
- Gesamtes FS wird gemountet
- Alle Subvolumes sind dann automatisch vorhanden. Nicht extra mounten!
- Aber nur Mounten gestattet Optionen wie Komprimieren oder nodatacow
Gemischtes Design[Bearbeiten]
- Beispiel: ein Subvolume ist als / gemounted, das gesamte FS wird in /media/fs gemountet
- Bei Snapshots sind verschachtelte Subvolumes nicht enthalten (keine rekursiven Snapshots)
Flaches Design[Bearbeiten]
- /etc/fstab:
LABEL=the-btrfs-fs-device / btrfs subvol=/root,defaults,noatime 0 0 LABEL=the-btrfs-fs-device /home btrfs subvol=/home,defaults,noatime 0 0
btrfs subvolume create /media/work/root btrfs subvolume create /media/work/home btrfs subvolume list /media/work btrfs subvolume delete /media/work/vm-store
Snapshots[Bearbeiten]
- Wenn ein (schreibbarer) Schnappschuss erstellt wurde, gibt es keinen Unterschied zwischen Orginal und Schnappschuss.
- Bei Snapshots sind verschachtelte Subvolumes nicht enthalten (keine rekursiven Snapshots)
- Zurücksetzen (Rollback):
- Orginal unmounten
- mv zum Verschieben des alten Subvolumes an einen anderen Platz benutzen
- mv zum Verschieben des Schnappschusses zum Orginal benutzen
- Neu mounten
btrfs subvolume snapshot -r /media/work/backup /media/snapshots/dayly/backup.mon # Löschen: btrfs subvol delete /media/fs.sys/snapshots/@rootfs/monthly/02
Balance[Bearbeiten]
btrfs balance /media/work # Verlauf testen btrfs balance status /media/work # Stoppen btrfs balance pause /media/work # Weitermachen btrfs balance resume /media/work # Info btrfs balance status /media/work
Balance bei "vollem" Laufwerk"[Bearbeiten]
btrfs balance start -v -dusage=0 /mnt/btrfs
# wenn das durch ist:
btrfs balance start -v -dusage=10 /mnt/btrfs
Balance mit zusätzlicher Partition[Bearbeiten]
#hier: die "volle" btrfs-Partition ist /dev/sdx1
mount /dev/sdx1 /media/trg
# Platz auf /dev/sdy2 dazufügen:
btrfs device add /dev/sdy2 /media/trg
btrfs balance start /media/trg
# Zusatzspeicher wieder entfernen:
btrfs device delete /dev/sdy2 /media/trg
Balance mit Image als Zusatzspeicher[Bearbeiten]
#Anlegen eines Mountpoints
#mounten des "vollen" btrfs-Dateisystems
mount /dev/sdx2 /media/trg
mount /dev/sdy5 /media/tmp
#4GB-Image-Datei erstellen
dd if=/dev/zero of=externalfs/extend.img bs=1M count=4096
#Loop-Device loop10 über die Image-Datei erstellen
losetup /dev/loop10 /media/tmp/big_data.img
#Hinzufügen der Image-Datei zum "vollen" btrfs-Dateisystem
btrfs device add /dev/loop0 /media/trg
btrfs balance start /media/trg
#Image-Datei vom btrfs-Dateisystem wieder entfernen
btrfs device delete /dev/loop0 /media/trg
Umbau / Fehlerfall[Bearbeiten]
btrfs balance start -v -mconvert=single -dconvert=single /media/work --force btrfs device delete /dev/sda /media/data # Bei einer defekten Festplatte kann das Dateisystem mit folgenden Befehl gemountet werden: mount -o degraded,rw /dev/sda /media/work # folgender Befehl ersetzt eine defekte Platte: btrfs replace start 6 /dev/sdf1 /media/work # mount nicht möglich "inactive unit": btrfs rescue zero-log /dev/sdc5 # Reaktivierung raid1: btrfs balance start -v -mconvert=raid1 -dconvert=raid1 /media/work
Info[Bearbeiten]
btrfs device scan btrfs device scan /dev/sda
Send/Receive[Bearbeiten]
- effiziente Möglichkeit, Subvolumes zu kopieren.
Komplette Kopie[Bearbeiten]
btrfs send /home/BACKUP | btrfs receive /backup/home
Differenzielle Kopie[Bearbeiten]
- Initialisierung:
btrfs subvolume snapshot -r /home /home/BACKUP btrfs send /home/BACKUP | btrfs receive /backup/home # Es entsteht dann ein Subvolume /backup/home/BACKUP
- Update:
btrfs subvolume snapshot -r /home /home/BACKUP-new sync btrfs send -p /home/BACKUP /home/BACKUP-new | btrfs receive /backup/home btrfs subvolume delete /home/BACKUP mv /home/BACKUP-new /home/BACKUP btrfs subvolume delete /backup/home/BACKUP mv /backup/home/BACKUP-new /backup/home/BACKUP
Notfall[Bearbeiten]
btrfs device scan btrfs rescue btrfs rescue super-recover -v btrfs check --init-extent-tree # sichern von Daten nach <directory>: btrfs restore -i <device> <directory>
chattr und lsattr[Bearbeiten]
chattr OPTION MODE FILE
Options:
- -R rekursiv
- -V verbose
- -f Fehler werden unterdrückt
- -v VERSION Setzt für Datei Version/Generationsnummer
- -p PROJ Setzt Projektnummer
Hat ein Verzeichnis das Attribut c (compressed), dann auch alle Unterverzeichnisse
Modes:
- a: append only (a)
- A: no atime updates (A)
- c: compressed (c)
- C: no copy on write (C)
- d: no dump (d)
- D: synchronous directory updates (D)
- e: extent format (e)
- i: immutable (i)
- j: data journalling (j)
- P: project hierarchy (P)
- s: secure deletion (s)
- S: synchronous updates (S)
- t: no tail-merging (t)
- T: top of directory hierarchy (T)
- u: undeletable (u)
lsattr OPT FILES
Optionen:
- -R Rekursiv
- -V Verbose
- -a auch verborgene (Beginn mit .)
- -l Lang Namen ausgeben
- -p Projektnummer ausgeben
- -v Versionsnummer ausgeben
Konvertierung zu RAID1[Bearbeiten]
mount /dev/sdb1 /mnt btrfs device add /dev/sdc1 /mnt btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt