Mdadm
Programowy RAID oparty na mdadm
(powstało w trakcie treningu, przed LIVE MIGRACJĄ z RAID 1 -> RAID 5 )
Potrzebowałem potrenowac, w związku z tym opisuję ktok po kroku budowę mojej "piaskownicy".
Treningowa maszyna zbudowana została w oparciu o bardzo małe dyski, ze względu na czas potrzbny na odbudowę macierzy. (dla testu, nie będę czekać 12 godzin).
Pierwsze)
Instalujemy mdadm
apt-get install mdadm
Drugie)
Wyświetlamy nasze dyski twarde.
root@svn:~# fdisk -l Disk /dev/sda: 186.8 GB, 186863289344 bytes 255 heads, 63 sectors/track, 22718 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00067d6e Device Boot Start End Blocks Id System /dev/sda1 * 1 22673 182120841 83 Linux /dev/sda2 22674 22718 361462+ 5 Extended /dev/sda5 22674 22718 361431 82 Linux swap / Solaris Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0xacffe83a Device Boot Start End Blocks Id System /dev/sdb1 1 130 1044193+ 83 Linux Disk /dev/sdc: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Disk /dev/sdc doesn't contain a valid partition table root@svn:~#
RAID 1
Na dysku /dev/sdb posiadamy swoje cenne dane. Chcemy aby dysk był mirrorowany na /dev/sdc dzięki czemu w razie fizyczneja warii jednego z nich, będziemy w stanie uzyskać dostęp do danych, bez jakichkolwiek problemów. Jednym słowem: Czy padnie /dev/sdb Czy padnie /dev/sdc Będziemy mieć 100% dostęp do danych, tak jak by nic się nie stało.
Tworzymy macierz RAID 1, składającą się z 2 urządzeń w którym jednego urządzenia brakuje - nasz pusty dysk!.
root@svn:~# mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb mdadm: array /dev/md0 started.
Test:
root@svn:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 14:18:24 2009 Raid Level : raid1 Array Size : 1048512 (1024.11 MiB 1073.68 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 2 Total Devices : 1 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 14:18:24 2009 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 UUID : 78376526:72b7e62f:ada6ad5b:0d479e64 (local to host svn) Events : 0.1 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 16 1 active sync /dev/sdb root@svn:~#
Status: poprawny, zdegradowana Na dole widać którego dysku brakuję.
Tworzymy system plików
root@svn:~# mkfs -t ext3 /dev/md0 mke2fs 1.41.3 (12-Oct-2008) Etykieta systemu plików= Typ OS: Linux Rozmiar bloku=4096 (log=2) Rozmiar fragmentu=4096 (log=2) 65536 i-węzłów, 262128 bloków 13106 bloków (5.00%) zarezerwowanych dla superużytkownika Pierwszy blok danych=0 Maksymalna liczba bloków systemu plików=268435456 8 grup bloków 32768 bloków w grupie, 32768 fragmentów w grupie 8192 i-węzłów w grupie Kopie zapasowe superbloku zapisane w blokach: 32768, 98304, 163840, 229376 Zapis tablicy i-węzłów: zakończono Tworzenie kroniki (4096 bloków): wykonano Zapis superbloków i podsumowania systemu plików: wykonano Ten system plików będzie automatycznie sprawdzany co każde 39 montowań lub co 180 dni, zależnie co nastąpi pierwsze. Można to zmienić poprzez tune2fs -c lub -i. root@svn:~#
Już teraz możemy ją dla testu zamontować !
root@svn:~# mount -t ext3 /dev/md0 /root/test root@svn:~# cd /root/test root@svn:~/test# ls lost+found root@svn:~/test#
Dodajemy drugi dysk.
root@svn:~/test# mdadm --manage /dev/md0 --add /dev/sdc mdadm: added /dev/sdc root@svn:~/test#
Ponowny test
mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 14:18:24 2009 Raid Level : raid1 Array Size : 1048512 (1024.11 MiB 1073.68 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 14:27:20 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 78376526:72b7e62f:ada6ad5b:0d479e64 (local to host svn) Events : 0.18 Number Major Minor RaidDevice State 0 8 32 0 active sync /dev/sdc 1 8 16 1 active sync /dev/sdb root@svn:~/test#
Dwa dyski działają poprawnie.
Do tego momentu, teraz można potestować odłączając losowo któryś dysk. itp, nie chce mi się tego pisać.
Bo to wszystko, działa teraz na moim serwerze.
Prawdziwa zabawa zaczyna się teraz. Bo trzeba wykonać migrację z RAID1 do RAID 5.
1) Zamykamy wszystkie dojścia do macierzy md0
Wszystkie aplikacja typu vmware, nfs.
Odmontowujemy md0
zatrzymujemy macierz
mdadm --stop /dev/md0
Dodajemy dwa dyski ( z macierzy RAID 1 )
root@svn:~# mdadm --create /dev/md0 --level=5 -n 2 /dev/sdc /dev/sdb mdadm: /dev/sdc appears to contain an ext2fs file system size=1048512K mtime=Fri Jun 26 15:31:38 2009 mdadm: /dev/sdc appears to be part of a raid array: level=raid1 devices=2 ctime=Fri Jun 26 15:31:19 2009 mdadm: /dev/sdb appears to contain an ext2fs file system size=1048512K mtime=Fri Jun 26 15:31:38 2009 mdadm: /dev/sdb appears to be part of a raid array: level=raid1 devices=2 ctime=Fri Jun 26 15:31:19 2009 Continue creating array? y mdadm: array /dev/md0 started.
test
root@svn:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 14:40:14 2009 Raid Level : raid5 Array Size : 1048512 (1024.11 MiB 1073.68 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 14:40:21 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : c7b682ed:bc9a17e6:ada6ad5b:0d479e64 (local to host svn) Events : 0.4 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc root@svn:~#
Montujemy macierz
root@svn:~# mount -t ext3 /dev/md0 /root/test root@svn:~# cd test root@svn:~/test# ls lost+found wazne_dane root@svn:~/test#
wazne_dane <- tutaj nasze pliki, z poprzedniej macierzy RAID1.
Gasimy serwer, i wrzucamy nowy dysk (powinniśmy to zrobić na początku, ale myślałem że wyłoży się na powyższym kroku, co jest miłym zaskoczeniem).
root@svn:~# mdadm --add /dev/md0 /dev/sdd mdadm: added /dev/sdd root@svn:~#
Nowy dysk wrzucony i dodany do macierzy md5.
Rozbudowa
root@svn:~# mdadm --grow /dev/md0 --raid-disks=3 mdadm: Need to backup 128K of critical section.. mdadm: ... critical section passed. root@svn:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.91 Creation Time : Fri Jun 26 14:40:14 2009 Raid Level : raid5 Array Size : 1048512 (1024.11 MiB 1073.68 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 14:48:48 2009 State : clean, recovering Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K Reshape Status : 38% complete Delta Devices : 1, (2->3) UUID : c7b682ed:bc9a17e6:ada6ad5b:0d479e64 (local to host svn) Events : 0.292 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd root@svn:~#
Po kilku chwilach
root@svn:~# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 14:40:14 2009 Raid Level : raid5 Array Size : 2097024 (2048.22 MiB 2147.35 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 14:48:56 2009 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : c7b682ed:bc9a17e6:ada6ad5b:0d479e64 (local to host svn) Events : 0.726 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd root@svn:~#
Macierz odbudowana. Teraz wypadało, by powiększyć tablicę plików, tak byśmy mogli skożystać z naszej partycji.
1) wykonać sprawdzenie poprawności systemu plików 2)
resize2fs -p /dev/md0
Końcówka
root@svn:~# df -m
/dev/md0 2016 18 1896 1% /root/test
Jak widać ma 1896 MB, czyli, 2 GB. Schemat n-1.
Teraz coś czego nie mogłem się doczekać, a mianowicie kontrolna awaria ;)
Gasimy maszynę, demontujemy hdd.
Taki typ, awarii nie jest tym do którego mdadm został przystosowany.
mdadm lubi chronić przed nagłym odłączeniem dysku czyli gdy ze stanu online - leci w offline.
Po uruchomieniu serwera, okazało się więc że macierz nie wstała.
root@svn:/var/log# mdadm --detail /dev/md0 mdadm: md device /dev/md0 does not appear to be active.
Dopiero trzeba było ją zamontować "siłą" czyli z przełącznikiem force
root@svn:/var/log# mdadm --force --run /dev/md0 mdadm: started /dev/md0
Idąc dalej tym tropem wyświetliłem status
root@svn:/var/log# mdadm --detail --force /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 15:33:25 2009 Raid Level : raid5 Array Size : 2097024 (2048.22 MiB 2147.35 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 3 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 15:41:04 2009 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : 6720df8a:f44d3411:ada6ad5b:0d479e64 (local to host svn) Events : 0.726 Number Major Minor RaidDevice State 0 8 32 0 active sync /dev/sdc 1 8 16 1 active sync /dev/sdb 2 0 0 2 removed
Status, działająca zdegradowana. Trzeci dysk twardy usunięty.
Co z danymi ?
root@svn:/var/log# mount -t ext3 /dev/md0 /root/test root@svn:/var/log# cd /root/test root@svn:~/test# ls lost+found wazne_dane
Naprawiamy macierz, montując nowy dysk.
root@svn:~/test# mdadm --add /dev/md0 /dev/sdd mdadm: added /dev/sdd
Wynik odbudowy
root@svn:~/test# mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Fri Jun 26 15:33:25 2009 Raid Level : raid5 Array Size : 2097024 (2048.22 MiB 2147.35 MB) Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Fri Jun 26 17:45:37 2009 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : 6720df8a:f44d3411:ada6ad5b:0d479e64 (local to host svn) Events : 0.740 Number Major Minor RaidDevice State 0 8 32 0 active sync /dev/sdc 1 8 16 1 active sync /dev/sdb 2 8 48 2 active sync /dev/sdd root@svn:~/test#