RAID w praktyce ● RAID – z angielskiego: Redundant Array of Independent Disks (co nie do końca jest prawdziwe, np. dla typów linear i stripping) ● Mowa będzie o podstawowym softwarowym raidzie w Linuksie. Oprócz tego istnieje jeszcze Device Mapper, który ma większe możliwości (łącznie z szyfrowaniem), ale tym się nie będziemy teraz zajmować.
Podstawowe typy macierzy ● LINEAR – z kilku dysków tworzymy jeden logiczny. Dane zapisywane są po kolei na kolejnych dyskach. Stosowane głównie dla zwiększenia pojemności ● RAID0 (striping) – j.w., ale dane są zapisywane po kawałku na każdym z dysków. W porównaniu do LINEAR jest to szybsze, natomiast awaria jednego z dysków robi nieodwracalne szkody.
Nuda c.d. ● RAID1 (mirroring) – dane zapisywane są jednocześnie na dwóch dyskach. Zapewnia podstawową ochronę danych, spowalnia zapis (bo musi być jednocześnie na dwa dyski), natomiast w zależności od przyjętej strategii, może podnieść wydajność przy odczycie. Nie zapewnia zwiększenia pojemności.
Nuda c.d. ● RAID5 – przy pomocy trzech lub więcej dysków można zapewnić zwiększenie objętości macierzy w stosunku do pojedynczego dysku oraz zapewnić bezpieczeństwo danych (w przypadku awarii jednego dysku). Sposób zapisu jest podobny do RAID0, z tym, że na nadmiarowym dysku zapisujemy informacje (xor) umożliwiające odtworzenie danych z dowolnego dysku.
Nuda c.d. ● Inne jak RAID6, RAID1+0 są głównie modyfikacjami lub zlepkiem tych kilku typów podstawowych. Więcej informacji (z obrazkami) można znaleźć choćby na stronie:
Fun ● Mamy zwykły typowy serwerek z dwoma partycjami (/ i /home) ● Dokładamy jeden lub więcej dysków i chcemy zacząć chronić swoje dane... ● Co o jak zrobić, żeby sobie problemów nie narobić?
Przed zabawą 1. Kernel z obsługą RAID wkompilowaną 2. Kernel loader z obsługą RAID (np. LILO) 3. Narzędzie do zarządzania macierzami: mdadm 4. Do kopiowania danych: rsync
Real fun 1.Robimy BACKUP!!!! 2.Robimy partycję na /. Nie może być większa niż nasza oryginalna partycja jeżeli chcemy zachować starą! 3.Uruchamiamy niepełny RAID1 na tej partycji: mdadm -C /dev/md0 -l1 -n2 /dev/hdc2 missing 4.Robimy filesystem na tym raidzie: mke2fs -j /dev/md0 5.Montujemy sobie gdzieś na boku tego raida: mount /dev/md0 /mnt/hd
6.Przegrywamy pliki (to zajmie trochę czasu): cd /mnt/hd rsync -va --progress --delete --exclude=/proc --exclude=/sys -- exclude=/home --exclude=/mnt/hd / /mnt/hd 7.W międzyczasie dodajemy nową opcję do lilo.conf, żeby zbootować się już z raida: image=/boot/vmlinux root=/dev/md0 label=raid append=”md=0,/dev/hdc2” read-only 8.Zabijamy wszystkie niepotrzebne demony i powtarzamy punkt 7. dla dosynchronizowania ewentualnych zmian.
10.Robimy porządki na nowym systemie: chroot /mnt/hd mkdir /proc /sys /home /mnt/hd zmieniamy w /etc/fstab wpis dla / z /dev/hdc2 na /dev/md0 exit (wychodzimy z chroot-a) 11.Uaktualniamy LILO: lilo 12.Każemy LILO, żeby zbootować z nowej opcji: lilo -R raid 13.Reboot 14.Dodajemy drugą (starą) partycję 'w locie' i czekamy na synchronizację: mdadm /dev/md0 -a /dev/hda2 15.Postępy synchronizacji można oglądać przez: cat /proc/mdstat 16.Tu możemy w międzyczasie zrobić sobie raid na /home.
17.Uaktualniamy lilo.conf, żeby zapisał mbr na obydwu partycjach: boot=/dev/md0 raid-extra-boot=mbr 18.Bootować się ma już 'raidowo' (dodajemy/zmieniamy w lilo.conf): default=raid 19.Poprawiamy w lilo.conf: append=”md=0,/dev/hdc2,/dev/hda2” 10.Jeżeli zrobiliśmy sobie /home, to parametry kernela powinny wyglądać: append=”md=0,.... md=1,/dev/hda3,/dev/hdc3” 11.Po tym odpalamy lilo 12.Zamiast parametru do kernela można zmienić typy partycji na 'linux raid autodetect' (FD) I wtedy raidy powinny się same zbudować. Ma to tą zaletę, że nawet po zamianie dysków miejscami lub zrobieniu z hdc hdb wszystko samo się robi. Wadę ma tą, że czasem to nie działa:-(