von ext4 auf btrfs umstellen ohne die Daten zu verlieren 
Vorteile
- Es schont den Stick weil btrfs mit Copy_on_Write arbeitet
- Es bietet die Möglichkeit automatische Snapshots mit snapper zu machen. Dadurch kann man das versehentliche Löschen oder Ändern von Dateien innerhalb eines vorgegebenen Zeitraums rückgängig machen. (Das ist kein Ersatz für ein gutes Backup)
- Es bietet die Möglichkeit die Dateien komprimiert zu speichern. Das erhöht die Kapazität, und schont den Stick zusätzlich
- Nach einem fehlgeschlagenen Update kann auf den letzten Snapshot zurück gewechselt werden (Rollback)
- Die Subvolumes für / und /home sind getrennt, ein Rollback führt nicht zum Verlust von Daten
- Auch nach einem Rollback sind die Daten des missglückten Updates (readonly) zugreifbar. Es kann also gut analysiert werden.
Nachteile
- btrfs braucht von Zeit zu Zeit Pflege
- Der Rollback ist Handarbeit (wenn auch nur wenige Befehle)
https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3/4_and_ReiserFS
Bitte einen Schritt nach dem anderen aufklappen und abarbeiten
Vorbereitung
- Unseren manjaro-Stick an ein “normales” Linux-System oder ein Linux-live-System anstecken (nicht mounten).
- Welches Device ist der Stick ?
- Dabei auf die Partitionierung und auf die Größe achten.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
sdz 8:32 1 59,5G 0 disk
├─sdz1 8:33 1 250M 0 part
├─sdz2 8:34 1 1M 0 part
└─sdz3 8:35 1 59,3G 0 part
sdy 8:48 1 14,7G 0 disk
├─sdy1 8:49 1 250M 0 part
├─sdy2 8:50 1 1M 0 part
└─sdy3 8:51 1 14,5G 0 part
Unser 64GB-Stick ist /dev/sdz. 3 Partitionen, 60GB Größe, 250MB Bootpartition, 59G Datenpartition - passt. Überall wo im folgenden ‘sdz1’, ‘sdz3’ oder ‘z3$’ verwendet wird musst man das ‘z’ durch den ‘passenden’ Buchstaben ersetzen.
Immer vorher prüfen ob das ext4-Dateisystem OK ist
fsck.ext4 /dev/sdz3
e2fsck 1.46.2 (28-Feb-2021)
/dev/sdz3: sauber, 219881/3891200 Dateien, 1312455/15541243 Blöcke
Jetzt zu btrfs konvertieren
btrfs-convert /dev/sdz3
create btrfs filesystem:
blocksize: 4096
nodesize: 16384
features: extref, skinny-metadata (default)
checksum: crc32c
free space report:
total: 63656931328
free: 57548845056 (90.40%)
creating ext2 image file
creating btrfs metadata
copy inodes [.] [ 219706/ 219881]
conversion complete
wieder bootbar machen (UUIDs anpassen)
Dabei hat sich die UUID und die PARTUUID geändert. Diese beiden Zahlen brauchen wir später. (Kann man dann mit copy & paste einfügen)
ls -lA /dev/disk/by-uuid |egrep 'z3$'
lrwxrwxrwx 1 root root 10 19. Jun 07:58 1a488830-65f7-4913-bf4d-dfe3f3ab5634 -> ../../sdz3
ls -lA /dev/disk/by-partuuid |egrep ‘z3$’
lrwxrwxrwx 1 root root 10 19. Jun 07:58 026eb222-79f0-4dd8-8735-4ea6735f9203 -> ../../sdz3
Partitionen mounten
sudo mkdir -p /mnt/alma/1 /mnt/alma/3
mount -t vfat /dev/sdz1 /mnt/alma/1
mount -t btrfs -o subvol=/,defaults,compress=zstd:9 /dev/sdz3 /mnt/alma/3
Backup von grub.cfg und fstab anlegen
cp /mnt/alma/1/grub/grub.cfg /mnt/alma/1/grub/grub.cfg.old
cp /mnt/alma/3/etc/fstab /mnt/alma/3/etc/fstab.old
grub.cfg anpassen, damit der Stick bootet
- alten Wert anzeigen
cat /mnt/alma/1/grub/grub.cfg |egrep -o '[0-f]{8}[0-f-]{28}'
d8fb2a88-6bc3-4f79-9ac0-5be115f04ec5
...
- neuer Wert soll sein:
ls -lA /dev/disk/by-uuid |egrep 'sdz3'
lrwxrwxrwx 1 root root 10 19. Jun 07:58 1a488830-65f7-4913-bf4d-dfe3f3ab5634 -> ../../sdz3
- sed aus den obigen Werten zusammenstellen
sed -i** 's/d8fb2a88-6bc3-4f79-9ac0-5be115f04ec5/1a488830-65f7-4913-bf4d-dfe3f3ab5634/g' **/mnt/alma/1/grub/grub.cfg
- Den neue Wert bitte prüfen
cat /mnt/alma/1/grub/grub.cfg |egrep -o '[0-f]{8}[0-f-]{28}'
> 1a488830-65f7-4913-bf4d-dfe3f3ab5634
btrfs layout anpassen
btrfs hat hier gar kein Layout. Ich bevorzuge ein flaches Layout (vorbereitet für snapper):
toplevel (volume root directory, not to be mounted by default)
├─@ (subvolume root directory, mount at /)
├─@home (subvolume home directory, mount at /home)
├─@nosnap (subvolume without snapshots, mount at /var/log ...)
├─@snapshots (snapshots of /, mount at /.snapshots)
├─@home.snapshots (snapshots of /home, mount at /home/.snapshots)
└─@ext4_saved (subvolume of saved ext4 filesystem-data, delete later on)
btrfs subvolume create /mnt/alma/3/@
Create subvolume ‘/mnt/alma/3/@’
btrfs subvolume create /mnt/alma/3/@home
Create subvolume ‘/mnt/alma/3/@home’
btrfs subvolume create /mnt/alma/3/@nosnap
Create subvolume ‘/mnt/alma/3/@nosnap’
btrfs subvolume create /mnt/alma/3/@snapshots
Create subvolume ‘/mnt/alma/3/@snapshots’
btrfs subvolume create /mnt/alma/3/@home.snapshots
Create subvolume ‘/mnt/alma/3/@home.snapshots’
mv /mnt/alma/3/ext2_saved /mnt/alma/3/@ext2_saved
mv /mnt/alma/3/home/\* /mnt/alma/3/@home/
mv /mnt/alma/3/[a-z]\* /mnt/alma/3/@/
btrfs subvolume set-default /mnt/alma/3/@
fstab anpassen (mount /, /home)
https://www.reddit.com/r/linux/comments/imgler/btrfs_relatime_vs_noatime_huge_performance/
Die Datei fstab auf dem Stick muß an btrfs und das Layout angepasst werden. Dazu brauchen wir die PARTUUID der btrfs-Partition
ls -lA /dev/disk/by-partuuid |egrep ‘sdz3’
lrwxrwxrwx 1 root root 10 19. Jun 07:58 026eb222-79f0-4dd8-8735-4ea6735f9203 -> ../../sdz3
Die fstab muß von Hand editiert werden. Ich nehm mcedit, aber nano oder vim sind genauso gut. Die Partuuid schreiben wir vorab an das Ende der fstab. Dann ist das editieren leichter.
ls -lA /dev/disk/by-partuuid |egrep ‘sdz3’ >> /mnt/alma/3/@/etc/fstab
mcedit /mnt/alma/3/@/etc/fstab
- Die Zeile mit vfat bleibt unangetastet
- Die Zeile mit ext4 wird auskommentiert (#)
- Ebenso die Zeile mit “lrwxrwxrwx”, wo die partuuid steht (#)
- Mit dieser PARTUUID werden 2 neue Zeilen für / und /home erstellt
Das Ergebniss sieht bei mir dann so aus:
# UUID=d8fb2a88-6bc3-4f79-9ac0-5be115f04ec5 / ext4 rw,noatime 0 1
# lrwxrwxrwx 1 root root 10 19. Jun 07:58 026eb222-79f0-4dd8-8735-4ea6735f9203 -> ../../sdz3
PARTUUID=026eb222-79f0-4dd8-8735-4ea6735f9203 / btrfs rw,noatime,compress=zstd:9,subvol=@ 0 0
PARTUUID=026eb222-79f0-4dd8-8735-4ea6735f9203 /home btrfs rw,noatime,compress=zstd:9,subvol=@home 0 0
UUID=003C-4A02 /boot vfat rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
Die Sicherung der ext4 Daten löschen (nicht vergessen !)
btrfs subvolume delete -c /mnt/alma/3/@ext2_saved
Aushängen
umount /mnt/alma/3
umount /mnt/alma/1