Szoftveres RAID - lemezek cseréje

RAID növelés és költöztetés új meghajtókra

Alaphelyzet: 3 raid tömb

debian:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 hda3[0] hdb3[1]
      6819520 blocks [2/2] [UU]

md1 : active raid1 hda2[0] hdb2[1]
      979840 blocks [2/2] [UU]

md0 : active (auto-read-only) raid1 hda1[0] hdb1[1]
      586240 blocks [2/2] [UU]


Az itt látható módon használjuk őket
debian:~# cat /etc/fstab
#              
proc            /proc           proc    defaults        0       0
/dev/md2        /               ext3    errors=remount-ro 0       1
/dev/md1        /var            ext3    defaults        0       2
/dev/md0        none            swap    sw              0       0


Két új meghajtó került a gépbe (sda,sdb). Még nincsenek felkészítve a munkára

debian:~# cat /proc/partitions
major minor  #blocks  name

   3     0    8388608 hda
   3     1     586341 hda1
   3     2     979965 hda2
   3     3    6819592 hda3
   3    64    8388608 hdb
   3    65     586341 hdb1
   3    66     979965 hdb2
   3    67    6819592 hdb3
   8     0   10485760 sda
   8    16   10485760 sdb
   9     0     586240 md0
   9     1     979840 md1
   9     2    6819520 md

Itt látható a használatban lévő hda lemez felosztása - teljesen megegyezik a hdbvel.

debian:~# fdisk -l /dev/hda

Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00028bc4

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          73      586341   fd  Linux raid autodetect
/dev/hda2              74         195      979965   fd  Linux raid autodetect
/dev/hda3             196        1044     6819592+  fd  Linux raid autodetect

Szeretnénk a / felcsatolást (md2) és a swap területet (md0) is megnövelni, továbbá a megszüntetni a /var alatt szolgáló md1 tömböt.
Létrehozzuk a partíciókat az sda és sdb lemezeken:
sda1 legyen négyszerese a hda1-nek, a maradék pedig mehet az md2 tömbbe

debian:~# fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x98e38789.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.


The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 292

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (293-1305, default 293):
Using default value 293
Last cylinder or +size or +sizeM or +sizeK (293-1305, default 1305):
Using default value 1305

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


A /dev/sda partíciók méretét a következő képpen át lehet másolni a /dev/sdb lemezre:

sfdisk -d /dev/sda > /tmp/sda
sfdisk /dev/sdb < /tmp/sda


Most, hogy már az új lemezeket is a kívánt méretűre szerkesztettük, jöhet a csere.

Az md0 lemezeivel kezdem:

Kiveszem a tömbből a hdb1 partíciót

debian:~# mdadm /dev/md0 -f /dev/hdb1 -r /dev/hdb1
mdadm: set /dev/hdb1 faulty in /dev/md0
mdadm: hot removed /dev/hdb1

A helyére teszem az sda1-et

debian:~# mdadm /dev/md0 -a /dev/sda1
mdadm: added /dev/sda1

Kiveszem a hda1-et

debian:~# mdadm /dev/md0 -f /dev/hda1 -r /dev/hda1
mdadm: set /dev/hda1 faulty in /dev/md0
mdadm: hot removed /dev/hda1

A helyére teszem az sdb1-et

debian:~# mdadm /dev/md0 -a /dev/sdb1
mdadm: added /dev/sdb1

Az eredmény:

debian:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 hdb3[1] hda3[0]
      6819520 blocks [2/2] [UU]

md1 : active raid1 hdb2[1] hda2[0]
      979840 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      586240 blocks [2/2] [UU]

unused devices:


Látható, hogy a lemezeket kicseréltem ugyan, de még változatlan a tömb mérete. Az mdadm képes megnövelni a kötet méretét:

debian:~# mdadm --grow /dev/md0 --size=max

Az md0 swap terület. Habár a fenti parancs hatására a raid tömb bérete nőtt, a linux továbbra is az eredeti méretét látja.

A következő parancsokkal rávehető, hogy nagyobbnak lássa:

debian:~# swapoff -a
debian:~# mkswap /dev/md0
debian:~# swapon -a

Ellenőrizni a free paranccsal lehet.

A /var felcsatolásának megszüntetéséhez a következőket végeztem el:

- mkdir/var2
- rsync -a /var/ /var2/
- /etc/fstabban a /var kezedű sort kitöröltem, hogy ne csatolja fel
- újraindítás után a /var2/ tartalmát átmásoltam a /var/ alá. Induláskor néhány szolgáltatás panaszkodott, de az adatok visszamásolását követően minden jól működött tovább.



A / eddig az md2 tömböt használta. Sajnos a lemezek nagyobbra cserélésével és a tömb méretének növelésével nem jár együtt, hogy a / alatt több hely legyen (ez nem LVM), így az md1 tömböt fogjuk használni a / háttértáraként. Az előző lépésben a /dev/md1-et felszabadítottuk, tudjuk másra használni.
A következőket kell tenni: Ki kell cserélni a tömb tagjait az új lemezek partícióira, létre kell hozni újra a fájlrendszert, majd az md2 adatait átmozgatni.

A két új lemezt hozzáadjuk, egyelőre mint tartalék:

debian:~# mdadm /dev/md1 -a /dev/sda2
mdadm: added /dev/sda2
debian:~# mdadm /dev/md1 -a /dev/sdb2
mdadm: added /dev/sdb2

A hda2-t hibásnak jelöljük, majd kivesszük:

debian:~# mdadm --manage /dev/md1 -f /dev/hda2
mdadm: set /dev/hda2 faulty in /dev/md1
debian:~# mdadm --manage /dev/md1 -r /dev/hda2
mdadm: hot removed /dev/hda2

!!!Fontos: megvárjuk, amíg az adatok szinkronizálása végigmegy az egyik tartalék lemezre
A hdb2-t hibásnak jelöljük, majd kivesszük:

debian:~# mdadm --manage /dev/md1 -f /dev/hdb2
mdadm: set /dev/hdb2 faulty in /dev/md1
debian:~# mdadm --manage /dev/md1 -r /dev/hdb2
mdadm: hot removed /dev/hdb2

A szinkronizáció után megnöveljük a méretet.

!!TIPP:
A  watch cat /proc/mdstat parancs kiadásával egyszerűbb ellenőrizni a szinkronizálás folyamatát


debian:~# mdadm --grow /dev/md1 --size=max

Létrehozzuk az új fájlrendszert:

debian:~#mkfs.ext3 /dev/md1

Átmásoljuk a fájlokat az előkészített kötetre:

debian:~# mkdir /mnt/md1
debian:~# mount /dev/md1 /mnt/md1/
debian:~# rsync -aurx / /mnt/md1/

Néhány dolgot változtatni kell:

debian:~# sed -i s/md2/md1/ /mnt/md1/etc/fstab
debian:~# sed -i s/md2/md1/ /mnt/md1/boot/grub/menu.lst


Az mdadm konfigfájljába mentsük el a beállításokat (kivéve az md2-t, hiszen azt nem fogjuk használni a jövőben.).

debian:~# mdadm --detail --scan | grep -v md2 > /etc/mdadm/mdadm.conf


!!FONTOS
Ha ilyet látunk:
mdadm: metadata format 00.90 unknown, ignored.
Ez azt jelenti, hogy bugos az mdadm, a következőket kell tenni:

debian:~# sed -i s/00.90/0.90/ /etc/mdadm/mdadm.conf


Ez a parancs a /etc/mdadm/mdadm.conf fájlban a  metadata=00.90  értéket metadata=0.90-re módosítja.

Még egy lépést meg kell tenni, mégpedig a grubot újratelepíteni. Ezt sokféleképpen meg lehet tenni, egy lehetséges megoldás:
Valamilyen live rendszerrel elindítani a gépet, amely felismeri a RAID köteteket. Én a System Rescue CD-t javaslom. A raid tömbök kezelésekor, újraindítás előtt is meg lehet tenni ezt, csak körültekintően kell eljárni!

Indulás után a grub parancsot kell kiadni.

Ekkor kapunk egy konzolt, aminek sorai grub> - al kezdődnek. Ki kell deríteni, hogy a grub milyen diszkeket ismer. Erre jó megoldás a következő prancs:

grub> find /boot/grub/stage1
 (hd0,1)
 (hd1,1)

Esetünkben a hd0,1 a /dev/sda2-t, a hd1,1 pedig a /dev/sdb2 partíciót jelenti. A következő prancsokkal telepíthetjük mindkét lemezre a grubot:

grub> root (hd0,1)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
 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 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

grub> root (hd1,1)
 Filesystem type is ext2fs, partition type 0x83

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)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+17 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.




!!!Amennyiben a Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  sorban hibát látunk, valami nem ment jól, nem fog működni a grub.

Ha a fentihez hasonló kimenetet látunk, akkor a quit paranccsal ki kell lépni a grubból és ellenőrizni a /boot/grub/menu.lst fájlt. Tapasztaltam olyat, hogy a fájlban a root (hdx,y) sort nem frissítette, így azt kézzel kell megtenni.

Újraindítást követően a gép a frissen telepített grubbal  és az új HDDkkel indul.


Új hozzászólás: