Het leek mij slim om dit eerst eens in Virtualbox te proberen, en dan met schijven van 5GB ipv 2TB.
Het was even een gedoe, maar het is gelukt.
Omdat ik dit dan straks ook met mijn 2TB schijven wil gaan doen, leek het mij handig om even netjes op te schrijven hoe ik dit precies voor elkaar gekregen heb.
Het zou asociaal zijn om dit niet hier te delen, vandaar hier dus een uitgebreide uitleg:
Ik had in Virtualbox 5 schijven gemaakt (om het zo veel mogelijk op het 'echte' scenario te laten lijken):
/dev/sda - eerst raid1 schijf 1, moet: raid5 schijf 1 - 5 GB
/dev/sdb - eerst raid1 schijf 2, moet: raid5 schijf 2 - 5 GB
/dev/sdc - initieel ongebruikt , moet: raid5 schijf 3 - 5 GB
/dev/sdd /boot - 1 GB
/dev/sde - extra backup schijf - 5 GB
Eerst heb ik dus enkel /dev/sda en /dev/sdb gebruikt en hier Ubuntu in raid1 op geinstalleerd.
Vervolgens gaan we de live-cd starten.
Daarin eerst mdadm installeren.
Vervolgens /dev/md0 assembleren:
# mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
Dan backuppen. Hier moet gzip icm met dd gebruikt worden, omdat het image anders te groot is.
# mkdir /mnt/tmp && mount /dev/sde1 /mnt/tmp
# dd if=/dev/md0 | gzip --fast > /mnt/tmp/backup.img.gz
Nu /dev/md0 stoppen, en superblock wissen (voor zekerheid):
# mdadm --stop /dev/md0
# dd if=/dev/zero of=/dev/sda bs=1M count=10 && dd if=/dev/zero of=/dev/sdb bs=1M count=10
Nu nieuwe raid5 array aanmaken en backup terugzetten, mounten en mdadm.conf vervangen:
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
# gzip -dc /mnt/tmp/backup.img.gz | dd of=/dev/md0
# mkdir /mnt/tmp2 && mount /dev/md0 /mnt/tmp2
# cp /etc/mdadm/mdadm.conf /mnt/tmp2/etc/mdadm
En dat werkt! 1 probleem: df -h /mnt/tmp2 geeft nog steeds de oude grootte terug (5GB) en nog geen 10GB. Dit is gelukkig eenvoudig op te lossen:
# umount /dev/md0
# e2fsck -f /dev/md0
# resize2fs /dev/md0
En nu heeft de array ook de goede grootte!
Helaas lukt booten nog niet: root file-system kan niet gevonden worden.
Na wat zoeken, vond ik
hier wel iets waar ik wat aan had. Er moet een nieuwe inititial ramdisk gemaakt worden. Dit kan door het pakket mdadm te reconfigureren, en daarvoor moet je eerst in je root-filesystem chrooten. Vanuit de live-cd kan dat dan zo (eerst natuurlijk weer mdadm installeren en /dev/md0 assemblen):
# mkdir /mnt/tmp
# mount /dev/md0 /mnt/tmp
# mount /dev/sdd1 /mnt/tmp/boot
# mount --bind /dev /mnt/tmp/dev
# mount -t devpts devpts /mnt/tmp/dev/pts
# mount -t proc proc /mnt/tmp/proc
# mount -t sysfs sysfs /mnt/tmp/sys
# chroot /mnt/tmp
# dpkg-reconfigure mdadm
# exit
En als we dan rebooten, kan hij wel opstarten, waarmee de operatie dus gelukt is
Nu moet ik ditzelfde dus ook voor mijn 2TB schijven gaan doen, waar iedere stap waarschijnlijk >100x zo lang zal duren...
Kleine opmerking nog:
Ik heb tussendoor voor de zekerheid heel vaak gereboot, waar precies weet ik niet meer, maar naar iedere grote stap. Of het noodzakelijk was weet ik niet, maar het kan in ieder geval geen kwaad (het kost alleen maar tijd en koffie).
@Bloom:Volume staat wel bijna vol, anders is het natuurlijk zonde van het geld om een extra schijf toe te voegen.
Maar rsync werkt volgens mij wel een stuk minder fijn, omdat er dan op file-niveau gekopieerd wordt.
Voor niet volle volumes is dd ook heel goed te gebruiken hoor. Je moet er alleen eerst voor zorgen dat de vrije ruimte opgevuld wordt met nullen, anders krijg je een image net zo groot als de hele harddisk, ipv net zo groot als de gebruikte ruimte.
Vanaf een live-cd kan dat zo: (hier is /dev/sda de bron en /dev/sdb het doel)
(Eerste 3 stappen voor iedere partitie herhalen)
# mkdir /mnt/tmp && mount /dev/sda1 /mnt/tmp
# dd if=/dev/zero of=/mnt/tmp/nullen.img
# rm /mnt/tmp/nullen.img && umount /mnt/tmp
# mount /dev/sdb1 /mnt/tmp
# dd if=/dev/sda | gzip --fast > /mnt/tmp/backup.img.gz
In ieder geval:
Iedereen bedankt voor zijn/haar hulp!