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ě.



Backup the MBR which contains the boot code and partition table:

# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1

Only 446 bytes of the MBR contain boot code, the next 64 contain the partition table. If you do not want to overwrite your partition table when restoring, it is strongly advised to backup only the MBR boot code:

# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1


This command also restores the partition table, so be careful of overwriting a modified partition table with the old one. It will mess up your system.

# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1

A safer way is to restore only the MBR boot code use:

# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
Osobní nástroje