EinleitungDie Anleitung behandelt das Konvertieren einer aktuellen siduction Installation mit dem Dateisystem ext4 zu dem Dateisystem Btrfs. Es sollen sämtliche Daten und Konfigurationen des Users erhalten bleiben. Das Ziel ist ein siduction auf Btrfs zu erhalten, dass bestmöglich einer Neuinstallation entspricht.
Gegenüber vielen Anleitungen, die im Internet zu finden sind, beziehe ich mich hier auf die Erfordernisse und Besonderheiten der siduction Installation.
Diese Anleitung habe ich mehrfach mit frisch installiertem siduction (KDE und XFCE Variante) getestet und anschließend erfolgreich auf eine meiner siduction Installationen (XFCE Variante) angewendet.
Bitte zuerst die Manpage btrfs-convert lesen, und beachten, dass ein Rollback der Konvertierung nicht möglich ist, nachdem der Befehl 'btrfs balance' ausgeführt wurde.
WarnungBei Arbeiten am Dateisystem besteht immer die Gefahr von Datenverlust. Es wird dringend empfohlen, alle wichtigen und persönlichen Daten auf einem externen Medium zu sichern.
Voraussetzungen- "/" auf einer einzigen Partition (in unserem Beispiel /dev/sda3)
- Die "/"-Partition sollte mindestens 50 GB groß sein.
- Die Größe der "/"-Partition muss auch mindestens das 2,5-fache des derzeit genutzten Speicherplatzes betragen, da bei der Konvertierung ein Abbild des vorherigen Systems erstellt wird.
- Wo möglich, den Cache leeren.
- Das System muss aktuell sein. (apt update && apt full-upgrade)
- Nicht benutzte Kernel (kernel-remover) und verwaiste Pakete (apt autoremove) sollten entfernt werden.
- Systemjournal minimieren. (journalctl --vacuum-size 100M)
- Abschließend "apt clean" ausführen
Konvertierung durchführena)
Das Paket siduction-btrfs installieren, falls es nicht bereits vorhanden ist.b)
siduction herunterladen und ein bootfähiges Medium erstellen.c)
Reboot in das Live-System, ein Terminal öffnen und zu root werden.d)
Dateisystem von /dev/sda3 prüfen. (nicht eingehangen):# fsck.ext4 -f /dev/sda3
e)
Konvertierung zu Btrfs:# btrfs-convert /dev/sda3
Das benötigt einige Zeit.
Achtung: Die UUID der Partition /dev/sda3 ändert sich.
f)
Das neue Btrfs Dateisystem mounten:# mount -t btrfs /dev/sda3 /mnt/
# cd /mnt/
Btrfs Subvolumen anzeigen:
/mnt# btrfs subvolume list .
ID 256 gen 3 top level 5 path ext2_saved
Der Inhalt des Btrfs Dateisystems nun mit ext2_saved und .snapshots:
/mnt# ls -a
. fll media sys
.. home mnt tmp
.autorelabel initrd.img opt usr
bin initrd.img.old proc var
boot lib root vmlinuz
dev lib32 run vmlinuz.old
disks lib64 sbin .xorgconfig-was-here
etc libx32 .snapshots
ext2_saved lost+found srv
g)
Die benötigten Btrfs Subvolumen erstellen:/mnt# btrfs subvolume create @
Create subvolume './@'
/mnt# btrfs subvolume create @home
Create subvolume './@home'
/mnt# btrfs subvolume create @root
Create subvolume './@root'
/mnt# btrfs subvolume create @var@log
Create subvolume './@var@log'
/mnt# btrfs subvolume create @snapshots
Create subvolume './@snapshots'
/mnt# btrfs subvolume create @tmp
Create subvolume './@tmp'
Die Daten in die Subvolumen verschieben:
Unbedingt die Reihenfolge einhalten, da wir die leeren Ordner /home, /root und /var/log im Subvolumen @ als Einhängepunkte benötigen.
/mnt# rmdir lost+found (in Btrfs nicht notwendig)
/mnt# mv home/* @home/
/mnt# mv root/.* @root/
falls in /root auch Dateien ohne führenden Punkt existieren
/mnt# mv root/* @root/
/mnt# mv var/log/* @var@log/
/mnt# mv [b-d]* @/
/mnt# mv [f-z]* @/
/mnt# mv etc @/
/mnt# mv .[!s]* @/
Das Ergebnis sollte so aussehen:
/mnt# ls -a
. .. @ ext2_saved @home @root .snapshots @snapshots @tmp @var@log
Das Subvolumen @ als Standard setzen.
/mnt# btrfs subvolume set-default @
Das Subvolumen 'ext2_saved' enthält das Sicherungsimage des ursprünglichgen ext4-Dateisystems. Zu diesem Subvolumen gehört auch der Ordner '.snapshots'. Darüber hinaus sehen wir nur die neuen Subvolumen.
Optional kann man @data anstelle von @home verwenden. Das Verzeichnis /home bleibt in @. Alle persönlichen Daten des Verzeichnisses /home/<user> verschiebt man nach @data und verlinkt sie in /home/<user>. Die Konfiguration bleibt in /home. Auf diese Weise wird die Konfiguration des Benutzers auch von System-Snapshots erfasst.
h)
Anpassen der /etc/fstab: fstab sichern:
/mnt# cd @/etc/
/mnt/@/etc# cp fstab fstab-bac
Auskommentieren des alten tmp Eintrages:
/mnt/@/etc# sed -i 's!^tmp!# tmp!' fstab
Suche der alten UUID von /:
/mnt/@/etc# grep '^UU.* / ' fstab
UUID=0b99b209-fa46-4ae3-ab70-b247653ad6c1 / ext4 defaults,noatime 0 1
Suche der neuen UUID von /:
/mnt/@/etc# blkid | grep sda3
/dev/sda3: UUID="d9772d13-bd51-4d48-9f55-60fea4d369e5" UUID_SUB="ea8...
Ändern des / Eintrages (UUID, Dateisystemtype, und Optionen):
(benutze
deine exakten UUIDs und verwende copy&past der vorangegangenen Ausgaben, um die UUIDs einzufügen)
/mnt/@/etc# sed -i 's!<old UUID>!<new UUID>!' fstab
/mnt/@/etc# sed -i 's!ext4.*!btrfs subvol=@,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1!' fstab
Einfügen der Einträge für die anderen Subvolumen:
/mnt/@/etc# grep ' / ' fstab | sed -e 's!/ !/home!' -e 's!=@!=@home!' >>fstab
/mnt/@/etc# grep ' / ' fstab | sed -e 's!/ !/root!' -e 's!=@!=@root!' >>fstab
/mnt/@/etc# grep ' / ' fstab | sed -e 's!/ !/var/log!' -e 's!=@!=@var@log!' >>fstab
/mnt/@/etc# grep ' / ' fstab | sed -e 's!/ !/tmp!' -e 's!=@!=@tmp!' >>fstab
/mnt/@/etc# grep ' / ' fstab | sed -e 's!/ !/.snapshots!' -e 's!=@!=@snapshots!' -e 's!^!#!' >>fstab
Die Datei fstab sollte so aussehen:
/mnt/@/etc# cat fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=<new-UUID> / btrfs subvol=@,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
# tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
UUID=<new-UUID> /root btrfs subvol=@root,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
UUID=<new-UUID> /home btrfs subvol=@home,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
UUID=<new-UUID> /var/log btrfs subvol=@var@log,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
UUID=<new-UUID> /tmp btrfs subvol=@tmp,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
#UUID=<new-UUID> /.snapshots btrfs subvol=@snapshots,defaults,noatime,space_cache=v2,autodefrag,compress=zstd 0 1
i)
Das neue Brtfs Dateisystem aushängen und das Terminal schließen:/mnt# cd /
# umount /mnt
# exit
j)
chroot in siduction auf Btrfs unter Verwendung des Desktop Icons "Siduction Chroot Helfer"
k)
initrd sichern und neu erstellen: (verwende
deine exakte Kernel Bezeichnung)
# cp /boot/initrd.img-6.2.9-1-siduction-amd64 /boot/initrd.img-6.2.9-1-siduction-amd64-bac
# mkinitramfs -o /boot/initrd.img-6.2.9-1-siduction-amd64 6.2.9-1-siduction-amd64
l)
Den Bootloader GRUB aktualisieren:# mount /boot/efi/ (nur nötig bei UEFI/GPT)
grub.cfg sichern
# cp /boot/grub/grub.cfg /boot/grub/grub.cfg-bac
Reaktivieren der Datei 09_siduction-btrfs und entfernen der systemd maskierungs Links.
# chmod 755 /etc/grub.d/09_siduction-btrfs
# rm /etc/systemd/system/siduction_btrfs* 2>/dev/null
Grub aktualisieren und installieren:
# update-grub
# grub-install
oder,
bei BIOS/MBR, sowie UEFI/GPT mit mehreren Festplatten im PC.
# grub-install /dev/sda
m)
chroot verlassen und in siduction auf Btrfs rebooten.n)
Snapper konfigurieren: Ein Terminal öffnen und root werden.
Die Konfiguration für das Verzeichnis '/' mit dem neuen Namen 'root' erstellen.
# snapper -c root create-config -t default /
Hierbei sind während der Tests gelegentlich Fehler mit Snapper aufgetreten. Es konnte keine Konfiguration erzeugt werden.
Abhilfe gelang nur, indem die betreffenden Pakete mittels 'purge' entfernt und neu installiert wurden.
# apt purge snapper* siduction-btrfs libbtrfs0 libsnapper6
# apt install snapper* siduction-btrfs libbtrfs0 libsnapper6
Nun die Datei /etc/fstab in einem Editor mit root Rechten editieren.
Das Kommentarzeichen '#' vor der Zeile mit /.snapsnots entfernen. Die Datei speichern und den Editor schließen.
Das Subvolumen '@snapshots' einhängen und den systemd neu laden.
# mount /.snapshots/
# systenctl daemon-reload
Dann einige Schlüssel-Wert Paare der Snapperkonfiguration für '/' ändern.
# snapper -c root set-config ALLOW_USERS=<Username>
# snapper -c root set-config TIMELINE_CREATE=no
Jetzt ist Snapper für das Verzeichnis "/" aktiv.
Die Snapper Konfiguration sollte man mit Hilfe der Anleitung unter
https://manual.siduction.org/ "Systemverwaltung > Snapper"
an die eigenen Bedürfnisse anpassen.
o)
Notfall Rollback von btrfs-convert: Wenn signifikante Probleme auftreten, ist es möglich ein Rollback der Konvertierung durchzuführen.
Reboot in das Live-System, ein Terminal öffnen und zu root werden.
# btrfs-convert -r /dev/sda3
Der Ordner '.snapshots' muss manuell entfernt werden.
# rmdir /.snapshots
p)
Sicherungskopien entfernen: Wenn das System ordnungsgemäß funktioniert, entfernen wir die während der Konvertierung erstellen Sicherungskopien.
Ein Terminal öffnen und zu root werden.
Dateien entfernen:
# rm /etc/fstab-bac
# rm /boot/initrd.img-6.2.9-1-siduction-amd64-bac
# rm /boot/grub/grub.cfg-bac
Die Subvolumen anzeigen:
# btrfs subvolume list /
ID 256 gen 3 top level 5 path ext2_saved
ID 257 gen 283 top level 5 path @
ID 258 gen 286 top level 5 path @home
ID 269 gen 319 top level 5 path @root
ID 260 gen 328 top level 5 path @var@log
ID 261 gen 196 top level 5 path @snapshots
ID 262 gen 228 top level 5 path @tmp
Das Subvolumen ext2_saved mit Hilfe seiner ID entfernen:
# btrfs subvolume delete --subvolid 256 /
Delete subvolume (no-commit): '//ext2_saved'
ALLES ERLEDIGTIch hoffe die Anleitung war hilfreich.
Sollten Fragen aufkommen, bitte hier im Forum melden.