Ext4 zu Btrfs migrieren

MadMe86

New member
29 Apr. 2021
2
0
0
Hallo zusammen,

da ich vor einer Weile von ext4 zu btrfs wechseln wollte, aber keine Anleitung gefunden habe, habe ich mich ein wenig damit beschäftigt.
Warum wollte ich btrfs? Eigentlich ging es mir nur um eine Funktion: Snapshots

Ich habe es mit einem AS6204T(3.5.5.RFC3) durchgeführt und hatte noch zwei Slots frei... Theoretisch ist das aber auch mit einem zwei Bay NAS möglich.
Im folgenden werde ich die Vorgehensweise für ein zwei Bay NAS beschreiben... Wenn man im NAS noch Platz und neue Platten zur Verfügung hat ist es einfacher: Man muss keine RAIDs zerstören, Platten formatieren, sondern "nur" das btrfs Volume erzeugen, die Daten migrieren und die volume.conf anpassen.
Vorne weg... ich übernehme keine Haftung für verlorene Daten oder sonstige Schäden... dafür ist jeder selbst Verantwortlich!

Grundsätzlich sind es vier Schritte:
  • BACKUP
  • btrfs Volume anlegen
  • Daten migrieren
  • volume.conf anpassen

BACKUP
Alle wichtigen Daten sichern!

btrfs Volume anlegen
Wir brauchen logischerweise ein Volume welches groß genug ist die Daten zu fassen...
Bei einem zwei Bay NAS mit einem Raid 1 muss man ein Laufwerk aus dem RAID heraus holen. Leider ärgert uns hier die automatische Wiederherstellung des NAS... Sobald man eine Platte raus gezogen hat und sie formatiert hat und wieder einsetzt, setzt die Wiederherstellung ein. Da wir aber die Platte mit btrfs formatieren wollen müssen wir das verhindern.
Hierfür habe ich dann folgendes herausgefunden:
Die RAID Konfiguration liegt hier: /volume0/usr/etc/volume.conf (Die Konfiguration am besten sichern...)

Code:
[volume1]
Level = 1
Raid = 2
Total = 2
Option = 0
Ftype = ext4
UUID = a401113b:baad5aa8:09daa818:fa8a3a19
Index = 0,1
Cachemode = 0
CLevel = 0
CState = -1
CDirty = 0
CUUID = 
Cnumber = 0
CIndex = 
Cseqcut = No
CsizeMB = 0
Relevant ist ist aber nur die Bezeichnung([volume1]), Level, Raid, Total und Index.
[volume1] ist der Bezeichner des Volumes und wer hätte es gedacht das entspricht dem "Volume 1" in adm. Wir brauchen es aber erst zum Schluss.
Level gibt das Raid-Level an. 1 ist RAID 1 und 3 ist eine einzelne Platte... Ich würde mal tippen das 0 RAID 0 wäre und 5 RAID 5... das weiß ich aber nicht...
Raid zeigt glaube ich die aktuelle Anzahl der Platten in dem RAID Verbund an. (Bei einzelnen Platten steht hier auch Raid = 1)
Total definiert die theoretische Anzahl der Platten in dem RAID.
Index zeigt die Schacht-Positionen der Platten an. Es wird IT üblich bei 0 angefangen zu Zählen. Also 0 ist der erste Schacht, 1 der Zweite usw...

Bevor man hier anfängt fleißig Platten zu Jonglieren, sollte man sicherstellen das das NAS nicht mehr verwendet wird... ich habe hierfür alle Apps deaktiviert und Portfreigaben deaktiviert.

Also um eine Platte aus einem RAID zu entfernen muss man diese zunächst physisch trennen(Platte am besten auslaufen lassen und nicht schnell bewegen) und anschließend eine leere Platte einsetzen oder die Platte formatieren, es reicht aus alle Partitionen zu löschen.
Nun müssen wir an die oben genannte Config...
Raid = 1
Total = 1
und der Indexeintrag der Platte die man entfernt hat muss raus. also z.B.
Index = 0 (Platte im zweiten Schacht wurde entfernt)

Speichern und neu starten.
Nun kann man hier die zweite Platte einschieben ohne das die automatische Wiederherstellung anläuft...
Die Platte kann man nun mit btrfs initialisieren.

Daten migrieren
Die Daten habe ich mit
Code:
sudo rsync -va /volume1/ /volume2/backup/
kopiert. rsync hat bei etwas gejammert da er scheinbar auf einige Dateien nicht zugreifen konnte, dies waren aber Dateien von Docker und da Docker bei mir soweit einwandfrei läuft, denke ich kann man das ignorieren.
Vorher habe ich in volume2 den Ordner Backup angelegt.
Die Option -a ist wichtig damit die Rechte beibehalten werden.

Nachdem die Daten synchron waren habe ich die relevanten Ordner verschoben.
ich habe eigentlich alles nach /volume2 verschoben ausser .@system hier liegt auch noch eine volume.conf. Diese beschreibt das Raid des aktuellen volumes.

Im Nachhinein habe ich mir gedacht das sollte doch theoretisch auch funktionieren... So ist dann kein Verschieben mehr nötig... (habe ich aber nicht getestet)
Code:
sudo rsync --exclude=.@system/ -va /volume1/ /volume2/

volume.conf anpassen

Zu guter Letzt müssen wir nochmals in die /volume0/usr/etc/volume.conf und die Bezeichnungen der btrfs und der ext4 platte tauschen.
Nach einem Neustart ist das neue volume1 das btrfs volume. Und wir können dann auch Snapshots nutzen :-D

So wenn dann alles läuft, kann man auch das andere Volume löschen und zum btrfs Laufwerk hinzufügen... dies sollte aber kein Problem darstellen.

Ich hoffe ich konnte dem einen oder anderen btrfs-Enthusiasten damit helfen.
Viel Erfolg!