[Eisfair] E1: Partition im Raid-Verbund verkleinern

Thomas Zweifel t2fel at gmx.net
Fr Mai 13 20:34:25 CEST 2016


Hallo Rolf

Am 13.05.2016 um 16:31 schrieb Rolf Bensch:

> Wie mache ich das am besten?
>
> fstab:
> /dev/md0    /data  ext4 defaults 0 0
>
> ibs-server # fdisk -l
> Disk /dev/sdc: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
> Device     Boot Start        End    Sectors   Size Id Type
> /dev/sdc1        2048 1953525167 1953523120 931.5G fd Linux raid
>
> Disk /dev/sdd: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
> /dev/sdd1        2048 1953525167 1953523120 931.5G fd Linux raid
>
> # df /dev/md0
> Filesystem     1K-blocks      Used Available Use% Mounted on
> /dev/md0       961433544 142717184 769878288  16% /data
> 
> # tune2fs -l /dev/md0 | grep "Block size"
> Block size:               4096

Damit hätten wir alle Daten, die wir benötigen.


Als erstes verkleinern wir das Dateisystem.
Da verkleinern nur Offline geht, müssen wir es aushängen. Dazu stoppst
Du alle Dienste welche auf md0 zugreifen, danach:

umount /data

und überprüfst es mit

e2fsck -f -C0 /dev/md0


Da etwa 140GiB belegt sind, verkleinern wir das Dateisystem auf 190GiB,
das Raid anschliessend auf 200GiB, der resysnc vom Raid wird dadurch
deutlich schneller erledigt sein.

resize2fs will die Grössenangabe in blöcken haben, also teilen wir die
190GB durch die Blockgrösse vom Dateisystem (4k)
 --> 49807360 blöcke

resize2fs -p /dev/md0 49807360

Das dauert ca. 30-90min, je nachdem wie viel Daten umgelagert werden müssen.
Anschliessend den fsck nochmal drüber lassen:

e2fsck -f -C0 /dev/md0


Von hier an kann das Dateisystem wieder eingehängt werden, die
restlichen Schritte können während dem normalen Betrieb ausgeführt werden:

mount /data

und gegebenenfalls gestoppte Dienste wieder aktivieren.



Nun geht es ans verkleinern des Raids und neu partitionieren.
Zuerst schalten wir eventuell aktivierte bitmaps aus:

mdadm -G --bitmap=none /dev/md0

und verkleinern das Raid auf 200GiB

mdadm -G -z200G /dev/md0



Die folgenden Schritte führst Du nacheinander mit beiden Platten aus,
zuerst sdc danach für sdd:

Zuerst entfernen wir die Redundanz und löschen den Superblock:

mdadm --fail /dev/md0 /dev/sdc1
mdadm --remove /dev/md0 /dev/sdc1
mdadm --zero-superblock /dev/sdc1


den Erfolg kannst du mit:

cat /proc/mdstat

überprüfen.


Nun partitionieren wir die Platte:

fdisk /dev/sdc

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-160836479, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-160836479, default
160836479): 160830000

Created a new partition 1 of type 'Linux' and of size 76.7 GiB.

Command (m for help): t
Selected partition 1
Partition type (type L to list all types): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.


Dies sind die Daten der 80GB Testplatte, Du wählst einen für die TB
Platte passenden Endsektor z.B. 1953520000 womit gut 2MB frei bleiben.


Mit:

cat /proc/partitions

überprüfen wir, dass die Partitionstabelle aktualisiert wurde.
Beim ersten Durchlauf sollte sdc1 etwas kleiner als sdd1 sein, beim
zweiten Durchlauf sind die Partitionen dann gleich gross.


Nun synchronisieren wir die angepasste Partition wider mit dem Raid

mdadm --add /dev/md0 /dev/sdc1


Der resync dauert etwa 45min. Den aktuellen fortschritt kannst Du dir mit

watch cat /proc/mdstat

anzeigen lassen. (CTRL-C/STRG-C zum beenden)


Jetzt ist die Zweite Platte an der Reihe, wiederhole das Ganze mit sdd.



So, nachdem die Partitionen nun ihre Zielgrösse haben und das
verkleinerte Raid synchronisiert ist, können wir das Raid und das
Dateisystem wieder vergrössern.

mdadm -G -zmax /dev/md0

vergrössert das Raid auf die ganze Partition, und

resize2fs -p /dev/md0

vergrössert das Dateisystem auf das ganze Raid.


Nachdem der resync vom restlichen Platz (ca. 700GiB) beendet ist, kannst
Du die bitmaps wieder einschalten:

mdadm -G --bitmap=internal /dev/md0



Damit wäre die Verkleinerung des Raids abgeschlossen.



Gruss Thomas


Mehr Informationen über die Mailingliste Eisfair