Linux SW Raid

Nejprve do systému přidáme prázdný disk (v našem případě hdb). Stávající disk hda, na kterém běží systém, má standardní systém souborů ext3 a swap.

Nejprve použijeme zobrazíme diskové oddíly:

sudo fdisk -l


Výpis může vypadat následujícím způsobem:


Disk /dev/hda: 17.1 GB, 17179803648 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        2043    16410366   83  Linux
/dev/hda2            2044        2088      361462+   5  Extended
/dev/hda5            2044        2088      361431   82  Linux swap / Solaris
 
Disk /dev/hdb: 17.1 GB, 17179803648 bytes
16 heads, 63 sectors/track, 33288 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
 
Disk /dev/hdb doesn't contain a valid partition table



Vytvoříme nové diskové oddíly na disku hdb:


sudo fdisk /dev/hdb


Pomocí následující sekvence vytvoříme partitions:



n, p, 1, 1, velikost oddílu např. +10240M pro 10GB
n, e, 2, Enter, Enter pro extended partition na zbytku disku
n, l, 5, Enter, +2048M 2GB pro Swap
a,1 nastavení disku jako boot
t, 1, fd Linux raid autodetect
t, 5, 82 Linux swap
w uložení nastavení


Výpis oddílů může vypadat např. takto:


sudo fdisk -l

 

Disk /dev/hda: 17.1 GB, 17179803648 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        2043    16410366   83  Linux
/dev/hda2            2044        2088      361462+   5  Extended
/dev/hda5            2044        2088      361431   82  Linux swap / Solaris
 
Disk /dev/hdb: 17.1 GB, 17179803648 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes 
 
   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1        2043    16410366   fd  Linux raid autodetect
/dev/hdb2            2044        2088      361462+   5  Extended
/dev/hdb5            2044        2088      361431   82  Linux swap / Solaris


Vytvoříme degradovaný raid 1 (pouze s jedním diskem):


sudo mdadm --create /dev/md0 -c 128 -l 1 -n 2 /dev/hdb1 missing

Stav zkontrolujeme:

sudo cat /proc/mdstat

Výpis bude vypadat asi nějak takto:

Personalities : [raid1]
md0 : active raid1 hdb1[0]
      1029568 blocks [2/1] [U_]
 
unused devices: <none>

Nyní vytvoříme file systém v našem případě ext3:


sudo mkfs.ext3 /dev/md0


Vytvoříme swap:


sudo mkswap /dev/hdb5
sudo swapon /dev/hdb5
cat /proc/swaps 


Vytvoříme adresář a přimontujeme raid:


sudo mkdir /mnt/newroot
sudo mount /dev/md0 /mnt/newroot


Nyní můžeme zkopírovat data z disku hda1 na raid - máme několik možností:


sudo tar cl / | tar xvC /mnt/newroot

#nebo

cp -ax / /mnt/newroot

#nebo

sudo rsync -avx --delete / /mnt/newroot


Musíme upravit soubor fstab:


sudo nano /mnt/newroot/etc/fstab

#/dev/hda1 / ext3 defaults,errors=remount-ro 0  1
/dev/md0 / ext3 defaults,errors=remount-ro 0  1


Instalace Grubu na disk hdb:


sudo grub-install --recheck /dev/hdb
sudo grub-install --root-directory=/mnt/newroot/boot /dev/hdb


Editace menu Grubu:


sudo nano /mnt/newroot/boot/grub/menu.lst

title    Ubuntu, kernel 2.6.20-15-server
root     (hd0,0)
#kernel   /boot/vmlinuz-2.6.20-15-server root=/dev/hda1 ro quiet splash
kernel   /boot/vmlinuz-2.6.20-15-server root=/dev/md0 ro quiet splash
initrd   /boot/initrd.img-2.6.20-15-server
quiet
savedefault


Vypneme počítač, disk hda vyjmeme. Disk hdb přesuneme na první kanál (jako hda). Jako hdb připojíme nový disk o stejné nebo větší kapacitě. Počítač naběhne z degradovaného raidu.



Vytvoříme nové diskové oddíly na disku hdb:

sudo fdisk /dev/hdb


Pomocí následující sekvence vytvoříme partitions:



n, p, 1, 1, velikost oddílu např. +10240M pro 10GB
n, e, 2, Enter, Enter pro extended partition na zbytku disku
n, l, 5, Enter, +2048M 2GB pro Swap
a,1 nastavení disku jako boot
t, 1, fd Linux raid autodetect
t, 5, 82 Linux swap
w uložení nastavení


Vytvoříme swap:


sudo mkswap /dev/hdb5
sudo swapon /dev/hdb5
cat /proc/swaps 


Přidáme hdb1 do stávajícího pole:


sudo mdadm /dev/md0 -a /dev/hdb1


V /proc/mdstat kontrolujeme sychronizaci disků:


sudo cat /proc/mdstat

Synchronizace vypadá následujícím způsobem:
 

Personalities : [raid1]
md0 : active raid1 hdb1[2] hda1[0]
      9765888 blocks [2/1] [U_]
      [==>..................]  recovery = 13.4% (1310848/9765888) finish=3.5min speed=39522K/sec
 
unused devices: <none>

 
Synchronizace po dokončení:

Personalities : [raid1]
md0 : active raid1 hdb1[1] hda1[0]
      9765888 blocks [2/2] [UU]
 
unused devices: <none>


Stav pole můžeme sledovat také pomocí následujících příkazů:


sudo mdadm -v /dev/md0
sudo mdadm -D /dev/md0


Doplnění:

Označení disků prostřednictvím UUID

Disky je možné označit prostřednictvím UUID, což může být výhodné v systémech s velkým množstvím disků. Soubor /etc/fstab může pak vypadat takto:

# /etc/fstab: static file system information.

proc            /proc           proc    defaults        0       0
# /dev/md0
UUID=674d0f52-e1dd-4854-a110-120b364e4ebe /     ext3  defaults,errors=remount-ro 0  1
# /dev/hda5
UUID=f6fa510c-ebd5-4f86-b247-f709093b44f8 none  swap  sw   0  0
# /dev/hdb5
UUID=31619ecf-6075-478e-80ae-fe86fd6c5123 none  swap  sw   0  0
/dev/cdrom        /media/cdrom0   udf,iso9660 user,noauto  0  0

Jak zjistíme UUID?

ls -l /dev/disk/by-uuid/
#nebo
sudo vol_id /dev/hda5
#nebo
blkid /dev/hda5




Od verze 7.04 dochází pří výpadku jednoho z disků v raidu k zastavení bootování systému. Problém odstraníme následujícím způsobem:

mdrun /dev/md/0
mdadm -D /dev/md0
reboot