Mamy system który bootuje się z EFI. Partycja EFI, boot i root są założone na wolumenach RAID-1 MD. ZFS jest na partycjach osobnych partycjach i ma formę mirrora.
Korzystając z tego, że dane są zduplikowane najpierw podmienimy jeden dysk, wyjęty usuniemy z macierzy i zduplikujemy macierze na nowy dysk. Po tym podmienimy drugi z pierwotnych dysków na nowy i dokonamy ponownej duplikacji macierzy.
W powłoce bash wydajemy polecenie [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
Upewniamy się, że wszystkie dane zostały zapisane na dysk wywołując polecenie sync. Następnie za pomocą polecenia cat /proc/mdstat i df -h | grep md możemy zidentyfikować dyski które są częścią macierzy.
root@tmp:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdf3[0] sdh3[1]
16759808 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdf2[0] sdh2[1]
523264 blocks super 1.2 [2/2] [UU]
md127 : active raid1 sdh1[0] sdf1[1]
523200 blocks [2/2] [UU]
unused devices: <none>
root@tmp:~# df -h | grep md
/dev/mapper/md125 16G 7,9G 7,8G 51% /
/dev/md0 477M 118M 355M 25% /boot
/dev/md127 511M 5,9M 505M 2% /boot/efi
Dzięki temu wiemy, że programowa macierz składa się z dysków sdf i sdh
Oznaczamy jeden z dysków z urządzeń md jako niesprawny:
mdadm --manage /dev/md127 --fail /dev/sdh1
mdadm --manage /dev/md0 --fail /dev/sdh2
mdadm --manage /dev/md1 --fail /dev/sdh3
Następnie usuwamy niesprawny dysk:
mdadm --manage /dev/md127 --remove /dev/sdh1
mdadm --manage /dev/md0 --remove /dev/sdh2
mdadm --manage /dev/md1 --remove /dev/sdh3
Teraz można fizycznie podmienić dyski w komputerze. Następnie na nowym dysku trzeba odwzorować układ partycji ze starego dysku:
sfdisk -d /dev/sdf | sfdisk /dev/sdX
Teraz kiedy fizycznie mamy już nowy dysk, który zawiera partycje o wymaganym rozmiarze możemy go dodać do macierzy:
mdadm --manage /dev/md127 --add /dev/sdX1
mdadm --manage /dev/md0 --add /dev/sdX2
mdadm --manage /dev/md1 --add /dev/sdX3
Za pomocą polecenia mdadm --detail /dev/mdX możemy sprawdzić szczegółowe informacje na temat macierzy. Jeżeli macierz ma znowu dwa napędy to za pomocą polecania cat /proc/mdstat możemy zweryfikować jej status i sprawdzić postęp odtwarzania danych.
Ze względu na to, że zmianie mogły ulec identyfikatory dysków konieczne może być ponowne dodanie do UEFI właściwych wpisów dotyczących uruchamiania systemu. Do tego celu wykorzystamy efibootmgr.
Polecenie efibootmgr -v wyświetla obecną listę startową.
Dodanie nowego wpisu z nowym dyskiem możemy dokonać tak:
efibootmgr -c -d /dev/sdX -p 1 -L "Dysk_sdX" -l '\EFI\debian\grubx64.efi'
efibootmgr -c -d /dev/sdY -p 1 -L "Dysk_sdT" -l '\EFI\debian\grubx64.efi'
Kolejność bootowania ustalamy używając parametru -o i dodając numery wpisów:
efibootmgr -o 0000,0001,0007,0005,0004,0006,0008
Jeżeli przy numerze wpisu nie ma gwiazdki * to oznacza, że wpis nie jest aktywny. Aktywować go można wydając polecenie efibootmgr -a 000X
Teraz warto przetestować czy system się prawidłowo ładuje z nowych dysków, jeśli tak to możemy usunąć stare wpisy i zagospodarować stare dyski na inne cele.
efibootmgr --delete-bootnum --bootnum 000X
efibootmgr --delete-bootnum --bootnum 000Y
Tutaj sytuacja jest już nieco prostsza - wystarczy za pomocą polecenia zpool status odczytać identyfikator brakującego dysku po czym zastąpić go nowym wydając polecenie:
zpool replace POOLNAME ID_STAREGO_DYSKU /dev/disk/by-id/NOWY_DYSK