Scenario: due dischi da 2Tb partizionati con parted
in modalità GPT, per ogni disco una sola partizione che occupa l'intero spazio disponibile. Le due partizioni sono assemblate come volume raid5 (due dischi su tre, quindi lavora in modalità degradata).
Obiettivo: si vuole allocare spazio per creare altre partizioni.
Anzitutto si rimpicciolisce il filesystem ext4. Lo facciamo un po' più piccolo di quello che dovrà essere il risultato finale:
umount /dev/md1 e2fsck -f /dev/md1 resize2fs /dev/md1 3.5T
Si verifica la dimensione in kilobyte del volume md1
:
mdadm --detail /dev/md1 Array size: 3907023872 ...
Si rimpicciolisce il volume md1
; bisogna indicare la dimensione da occupare per ogni disco, il numero di kilobyte deve essere multiplo di 64. La dimensione risultante deve essere un po' superiore alla dimensione del filesystem in esso contenuto:
mdadm --grow /dev/md1 --size=1905891000
Si verifica che la dimensione sia diminuita:
mdadm --detail /dev/md1 Array size: 3811781632 ...
Si cambia la dimensione della partizione, creandola un po' più grande del volume md1 che contiene. L'operazione deve essere fatta sui due dischi /dev/sdb
e /dev/sdc
.
parted /dev/sdb print rm 1 mkpart primary 1049kB 1958GB quit
Dopo un reboot
si tenta di assemblare il device md1, ma fallisce:
mdadm --assemble --scan -f /dev/md1 ... mdadm: failed to add /dev/sdb1 to /dev/md1: Invalid argument mdadm: failed to add /dev/sdc1 to /dev/md1: Invalid argument
In effetti ricostruiamo il volume md1, ma con il parametro --assume-clean
non verrà inizializzato e manterrà il suo contenuto precedente:
mdadm --create /dev/md1 -l5 -n3 --assume-clean /dev/sdb1 /dev/sdc1 missing e2fsck -f /dev/md1
A questo punto possiamo espandere il volume md1
per occupare tutto lo spazio delle partizioni:
mdadm --grow /dev/md1 --size=max
Infine espandiamo il filesystem in modo che occupi tutto il volume md1
:
resize2fs /dev/md1 e2fsck -f /dev/md1