Konverze disku na RAID

Z KHnetWiki

Přejít na: navigace, hledání

Určení: linux guru, a spol.

Testováno na ArchLinux 0.8 (beta2), jádro 2.6.20

Tento článek popisuje instalaci druhého do funkčního systému s jedním diskem (a jeho konverzi na RAID1 - mirroring).
Nezapomeň: zálohuj, zálohuj, zálohuj ... byl jsi varován.

  • Primární disk, poznamenej si rozdělení. Ukázka je z programu cfdisk.
  • POZNÁMKA: nic neměň... QUIT.
  • cfdisk /dev/<yourOLDdevice>
sda1       Boot, NC    Primary   Linux ext2                          41.13 
sda2                   Primary   Linux swap / Solaris               271.44
sda3                   Primary   Linux ext3                       82030.72
  • Sekundární disk, rozděl ho stejně.
  • cfdisk /dev/<yourNEWdevice>
sdb1       Boot        Primary   Linux raid autodetect               41.13 
sdb2                   Primary   Linux raid autodetect              271.44
sdb3                   Primary   Linux raid autodetect            82030.72
Rada --> Linux raid autodetect je typ: FD
  • vytvoř md zařízení
mknod /dev/md0 b 9 0
mknod /dev/md1 b 9 1
mknod /dev/md2 b 9 2
...
  • vytvoř raid pole
[root@svn ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionA>
 mdadm: array /dev/md0 started.
[root@svn ~]# mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionB>
 mdadm: array /dev/md1 started.
[root@svn ~]# mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/<yourNEWdevice-partitionC>
 mdadm: array /dev/md2 started.
...
Může se tě zeptat: 'Continue creating array? y' pokud je disk už naformátován.
[root@svn ~]#
  • Zkontroluj /proc/mdstat
  • Všechny pole budou degradovány. Přeci jenom jim vždy jedna partition chybí.
[root@svn ~]# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10] 
md2 : active raid1 sdb3[1]
      80108032 blocks [2/1] [_U]
      
md1 : active raid1 sdb2[1]
      264960 blocks [2/1] [_U]
      
md0 : active raid1 sdb1[1]
      40064 blocks [2/1] [_U]
      
unused devices: <none>
[root@svn ~]#
  • vytvoř souborový systém
  • je relativně fuk, jaký použiješ. Jenom na to musíš myslet a upravit na to mkinitcpio (viz dále).
  • POZNÁMKA: v příkladu je /boot ext2, / je ext3.
[root@svn ~]# 
mke2fs /dev/md0

* mkswap
[root@svn ~]# 
mkswap /dev/md1   

* mkfs.ext3 for /
[root@svn ~]# 
mkfs.ext3 -j /dev/md2
[root@svn ~]#
atakdále pro všechny raid partition.
  • Namontuj a zkopíruj data.
# mount new raid / (v příkladu md2)
[root@svn ~]# mount /dev/md<where you assigned-/-number> /mnt/

# mount new raid /boot (v příkladu md0)
[root@svn ~]# mkdir /mnt/boot
[root@svn ~]# mount /dev/md<where you assigned-/boot-number> /mnt/boot/

# pokračuj ... všechny partition na starém disku musí mít "obraz" v raid partition.

# copy / to new /raid/
[root@svn ~]# cd /mnt
[root@svn mnt]# tar -C / -clspf - <seznam všech adresářů root partition> | tar -xlspvf - 
(úprava, protože kopírování najednou [tečka] nějak nejede. Tj. /bin /dev /etc atd. (vše kromě sys, proc a samostatných oddílů)
V podstatě to lze udělat i midnight commanderem. Ale radši to nedoporučuji.

# copy /boot to new /raid/boot
cd /mnt/boot
[root@svn boot]# tar -C /boot -clspf - . | tar -xlspvf -
# všechny ostatní partition obdobně.
  • NOTE: KRITICKÝ KROK (tedy ne že by ostatní byly fuk)
  • edituj /mnt/boot/grub/menu.lst
  • bude to vypadat asi takto:
  • přidej "fallback 1" (což znamená, že pokud se nepovede nabootovat z prvního disku, zkusí druhý)
----- snip -----
default   0
color light-blue/black light-cyan/blue

## fallback disc1
fallback 1

# (0) Arch Linux
title  Arch Linux  [Disc0: /boot/vmlinuz26]
root   (hd0,0)
kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, ovšem POUZE nové partition> ro
#md=0,/dev/sdb1 md=1,/dev/sdb2 atd
initrd /kernel26.img

# (1) Arch Linux
title  Arch Linux  [Disc1: /boot/vmlinuz26]
root   (hd1,0)
#kernel - to samé, co předchozí blok
----- snip -----
  • uprav /mnt/etc/fstab - montovat se budou již MD zařízení
/dev/md2 / ext3 defaults 0 1
/dev/md0 /boot ext2 defaults 0 1
/dev/md1 swap swap defaults 0 0 
#atd ...
  • přimontuj /proc a /sys na nový raid
mount --bind /sys /mnt/sys
mound --bind /proc /mnt/proc
  • chroot na raid a kompilace initrd
chroot /mnt
# edituj /etc/mkinitcpio.conf - přidej 'raid' do proměnné HOOKS před 'autodetect'
# možná budeš muset přidat i moduly filesystému, pokud máš něco jiného než ext2 nebo ext3. Také viz nápověda v souboru.
mkinitcpio -g /boot/kernel26.img
/etc/start_udev (případně odinstalace -Rd a instalace pacmanem)

exit
  • Instalace grub na nový disk. Čísla disků musí souhlasit, což je někdy problém. (hd0,0) je /boot partition prvního disku (starého) a (hd1,0) nového, již v raidu zapojeného. Logicky (hd1) značí MBR daného disku.

Grub to čísluje tak, jak to bios nadetekoval. Většinou v pořadí PATA, SATA. Pokud na PATA není hardisk, tak to tam prostě není.

[root@svn /]#grub
grub> root (hd1,0)
 Filesystem type is ext2fs, partition type 0xfd

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  16 sectors are
embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+16 p
(hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done
grub>quit
[root@svn /]#

Důležité je, aby nehlásil chyby, a končil succeeded.

  • restartuj počítač. NUTNÉ je bootovat z nového disku. Budeš muset sáhnout do biosu.
/sbin/reboot
  • drž si palce, aneb cross fingers ;)
  • nabootuje-li počítač správně, MUSÍŠ přidat zbylé (ze starého) partition do RAIDu.
[root@svn ~]# mdadm /dev/md0 -a /dev/<old-disk-partitionA> (/dev/sda1)
 mdadm: hot added /dev/<old-disk-partitionA>
[root@svn ~]# mdadm /dev/md1 -a /dev/<old-disk-partitionB>
 mdadm: hot added /dev/<old-disk-partitionB>
[root@svn ~]# mdadm /dev/md2 -a /dev/<old-disk-partitionC>
 mdadm: hot added /dev/<old-disk-partitionC>
...
[root@svn ~]

Hlavně to nespleť ...

  • Ověř to ... cat /proc/mdstat
  • A počkej si na zesynchronizování jednotlivých partition.
[root@svn ~]# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10] 
md1 : active raid1 sda2[0] sdb2[1]
      264960 blocks [2/2] [UU]
      
md2 : active raid1 sda3[2] sdb3[1]
      80108032 blocks [2/1] [_U]
      [>....................]  recovery =  1.2% (1002176/80108032) finish=42.0min speed=31318K/sec
md0 : active raid1 sda1[0] sdb1[1]
      40064 blocks [2/2] [UU]
      
unused devices: <none>
[root@svn ~]#
  • dokonči konfiguraci grubu
----- snip -----
# (0) Arch Linux
title  Arch Linux  [Disc0: /boot/vmlinuz26]
root   (hd0,0)
kernel /vmlinuz26 root=/dev/md<root partition - md2> md=<všechny md zařízení, KOMPLET> ro
#md=0,/dev/sdb1,/dev/sda1 md=1,/dev/sdb2,/dev/sda1 atd

# (1) Arch Linux
title  Arch Linux  [Disc1: /boot/vmlinuz26]
root   (hd1,0)
#kernel - to samé, co předchozí blok
----- snip -----
  • dokončit initrd
edituj /etc/mkinitcpio.conf
přesuň 'raid' hook za autodetect a překompiluj initrd
mkinitpcio -g /boot/kernel26.img
  • Vrať zpět BIOS, bootovat se může již normálně.
  • Toť vše. Pokud se na nic nezapomene, jede to krásně.
Osobní nástroje