[HowTo] transportables manjaro (2) btrfs

Difficulty: ★★★☆☆ :de: :uk:

von ext4 auf btrfs umstellen ohne die Daten zu verlieren :wink:

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)

SysadminGuide - btrfs Wiki

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. :wink:

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

Jetzt kann der USB-Stick ausprobiert werden :grinning:

2 Likes

Tutorial in German. Administratively solved because this is not a question.

:innocent:

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.