RAID-1 létrehozása Debian alatt, "futó" rendszeren (fordítás)

Az írásról:

A lenti szöveg alapvetően egy fordítás, amit eredendően magamnak csináltam, így nem igazán szó szerinti fordítás.
Különösen az elején rövidebb is, mert először csak a lényeget akartam leírni.
Volt, ahol viszont gyakorlatilag csak másoltam a szöveget.

Remélem, segítségére lesz valakinek.

Alaphelyzet:

/dev/sda és /dev/sdb azonos méretű merevlemez, sdb kezdetben üres.

sda partíciói:

  • /dev/sda1: /boot partíció, ext3;
  • /dev/sda2: swap;
  • /dev/sda3: / partíció, ext3

A következőt alakítjuk ki:

  • /dev/md0 (/dev/sda1 és /dev/sdb1-ből): /boot partíció, ext3;
  • /dev/md1 (/dev/sda2 és /dev/sdb2-ből): swap;
  • /dev/md2 (/dev/sda3 és /dev/sdb3-ből): / partíció, ext3

server1:~# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          18      144553+  83  Linux
/dev/sda2              19          80      498015   82  Linux swap / Solaris
/dev/sda3              81         652     4594590   83  Linux

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table
server1:~#

mdadm telepítése:

apt-get install initramfs-tools mdadm

A következő kérdést teszi fel:

MD arrays needed for the root filesystem: <-- all

Ezután betöltünk néhány modult (az újraindítást elkerülendő):

modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

Nézzük meg:

cat /proc/mdstat

A kimenet hasonlóképpen kell kinézzen:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
server1:~#

/dev/sdb előkészítése

A már meglévő rendszerünkön RAID1 tömb létrehozásához először a /dev/sdb merevlemezt kell előkészíteni a RAID1-re, azután a /dev/sda lemez tartalmát átmásolni rá, végül /dev/sda-t hozzáadni a tömbhöz.

Először átmásoljuk /dev/sda partíciós tábláját /dev/sdb-re, így ezután mindkét lemez azonos felépítéssel rendelkezik:

sfdisk -d /dev/sda | sfdisk /dev/sdb

A kimenetnek a következőképpen kell kinéznie:

server1:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
 /dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *        63    289169     289107  83  Linux
/dev/sdb2        289170   1285199     996030  82  Linux swap / Solaris
/dev/sdb3       1285200  10474379    9189180  83  Linux
/dev/sdb4             0         -          0   0  Empty
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
server1:~#

Most meg kell változtatnunk a /dev/sdb lemezen lévő 3 partíció típusát Linux raid autodetect-re:

server1:~# fdisk /dev/sdb

Command (m for help): <-- m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- L

 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot
 1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT
1c  Hidden W95 FAT3 75  PC/IX
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)

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

Calling ioctl() to re-read partition table.
Syncing disks.
server1:~#

Hogy megbizonyosodjunk arról, nincs előzőleg visszamaradt RAID telepítés /dev/sdb lemezen, lefuttatjuk a következő parancsokat:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

Ha nincs visszamaradt RAID telepítés a lemezen, mindegyikük hasonló hibát produkál (nem kell aggódni miatta):

server1:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
server1:~#

Egyéb esetben semmi sem jelenik meg.

RAID tömbök létrehozása:
Most hozzuk létre /dev/md0, /dev/md1 és /dev/md2 tömböt.
/dev/sdb1 /dev/md0-hoz, /dev/sdb2 /dev/md1-hez, /dev/sdb3 pedig /dev/md2-höz lesz hozzáadva.
/dev/sda1, /dev/sda2 és /dev/sda3 jelenleg még nem hozzáadható (mivel jelenleg róluk fut a rendszer), ezért a 'missing' helyettesítőt használjuk a következő parancsokban:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3

A cat /proc/mdstat parancs most 3 szétbomlott RAID tömböt mutat ([_U] vagy [U_] jelenti a szétbomlott tömböt, míg [UU] azt jelenti, a tömb rendben van):

server1:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdb3[1]
      4594496 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
      497920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
      144448 blocks [2/1] [_U]

unused devices: <none>
server1:~#

Ezután létrehozzuk a fájlrendszereket a RAID tömbjeinken (ext3 → /dev/md0, /dev/md2; swap → /dev/md1):

mkfs.ext3 /dev/md0
mkswap /dev/md1
mkfs.ext3 /dev/md2

Most módosítanunk kell a /etc/mdadm/mdadm.conf filet (ami még nem tartalmaz semmilyen információt az új RAID tömbjeinkről) az új helyzethez:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

A fájl tartalma (a 3 /szétesett/ RAID tömb a fájl alján látható):

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# This file was auto-generated on Mon, 26 Nov 2007 21:22:04 +0100
# by mkconf $Id: mkconf 261 2006-11-09 13:32:35Z madduck $
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=72d23d35:35d103e3:01b5209e:be9ff10a
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=a50c4299:9e19f9e4:01b5209e:be9ff10a
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=99fee3a5:ae381162:01b5209e:be9ff10a

A rendszer beállítása RAID1-re:

Csatoljuk fel /dev/md0 és /dev/md2-őt (a swap tömböt nem kell):

mkdir /mnt/md0
mkdir /mnt/md2

mount /dev/md0 /mnt/md0
mount /dev/md2 /mnt/md2

Ezután módosítsuk a /etc/fstab filet. Cseréljük ki /dev/sda1-et /dev/md0-ra, /dev/sda2-őt /dev/md1-re, valamint /dev/sda3-at /dev/md2-re. Ezután a fájl hasonlóképpen néz ki:

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md2       /               ext3    defaults,errors=remount-ro 0       1
/dev/md0       /boot           ext3    defaults        0       2
/dev/md1       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Ezután írjuk felül a /etc/mtab fileban /dev/sda1-et /dev/md0-val és /dev/sda3-mat /dev/md2-vel:

/dev/md2 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0

Most készen állunk a GRUB betöltő beállításához. Nyissuk meg a /boot/grub/menu.lst filet. Adjuk hozzá a fallback 1 sort rögtön a default 0 után:

[...]
default         0
fallback        1
[...]

Ezzel annyi történik, hogy ha az első (nulladik) kernel betöltése sikertelen, a második lesz betöltve.

Ugyanebben a fájlban, alul található néhány kernelre vonatkozó sor.
Közülük az elsőt illesszük be saját maga fölé, majd cseréljük le benne a root=/dev/sda3-at root=/dev/md2-re, valamint root (hd0,0)-át root (hd1,0)-ra:

[...]
## ## End Default Options ##

title           Debian GNU/Linux, kernel 2.6.18-4-486 RAID (hd1)
root            (hd1,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/md2 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-486
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-486 (single-user mode)
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro single
initrd          /initrd.img-2.6.18-4-486
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

root (hd1,0) /dev/sdb-re hivatkozik, ami már a RAID tömbünk része. Nemsokára újraindítjuk a rendszert, így a rendszer a (még szétesett) RAID tömbről próbál bootolni.
Ha nem jár sikerrel, /dev/sda-ról bootol. (→ fallback 1)

Most hangoljuk a ramdiszket a új helyzethez:

update-initramfs -u

Ezután másoljuk /dev/sda1 és /dev/sda3 tartalmát /dev/md0, valamint /dev/md2-re (amik /mnt/md0, ill. /mnt/md1-ként vannak mountolva):

cp -dpRx / /mnt/md2

cd /boot
cp -dpRx . /mnt/md0

GRUB előkészítése (első rész):

Ezek után fel kell telepítenünk a GRUB-ot a második merevlemezre is (/dev/sdb):

grub

A GRUB shell-ben a következő parancsokat írjuk be:

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

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.

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

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.

Grub> quit

Most a normál shellbe visszatérve újraindítjuk a rendszert és reméljük, rendben bebootol a RAID tömbről:

reboot

/dev/sda előkészítése

Ha minden jól megy, /dev/md0 és /dev/md2 megtalálható a df -h kimenetében.

server1:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              4.4G  730M  3.4G  18% /
tmpfs                 126M     0  126M   0% /lib/init/rw
udev                   10M   68K   10M   1% /dev
tmpfs                 126M     0  126M   0% /dev/shm
/dev/md0              137M   17M  114M  13% /boot
server1:~#

cat /proc/mdstat kimenete a következőképpen alakul:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1]
      4594496 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
      497920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
      144448 blocks [2/1] [_U]

unused devices: <none>
server1:~#

Most meg kell változtatnunk /dev/sda lemezen lévő partíciók típusát is Linux raid autodetect-re:

server1:~# fdisk /dev/sda

Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)

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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
server1:~#

Most hozzáadhatjuk /dev/sda1, /dev/sda2 és /dev/sda3-at a megfelelő RAID tömbökhöz:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3

Most vessünk egy pillantást /proc/mdstat filera:
...és látnunk kell, hogy a RAID tömbök elkezdték a szinkronizációt:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[2] sdb3[1]
      4594496 blocks [2/1] [_U]
      [=====>...............]  recovery = 29.7% (1367040/4594496) finish=0.6min speed=85440K/sec

md1 : active raid1 sda2[0] sdb2[1]
      497920 blocks [2/2] [UU]

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

unused devices: <none>
server1:~#

(Futtatható a következő parancs a futó folyamat figyeléséhez: watch cat /proc/mdstat
/a watch elhagyása CTRL+C-vel lehetséges/).

Várjunk a szinkronizáció befejeztéig (a kimenetnek a következőképpen kell kinézni):

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0] sdb3[1]
      4594496 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
      497920 blocks [2/2] [UU]

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

unused devices: <none>
server1:~#

Ezután hangoljuk a /etc/mdadm/mdadm.conf-ot az új helyzethez:

cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

/etc/mdadm/mdadm.conf a következőképpen kell kinézzen:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# This file was auto-generated on Mon, 26 Nov 2007 21:22:04 +0100
# by mkconf $Id: mkconf 261 2006-11-09 13:32:35Z madduck $
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=72d23d35:35d103e3:2b3d68b9:a903a704
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=a50c4299:9e19f9e4:2b3d68b9:a903a704
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=99fee3a5:ae381162:2b3d68b9:a903a704

GRUB előkészítése (második rész):

Majdnem készen vagyunk. Most újra módosítanunk kell a /boot/grub/menu.lst-ét.
Jelenleg úgy van konfigurálva, hogy /dev/sdb (hd1,0)-ról bootoljon. Természetesen azt szeretnénk, hogy a rendszer akkor is bootolni tudjon, amikor /dev/sdb meghibásodik.
Ezért másoljuk az első kernelbejegyzést (ami hd1-et tartalmazza) és illesszük be alá, valamint hd1-et írjuk felül benne hd0-val.
Továbbá kikommentelünk minden más kernelbejegyzést, így a következőképpen néz ki:

[...]
## ## End Default Options ##

title           Debian GNU/Linux, kernel 2.6.18-4-486 RAID (hd1)
root            (hd1,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/md2 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

title           Debian GNU/Linux, kernel 2.6.18-4-486 RAID (hd0)
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-486 root=/dev/md2 ro
initrd          /initrd.img-2.6.18-4-486
savedefault

#title          Debian GNU/Linux, kernel 2.6.18-4-486
#root           (hd0,0)
#kernel         /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro
#initrd         /initrd.img-2.6.18-4-486
#savedefault

#title          Debian GNU/Linux, kernel 2.6.18-4-486 (single-user mode)
#root           (hd0,0)
#kernel         /vmlinuz-2.6.18-4-486 root=/dev/sda3 ro single
#initrd         /initrd.img-2.6.18-4-486
#savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

Ugyanebben a fileban van egy kopt sor. Írjuk felül /dev/sda3-mat /dev/md2-vel (ne távolítsuk el a #-et a sor elejéről!):

[...]
# kopt=root=/dev/md2 ro
[…]

Ezután frissítsük a ramdiszket:

update-initramfs -u

...és indítsuk újra a gépet:

reboot

Probléma nélkül bootolnia kell a rendszernek.
Ez minden – sikeresen beállítottad a szoftveres RAID1-et a futó Debian rendszereden.

Tesztelés

Most szimuláljunk egy merevlemez meghibásodást. Nem számít, hogy /dev/sda vagy /dev/sdb eszközt választod. Ebben a példában /dev/sdb meghibásodását feltételezem.

Merevlemez meghibásodás szimulálásához akár leállíthatod a rendszert és eltávolíthatod /dev/sdb-t a gépből, vagy eltávolíthatod szoftveresen hasonlóképpen:

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3

Állítsd le a rendszert:

shutdown -h now

Ezután tégy egy új merevlemezt /dev/sdb helyére (ha /dev/sda lemez meghibásodását szimulálod, most tedd be /dev/sdb-t /dev/sda helyére és az új merevlemezt /dev/sdb-re csatlakoztasd) és bootold be a rendszert. Gond nélkül el kell indulnia.

Most írd be:

cat /proc/mdstat

...és látnod kell a szétbomlott tömböket:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0]
      4594496 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
      497920 blocks [2/1] [U_]

md0 : active raid1 sda1[0]
      144448 blocks [2/1] [U_]

unused devices: <none>
server1:~#

Az fdisk -l kimenete hasonlóképpen néz ki:

server1:~# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          18      144553+  fd  Linux raid autodetect
/dev/sda2              19          80      498015   fd  Linux raid autodetect
/dev/sda3              81         652     4594590   fd  Linux raid autodetect

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/md0: 147 MB, 147914752 bytes
2 heads, 4 sectors/track, 36112 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md0 doesn't contain a valid partition table

Disk /dev/md1: 509 MB, 509870080 bytes
2 heads, 4 sectors/track, 124480 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md1 doesn't contain a valid partition table

Disk /dev/md2: 4704 MB, 4704763904 bytes
2 heads, 4 sectors/track, 1148624 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md2 doesn't contain a valid partition table
server1:~#

Most átmásoljuk a partíciós táblát /dev/sda-ról /dev/sdb-re:

sfdisk -d /dev/sda | sfdisk /dev/sdb

(Ha hibát kapsz, megpróbálhatod a --force opciót: sfdisk -d /dev/sda | sfdisk --force /dev/sdb)

server1:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
 /dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *        63    289169     289107  fd  Linux raid autodetect
/dev/sdb2        289170   1285199     996030  fd  Linux raid autodetect
/dev/sdb3       1285200  10474379    9189180  fd  Linux raid autodetect
/dev/sdb4             0         -          0   0  Empty
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
server1:~#

Ezután eltávolítjuk bármi nyomát egy előző RAID tömbnek /dev/sdb-ről...:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

...és hozzáadjuk /dev/sdb-t a RAID tömbhöz:

mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3

Most nézzük meg a /proc/mdstat file-t:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[2] sda3[0]
      4594496 blocks [2/1] [U_]
      [======>..............]  recovery = 30.8% (1416256/4594496) finish=0.6min speed=83309K/sec

md1 : active raid1 sdb2[1] sda2[0]
      497920 blocks [2/2] [UU]

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

unused devices: <none>
server1:~#

Várjunk a szinkronizáció befejeztéig:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1] sda3[0]
      4594496 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
      497920 blocks [2/2] [UU]

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

unused devices: <none>
server1:~#

Utána futtassuk a grub-ot és telepítsük a boot loadert (betöltőt) mindkét merevlemezre:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

Ennyi volna. Kicseréltél egy meghibásodott merevlemezt a RAID-1 tömbödben.

Forrás

Hozzászólások

A fenti leírás eredendően Debian Etch beállításáról szól, de Lenny alatt is ugyanígy használható.
Ha jól rémlik, Squeeze már Grub2-őt használ (bár ebben nem vagyok biztos), így max. ebben lehet különbség.

Remélem, van, akinek segítségére lesz.

Alapvetően csak le akartam menteni magamnak a szöveget, aztán - ha már foglalkozom vele - inkább kivonatot akartam készíteni, végül inkább fordítás lett belőle (ez OpenOffice-ban van).
Most volt egy kis időm kitenni ide is, bár annyira nem volt élvezetes. :) Remélem, azért áttekinthető.

Szerintem egész korrekten végigvezet a dolgokon, bár azt csak most vettem észre, hogy van egy negyedik oldala is az írásnak tesztelés címmel... mindegy, hozzátettem. :)
Én meg kikísérleteztem a dolgot egy gépen magamnak, végülis nem volt vészes a dolog.

Biztosan jó ötlet futó rendszert másolni? Nem inkább valami live rendszerről kellene bootolni, legalább arra az időre, amíg átmásolod a rendszert a másik merevlemezre?

Petya

HUP wikibe vele :)
Amúgy a grub2es rész tényleg kicsit hiányos..
Illetve annyit még hozzáfűznék, hogy amennyiben saját kernelünk van, akkor figyeljünk rá, hogy a RAID-hez szükséges dolgok statikusan legyenek benne a kernelben, már ha nem bízunk az initrd-ben.

Ja igen.. 1 kérdés: Mi a fenének modprobe-olni azokat a raid verziókat, amiket aztán nem fogunk használni (raid 0,5,10) ?
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

A keretet hogy csinalod a kodok kore?
(rejtett bookmark)
--


Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Jó kis leírás, köszi, bár én nem csinálnám futó rendszeren, legalábbis eddig sosem csináltam, és kicsit rizikósnak tartom...

<= Powered By Ubuntu & Gentoo Linux =>

'Software is like sex: It's better when it's free!'
By Linus Torvalds

Kedves Kollégák,
Akadt egy problémám.
Adott a szerverem 2x500Gb SATA WD vinyóval.Oprendszer: Debian 6.
névszerint: sda, sdb
sda1(200mb), sda2(16Gb), sda3(483Gb). sdb1(200mb), sdb2(16Gb), sdb3(483Gb) partíciók lettek létrehozva.
md0 az sda1, sdb1 raid1-ben van. Ez a /boot
md1 az sda2, sdb2 raid0-ben van. Ez a /swap
md2 az sda3, sdb3 raid1-ben van. Ez a /.
Következő történt.
az sdb vinyóra azt mondja hogy hibás. (Egyenlőre nem tűnik annak.) és eltávolította a raidtömbből.
/proc/mdstat
Personalities : [raid0] [raid1]
md2 : active raid1 sdb3[2](F) sda3[0]
471796800 blocks [2/1] [U_]

md1 : active raid0 sda2[0] sdb2[1]
32772096 blocks 256k chunks

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

unused devices:
mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Sun Sep 18 23:02:05 2011
Raid Level : raid1
Array Size : 200704 (196.03 MiB 205.52 MB)
Used Dev Size : 200704 (196.03 MiB 205.52 MB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Thu Sep 27 10:24:07 2012
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 48c461f8:a009ead6:d96575aa:67f209be
Events : 0.520

Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 0 0 1 removed

mdadm --detail /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Sun Sep 18 22:58:44 2011
Raid Level : raid0
Array Size : 32772096 (31.25 GiB 33.56 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Sun Sep 18 22:58:44 2011
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Chunk Size : 256K

UUID : 0c3ccd7d:26cdbc99:6eaf5c7f:c75ce7d3
Events : 0.1

Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2

mdadm --detail /dev/md2
/dev/md2:
Version : 0.90
Creation Time : Sun Sep 18 22:58:45 2011
Raid Level : raid1
Array Size : 471796800 (449.94 GiB 483.12 GB)
Used Dev Size : 471796800 (449.94 GiB 483.12 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Thu Sep 27 11:30:54 2012
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

UUID : 2dc8b14f:87d97aff:aecdfcd3:9a6a9723
Events : 0.1944080

Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 0 0 1 removed
Megpróbáltuk újra hozzá adni az sdb vinyót a tömhöz:
mdadm /dev/md0 --add /dev/sdb1
mdadm /dev/md1 --add /dev/sdb2
mdadm /dev/md2 --add /dev/sdb3
mdadm -D /dev/md2
/dev/md2:
Version : 0.90
Creation Time : Sun Sep 18 22:58:45 2011
Raid Level : raid1
Array Size : 471796800 (449.94 GiB 483.12 GB)
Used Dev Size : 471796800 (449.94 GiB 483.12 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 2
Persistence : Superblock is persistent

Update Time : Sat Sep 29 11:17:34 2012
State : active, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0

UUID : 2dc8b14f:87d97aff:aecdfcd3:9a6a9723
Events : 0.2141377

Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 0 0 1 removed

2 8 19 - faulty spare /dev/sdb3
A kérdésem az lenne hogy hogyan tudjuk megoldani a dolgot?
Elvileg most az sdb vinyón nincs semmi.
Ha újrapartícionálnánk és újra hozzáadnánk vajon megjavítaná?
Előre is köszönöm a segítséget.
üdv, lakisoft

Kedves lakisoft!

1) jo lenne, ha ket szoban osszefoglalnad a problemat, meg a kodok beszurasa elott, es szeparalnad a kodokat.
2) ha mar kodok, jo lenne, ha megismerkednel a pastebin-nel. Rengeteg kod, attekitnhetetlen.
3) es a legjobb lenne ennek a kerdesnek uj topicot nyitni. Ez egy ismeretterjeszto cikk szeretne lenni, nem pedig "Bajom van a RAID-1-gyel" tipusu megoldotopic.

Elore is koszonom, hogy segited a forumozok eletet, es teszel azert, hogy segithessenek neked.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Köszi a cikket, nagyon sokat segített nekem (linuxilag láma felhasználónak) elindulni. Pár dologgal viszont megszívtam, ezeket megpróbálom összefoglalni, hátha más is beleszalad hasonlóba. (A rendszer, amit RAID-esítettem, egy Debian 6.0 Squeeze, Intel Penti III 866MHz-es procin, 440BX alaplappal, 396MB RAM-mal, Sil3512 alapú SATA illesztővel, RTL8169 alapú gigabit ethernet kártyával, és két Seagate 500GB-s 2,5"-os HDD-vel. Gondolom, az alapkoncepciót kitaláltátok: villanyszámlabarát, de elfogadható sebességű file-, ftp-, http- és egyéb szervert akartam összerakni jobbára lomis/vaterás alkatrészekből úgy, hogy ne kerüljön sokkal többe, mint egy átlagos két személyes vacsora valami nem túl drága étteremben. :))

Nálam a partíciók így néznek ki:
sda1: 11GB, ext3, boot.
sda2: 8GB, swap.
sda3: a maradék, ext3. Ezen vannak a nagyra növő dolgok: samba, mysql, subversion, fax, webroot stb. Szépen fstab-ilan :) be van mountolva valahová, a fájlrendszer eredeti helyein pedig symlinkek vannak a megfelelő könyvtárakra.

Az alapprobléma az volt, hogy a hardveres RAID 1-et nem támogatta a linux, a két HDD szinkronitásával voltak gondok, ráadásul hol az egyikkel, hol a másikkal indult el a rendszer véletlenszerűen, pedig az fstab-ban az UUID-eket lecseréltem sda-ra. (Az, hogy sda, vagy sdb, jobban megkülönböztette őket, mert a hard tükrözés az összes UUID-et egyformává tette a két HDD-n.) Tehát rákerestem a neten, és többek között ezt a cikket találtam.

Pár sikertelen próbálkozás után az élő rendszer piszkálását feladtam. Szerencsére megtaláltam egy HDD-n a mostani rendszerem egy régebbi munkaváltozatát, és azt bootoltam. Nagyon jó mankónak bizonyult. (Persze a megfelelő csomagokat (initramfs-tools, mdadm) telepítettem.) Amikor a kialakítandó fájlrendszeren kellett műveleteket végezni, nagyon jól jött a http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-sys… leírásban az egyik hozzászólásban olvasott pár sor:
mount -t proc none /mnt/md0/proc
mount -o bind /dev /mnt/md0/dev
mount -o bind /sys /mnt/md0/sys
chroot /mnt/md0

Ez azt eredményezi, hogy a gyökér fájlrendszer az md0-ra változik, és ha a kernelek egyeznek, gyakorlatilag pont úgy fog viselkedni a rendszer, mintha onnan bootolt volna be. Feltételezi az md0 meglétét (ha automatikusan nem indul el, az
mdadm -A /dev/md0 /dev/sda1 /dev/sdb1
futtatásával lehet "összeszerelni"), és a /mnt/md0-ba felmountoltságát.

Amikbe belefutottam:
1. Nem értem, miért kell átírni az mtab-ban az sda-kat md0-kra. (Ezt a leírást használtam az mtab megértésére: http://www.linuxchix.org/content/courses/filesystem/Lesson5.html ) Vagyis van egy elméletem: arra való, hogy átverjük a grub-ot és az initramfs-update-t, hogy az sda1 helyett az md0-ra írjon. Jól gondolom?
2. A grub2 eléggé eltér a grubtól. Szempontunkból a legfontosabb, hogy nincs menu.lst, hanem program (update-grub) által generált config file van (ebbe lehetőleg nem nyúlunk bele), és hogy moduláris. Ahhoz, hogy a raid-et kezelje, be kell töltenünk a hozzá való modulokat. A http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-sys… az alábbiakat javasolja:
Készítsünk másolatot a felhasználó által definiálható template-ből az alábbi módon:
cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
Aztán szerkesszük meg:
nano /etc/grub.d/09_swraid1_setup
A végére szúrjuk be az alábbiakat (az általam használt rendszerre vonatkozik):
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (RAID)' --class debian --class gnu-linux --class gnu --class os {
insmod gzio
insmod raid
insmod mdraid
insmod part_msdos
insmod ext2
set root='(md/0)'
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 root=/dev/md/0 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}

Ne felejtsük el lefuttatni:
update-grub
(Én elfelejtettem, és egy darabig nem értettem, miért futok hibára.)
Amit érdemes megfigyelni, a modul betöltések (insmod), és a device neve. Az md0 nem működött, az md/0 viszont igen. Ha a bootoláskor hibára futunk, és file not found, ne adj' Isten, grub rescue prompt jelenik meg, csináljunk egy ls-t, abból kiderül, milyen eszközöket lát a grub, és hogy hívja őket.
3. (Talán a legrosszabb.) Összeraktam mindent, ami a cikkben volt, bebootoltam, és grub rescue prompt. ls nem használ, (hd0), (hd0,msdos1) stb. látszott csak, bármit ügyködtem, file not found, vagy unknown file system volt a jussom. Szerencsére ráakadtam erre a leírásra: http://physics.berkeley.edu/eshop/linux/debian-on-raid.html A Some things to know... Issues... It's awkward (Néhány fontos dolog, amit érdemes tudni... Problémák, amik sok kellemetlenséget okozhatnak) pontban a 2. probléma. Ha az ember készít egy ext2 v. ext3 fájlrendszert, aztán szervez belőle raid tömböt, az mdadm a RAID superblock-ot alapértelmezésben a partíció elejére teszi. Ettől viszont a grub hanyatt esik. Ezért a boot dolgokat tartalmazó RAID tömböt a --metadata=1.0 kapcsolóval kiegészítve kell megkreáltatni az mdadm-mal.
4. Ha bármit piszkál az ember bármelyik RAID tömbön, a
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

műveleteket el kell végezni.
5. Nem árt, ha újra konfiguráljuk a mdadm-ot a
dpkg-reconfigure mdadm
futtatásával, és nem all-t adunk meg, hanem szépen tételesen a
/dev/md/0 /dev/md/1 /dev/md/2
paramétereket. (A /dev/ nem hagyható el, hiába állítja a text input-ot körülvevő szöveg!) Ekkor ugyanis kapunk idejekorán hibajelzést, ha valamelyik tömböt nem tudja betölteni.
6. Itt már majdnem rendben voltam, oda jutottam, hogy betöltődött a kernel, és az initramfs is. Igen ám, de elfelejtettem a md0-n létrehozni az ext3 fájlrendszert. (Pontosabban - kissé félreértve a 3-ban említett leírást - nem mertem hozzányúlni az sda1-en és sda2-n létrehozott fájlrendszerhez.) Ebből az lett, hogy a fájlrendszer valódi mérete, és a superblock-ban levő méret eltért, ezt súlyos hibának észlelte a rendszer, és nem csak hogy nem tudta kijavítani sehogy, hanem a boot folyamatot sem engedte tovább. Most jött jól a md2, itt csináltam egy mappát a root fájlrendszernek, és - mankóval reboot után - oda másoltam:
cp -ax /mnt/md0/. /mnt/md2/szerval2_raid_root/
Ezután
umount /dev/md0
mkfs.ext3 /dev/md0

Fájlok visszamásolása, reboot, és működés.

Bár tudom, hogy nem mostani a thread, de...
Wheezy-n is megy?

És hogy változnak az md-k ha így néz ki nálam:
/dev/sda1 487M 128K 486M 1% /boot/efi
/dev/sda7 212G 36G 165G 18% /home
/dev/sda6 369M 11M 340M 3% /tmp
/dev/sda3 6,5G 1,6G 4,6G 27% /usr
/dev/sda4 2,8G 642M 2,0G 25% /var

?

1) az mdadm egeszen regota ugyanugy mukodik
2) az md-k ugy valtoznak, ahogy te szeretned, te adod meg, hogy melyik eszkoz melyik legyen.

Egyre figyelj, a /boot/efi es a / csak olyan raid tagja lehet, ami --metadata=0.90 hogy felismerheto legyen RAID nelkul is (ez foleg az EFI-s particional fontos, amit majdnem tisztan a BIOS kezel, ami valszinuleg nincs felkeszitve szoftveres RAID kezelesere.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

Köszönöm a leírást! :) Király vagy. Ugyan csak a tesztelés rész volt számomra a lényeg, a tömböket még az Ubi szerver telepítésekor hoztam létre, de a HDD cserét sikeresen megcsináltam.

Össze akarok szedni pár okosságot és kinyomtatni, a szerverem mellé. Ez köztük lesz. ;)
---
Útirány.hu