Synology Diskstation Fesplatte vergrößern

Volle Festplatte = schlechte Performance

Meine Synology Diskstation war voll. Ich musste die Festplatten vergrößern. Ich betreibe sie aber nicht wie die meisten im RAID 0, 1 oder 5, sondern zwei Platten laufen separat. Platte 1 beinhaltet das System und einen Teil der Daten. Platte 2 beinhaltet den zweiten Teil der Daten. Ich mache Backups regelmäßig mit rsync über das Netzwerk auf Journaled formatierte Platten, die im OSX hängen. So bleiben meine Backupplatten meistens aus und werden nur zum Backup hochgefahren. Nach meiner Überlegung schont das die Backup-Platten und damit Ressourcen.

Als ich nun Platte 1 im System vergrößern wollte, wusste ich nicht was auf mich zukommmt. Vorallem viele Rückschläge, aber auch viel neues Wissen.

Rückschläge

Mein erster Gedanke ist, dd if=/dev/alt of=/dev/neu, wird es schon richten. Ich halte das System an, baue die Festplatte aus und hänge sie und die neue an meinen Rechner, spiegle sie und baue die neue wieder ein. Warum genau das nicht ging, blieb mir ein Rätsel. Fakt war, ich konnte die gespiegelte Platte nicht einfach einsetzen und das System hochfahren. Er akzeptierte sie schlichtweg nicht. Ich probierte verschiedene Anläufe. Im zweiten Schritt versuchte ich die zu vergößernde Platte im laufenden Betrieb mit dd zu spiegeln, in dem ich die zweite Platte an den USB 3.0 Port hing. Auch das ging nicht. Ich versuchte noch andere Ansätze, in dem ich mit rsync alle Daten kopierte und so weiter. Es wäre genau so müßig weiter aufzuzählen, was ich alles versucht habe, insofern will ich zur Lösung kommen, die ich erfolgreich angewendet habe.

Bildschirmfoto 2017-05-10 um 18.52.35
dd läuft im Hintergrund

Dazu muss man wissen, dass, wenn die Platten nicht im RAID Verbund sind, trotzdem von der Diskstation als RAID formatiert werden. Beide Platten im System sind RAID 1 (gespiegelt), aber jeweils nur mit einer Platte im Verbund. Es ist also ein nichtgespiegeltes Array, weil es nur aus einer Platte besteht.

Der richtige Weg

Auf der Kommandozeile konfiguriert man sein RAID Array mit dem Befehl mdadm (multiple devices admin).
Man kann ein Array damit anlegen, erweitern, Platten abkoppeln, synchronisieren und alles, was man mit einem Software Array so machen muss.
Grob formuliert geht der Weg so:

  • Partitionstabelle der alten Platte auf die neue kopieren
  • eindeutige UUID der neuen Platte zuweisen
  • mdadm nutzen um die neue Platte in das Array einzugliedern
  • das Array auf 2 Plattem vergrößern und synchronisieren lassen
  • die alte Platte aus dem Array entfernen und das Array schrumpfen
  • die Partitionsgröße der neuen Festplatte aufziehen

Meine Diskstation hat auf der alten Platte 3 Partitionen. Jede Partition ist eigentlich ein RAID 1 Array, mit nur einer Platte.
Raid Arrays haben im System eine neue Bezeichnung.
Auf der Diskstation ist
md0 = Root = sda1
md1 = Swap = sda2
md2 = Daten = sda3

Festplatten vorbereiten

Damit die neue Platte dem Array hinzugefügt werden kann, muss sie natürlich über die gleiche Partitionstabelle verfügen. Alle drei Partitionen sda1, sda2 und sda3 müssen auf beiden Platten identisch sein. Da ich die Partitionen mit dd gespiegelt hatte, waren sie bereits identisch.

Wer diesen Schritt nicht machen will, kommt nicht umhin beide Platten an einem anderen Computer anzuschließen, am besten mit Linux Betriebssystem, um das Layout mit sgdisk, zu kopieren. Der Befehl ist nicht auf der Diskstation installiert und darum muss er auf einem anderen Rechner ausgeführt werden. sgdisk erlaubt Partitionstabellen mit sgdisk -R zu kopieren. Es gibt auch eine Möglichkeit mit dd auf dem Server nur die Layoutouts zu kopieren. Da ich beides nicht gemacht habe, kann ich keine verlässliche Aussage zu den Methoden machen, würde mich aber selber für sgdisk entscheiden, wenn die Möglichkeit besteht, die Festplatten an den Linuxrechner zu hängen.

An dieser Stelle der Hinweis, dass man seine alte Platte vielleicht ein mal auf einer Platte sichert, die nicht die alte ersetzen soll. Ich hatte mir als Ersatz für die alte Platte zwei neue Platten gekauft. Die eine wird für die Diskstation vorbereitet, die andere habe ich, wie immer, als Backup mit allen alten Daten bespielt, ohne besonderen Wert auf Bootbarkeit zu legen.

Wenn die Partitionstabelle auf der neuen Platte ist, vergeben wir neue GUIDs mit sgdisk -G /dev/.

Jetzt können wir die alte Platte wieder in die Diskstation einbauen und das System starten. An einen freien USB Port hänge ich die neue vorbereitete Platte. Sie hat die Laufwerksbezeichnung /dev/sdq

Das Array mit Kommandozeile vergrößern

Doch zu erst die Basics. Wir loggen uns per ssh als Administrator auf der Diskstation ein. Wir wechseln in mit sudo su in einen Modus, der uns nicht ständig dazu zwingt sudo vor jedem Befehl einzugeben.

Als erstes verschaffen wir uns einen Überblick über die RAID Arrays mit cat /proc/mdstat.
Anschließend können wir die neue Platte mit der alten partitionsweise synchronisieren.
mdadm --add /dev/md0 /dev/sdq1
mdadm --grow /dev/md0 -n 2

Wenn hier vorher eine Platte im Array war, macht -n 2 daraus 2 Platten. Die Synchronisation beginnt jetzt.
Man kann den Fortschritt mit cat /proc/mdstat verfolgen.

mdadm --add /dev/md1 /dev/sdq2
mdadm --grow /dev/md1 -n 2
mdadm --add /dev/md2 /dev/sdq3
mdadm --grow /dev/md2 -n 2

Bildschirmfoto 2017-05-20 um 18.13.58
Fortschritt im Blick behalten

Wenn alles synochronisiert ist hat man ein funktionierendes RAID 1 mit 2 gespiegelten Platten, eine intern, die andere auf dem USB Port.
Brauchte ich nicht. Also die interne Platte auskoppeln.

mdadm --fail /dev/md0 /dev/sda1 --remove /dev/sda1
mdadm --grow --force /dev/md0 -n 1
mdadm --fail /dev/md1 /dev/sda2 --remove /dev/sda2
mdadm --grow --force /dev/md1 -n 1
mdadm --fail /dev/md2 /dev/sda3 --remove /dev/sda3
mdadm --grow --force /dev/md2 -n 1

Das piept zwischendurch unangenehm, da die Synology das Auskoppeln als Festplattenfehler mitteilt. Lässt sich aber in der Systemsteuerung ausschalten.

Jetzt muss die Partition noch vergrößert werden.

parted /dev/sda
resizepart 3 6000GB

die neue Platte fasst 6TB

mdadm --examine /dev/sda3
nachgucken ob die neue Größe zugeschrieben wurde

mdadm --grow --size max
resize2fs /dev/md2

Jetzt das System herunterfahren und die Platten tauschen, hochfahren und im DSM schauen, ob die neue Plattengröße angezeigt wird.

Bildschirmfoto 2017-05-30 um 20.45.06

Es ist dennoch zu betonen, dass der hier aufgezeigte Weg zwar bei mir funktioniert hat, mag aber bei anderen nicht funktionieren. Ich hatte meine Platte bspw. als ext4 formatiert und kein SHR verwendet.

Hier kommentieren