W weekend zdarzyło mi się rozwiązywać kolejny z problemów doczesnego LINUX’a, czyli zejście z istniejącego RAID-1 na standardowy, pojedynczy dysk posiadający kilka partycji z logicznie rozłożonymi strukturami (/boot, swap, /).
Zadanie wydawało się proste, jednakże szybko pojawiły się komplikacje. Poniżej postaram się opisać rozwiązanie, które zakończyło temat w trybie sukces. Można podejść do tematu wykonując operacje przy użyciu LiveCD, jednakże sposobu tego nie polecam.
/dev/sda – pierwszy dysk w RAID-1
/dev/sdb – drugi dysk w RAID-1
Oba dyski jednakowej pojemności.
/dev/md0 – partycja RAID (/boot)
/dev/md1 – partycja RAID (swap)
/dev/md2 – partycja RAID (/)
Partycje RAID ustawione jako Linux RAID Autodetect. Na starcie dyski były zsynchronizowane, nie wykazywały błędów.
Na pierwszy ogień poszło wypięcie z RAID pierwszego z dysków (jako, że ten własnie dysk miał po operacji pełnić główną rolę dysku systemowego).
Procedura klarowna i prosta:
linux# mdadm –manage /dev/md0 –fail /dev/sda1
linux# mdadm –manage /dev/md1 –fail /dev/sda2
linux# mdadm –manage /dev/md2 –fail /dev/sda3
linux# mdadm –manage /dev/md0 –remove /dev/sda1
linux# mdadm –manage /dev/md1 –remove /dev/sda2
linux# mdadm –manage /dev/md2 –remove /dev/sda3
W tym momencie RAID powinien składać się jedynie z dysku /dev/sdb (wszystkie partycje jako [_U]).
Nie ma obowiązku wykonywania kolejnego kroku, gdyż w założeniu – oba dyski posiadają zbieżną strukturę. W celu usystematyzowania struktury – „tworzymy” jej klon na pierwszym dysku:
linux# sfdisk –d /dev/sdb | sfdisk /dev/sda
Następnie czas pozbyć się systemu plików Linux RAID Autodetect:
linux# fdisk /dev/sda
i kolejno zmieniamy partycje (w moim przypadku 1 – LINUX (/boot), 2 – SWAP, 3 – LINUX (/)):
fdisk> t
fdisk> 1
fdisk> 83
fdisk> t
fdisk> 2
fdisk> 82
fdisk> t
fdisk> 3
fdisk> 82
fdisk> w
Po zapisaniu nowych partycji – wpinamy dysk w RAID celem synchronizacji zawartości:
linux# mdadm –manage /dev/md0 –add /dev/sda1
linux# mdadm –manage /dev/md1 –add /dev/sda2
linux# mdadm –manage /dev/md2 –add /dev/sda3
Stan synchronizacji sprawdzamy poprzez:
linux# cat /proc/mdstat
Kiedy dyski zostaną zsynchronizowane – ponownie wypinany dysk pierwszy:
linux# mdadm –manage /dev/md0 –fail /dev/sda1
linux# mdadm –manage /dev/md1 –fail /dev/sda2
linux# mdadm –manage /dev/md2 –fail /dev/sda3
linux# mdadm –manage /dev/md0 –remove /dev/sda1
linux# mdadm –manage /dev/md1 –remove /dev/sda2
linux# mdadm –manage /dev/md2 –remove /dev/sda3
Resetujemy blok RAID na wszystkich partycjach dyski pierwszego:
linux# mdadm –zero-superblock /dev/sda1
linux# mdadm –zero-superblock /dev/sda2
linux# mdadm –zero-superblock /dev/sda3
po czym przygotowujemy środowisko pod chroot (nowy „system” montuję przykładowo w /mnt/root):
linux# mount /dev/sda3 /mnt/root
linux# mount /dev/sda1 /mnt/root/boot
linux# mount –o bind /dev /mnt/root/dev
linux# mount –o bind /dev/pts /mnt/root/dev/pts
linux# mount – o bind /proc /mnt/root/proc
linux# mount –o bind /sys /mnt/root/sys
Startujemy chroot:
linux# chroot /mnt/root /bin/bash
Po chwili wirtualnie “siedzimy” w systemie na dysku pierwszym. Czas wykonać zmiany:
linux# rm /etc/mdadm.conf
linux# rm /etc/mdadm/mdadm.conf
Edytujemy wpisy dysków, aby zmienić wpisy na odpowiednie partycje dysku pierwszego. W moim przypadku wyglądało to tak:
/dev/md0 -> /dev/sda1
/dev/md1 -> /dev/sda2
/dev/md2 -> /dev/sda3
linux# vi /etc/fstab
Podobnie w pliku mtab:
linux# vi /etc/mtab
oraz w pliku GRUB:
linux# vi /boot/grub/menu.lst
Czas na instalację GRUB oraz aktualizację ustawień:
linux# grub-install /dev/sda
Dla pewności możemy jeszcze wykonać reconfigure:
linux# dpkg-reconfigure grub-pc
Wybieramy instalację GRUB na dysku pierwszym (/dev/sda).
linux# update-grub
linux# update-grub2
Teraz wystarczy wyjść z chroot, odmontować partycje i zrestartować system pamiętając, aby przed restartem usunąć drugi z dysków.
Od tej chwili możemy cieszyć się zejściem z RAID-1! Alleluja i od przodu!