BtrFS: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
 
(29 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.btfs -m raid1 -d raid1 /dev/sdb1 /dev/sdc1 -f
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 28: Zeile 38:
btrfs property set -ts /media/fs.system/snapshot ro false
btrfs property set -ts /media/fs.system/snapshot ro false


btrfs property set /media/work/texts compression lzo
btrfs property set /usr compression lzo
btrfs property get /media/work/texts compression
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
</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 37: 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 45: 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 quota limit 20G /media/work/home
<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 51: 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 91: 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 101: 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 114: 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]

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
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