#{{{ Vorbereitung ================= # mkdir /mnt/btrfs $ rm -rf /home/flo/btrfsdemo $ mkdir /home/flo/btrfsdemo $ dd if=/dev/zero of=/home/flo/btrfsdemo/btrfs-vol0.img bs=1G count=1 $ dd if=/dev/zero of=/home/flo/btrfsdemo/btrfs-vol1.img bs=1G count=1 $ dd if=/dev/zero of=/home/flo/btrfsdemo/btrfs-vol2.img bs=1G count=1 $ dd if=/dev/zero of=/home/flo/btrfsdemo/btrfs-vol3.img bs=1G count=1 # losetup /dev/loop0 /home/flo/btrfsdemo/btrfs-vol0.img # losetup /dev/loop1 /home/flo/btrfsdemo/btrfs-vol1.img # losetup /dev/loop2 /home/flo/btrfsdemo/btrfs-vol2.img # losetup /dev/loop3 /home/flo/btrfsdemo/btrfs-vol3.img #}}} #{{{ Diverses -> Prompt verkürzen export PS1="\w: " -> shell für Beamer: konsole -> vergrößern: [CTRL] [+] -> verkleinern: [CTRL] [-] #}}} #{{{ Online Resize ================== -> btrfs kommando # btrfs # mkfs.btrfs /dev/loop0 # mount /dev/loop0 /mnt/btrfs -> Größe anzeigen # btrfs filesystem show /dev/loop0 -> verkleinern (dmesg, dauert ev. ein bisschen) -> ev. remount # btrfs filesystem resize -500m /mnt/btrfs -> Größe anzeigen # btrfs filesystem show /dev/loop0 -> Wieder auf maximale Größe erweitern # btrfs filesystem resize max /mnt/btrfs -> Größe anzeigen # btrfs filesystem show /dev/loop0 #}}} #{{{ Festplatten hinzufügen/entfernen ===================================== # mkfs.btrfs /dev/loop0 # mount /dev/loop0 /mnt/btrfs -> files anlegen dd if=/dev/urandom of=/mnt/btrfs/1.file bs=1M count=10 dd if=/dev/urandom of=/mnt/btrfs/2.file bs=1M count=10 dd if=/dev/urandom of=/mnt/btrfs/3.file bs=1M count=10 -> Größe anzeigen # btrfs filesystem show /dev/loop0 -> device hinzufügen -> m: mirror, raid1 -> d: stripe, raid0 btrfs device add /dev/loop1 /mnt/btrfs -> Größe anzeigen -> die neue platte ist unused -> Größe hat sich geändert # btrfs filesystem show /dev/loop0 -> neues file schreiben, dass größer als der allokierte block ist # dd if=/dev/urandom of=/mnt/btrfs/5.file bs=1M count=200 -> Größe anzeigen -> neue disk wird verwendet # btrfs filesystem show /dev/loop0 -> device wieder entfernen -> ja, loop0 -> Dateien werden wieder zurück kopiert -> TODO: funktioniert zur Zeit nicht! # btrfs device delete /dev/loop0 /mnt/btrfs -> Dateisystem anzeigen (*** Some devices missing) -> bogus; falsches reporting in den userspace tools -> workaround: remount # btrfs filesystem show /dev/loop0 # umount /mnt/btrfs # mount /dev/loop1 /mnt/btrfs #}}} #{{{ Online Balance =================== -> Umgebung von oben wieder verwenden! -> loop2 hinzufügen btrfs device add /dev/loop2 /mnt/btrfs -> Größe anzeigen -> die neue platte ist unused -> Größe hat sich geändert # btrfs filesystem show /dev/loop1 -> Balance # btrfs balance start /mnt/btrfs # btrfs balance start -dconvert=raid0 /mnt/btrfs # btrfs balance start -mconvert=raid0 /mnt/btrfs -f -> Daten sind neu verteilt worden -> remount ?? # btrfs filesystem show /dev/loop0 #}}} #{{{ RAID ========= -> RAID1 anlegen # mkfs.btrfs -m raid1 -d raid1 /dev/loop0 /dev/loop1 # mount /dev/loop0 /mnt/btrfs -> files anlegen # dd if=/dev/urandom of=/mnt/btrfs/1.file bs=1M count=10 # dd if=/dev/urandom of=/mnt/btrfs/2.file bs=1M count=10 # dd if=/dev/urandom of=/mnt/btrfs/3.file bs=1M count=10 -> umount und einen Ausfall simulieren # umount /mnt/btrfs # losetup -d /dev/loop1 -> mounten schlägt fehl # mount /dev/loop0 /mnt/btrfs -> was ist los? -> aber degraded mount ist möglich # btrfs filesystem show /dev/loop0 # mount -o degraded /dev/loop0 /mnt/btrfs -> neues device hinzufügen -> balance -> kaputtes device entfernen # btrfs device add /dev/loop2 /mnt/btrfs # btrfs filesystem balance start /mnt/btrfs # btrfs device delete missing /mnt/btrfs -> neu mounten ohne degraded umount /mnt/btrfs mount /dev/loop0 /mnt/btrfs # btrfs filesystem show /dev/loop0 #}}} #{{{ Subvolumes und Snapshots ============================= # mkfs.btrfs /dev/loop0 # mount /dev/loop0 /mnt/btrfs -> Subvolume erstellen # cd /mnt/btrfs # btrfs subvolume create valug-subvol -> Dateien im subvolume anlegen # touch valug-subvol/test1.file valug-subvol/test2.file -> Subvolumes samt ID anzeigen # btrfs subvolume list /mnt/btrfs -> Das neue Subvolume mounten # cd # umount /mnt/btrfs # mount -o subvolid= /dev/loop0 /mnt/btrfs # mount -o subvol=valug-subvol /dev/loop0 /mnt/btrfs # ls /mnt/btrfs -> wieder btrfs root mounten # umount /mnt/btrfs # mount /dev/loop0 /mnt/btrfs -> Use case: Backup -> Einen read-only snapshot erstellen -> Backup erstellen -> Snapshot löschen # btrfs subvolume snapshot -r /mnt/btrfs/valug-subvol/ /mnt/btrfs/snap-valug-subvol/ # # do your backup here cp, rsync, … # btrfs subvolume delete /mnt/btrfs/snap-valug-subvol -> Use case: Experimentieren im Dateisystem (Update, …) -> Snapshot erstellen -> $herumwerken -> Ursprungsvolume löschen -> umbennen # btrfs subvolume snapshot /mnt/btrfs/valug-subvol /mnt/btrfs/experiment # btrfs subvolume delete /mnt/btrfs/valug-subvol # mv /mnt/btrfs/experiment /mnt/btrfs/valug-subvol -> Nur mehr 1 Snapshot vorhanden # btrfs subvolume list /mnt/btrfs #}}} #{{{ Nachbereitung ================== # umount /mnt/btrfs # losetup -D # rm -rf /home/flo/btrfsdemo # rm -rf /mnt/btrfs #}}} # vim: set fdm=marker fdl=1 ts=2 sw=2 et: