Linux softwarinio raid1 disko keitimas
Situacija
Šiame straipsnyje turime kaip pavyzdį du HDD diskus, /dev/sda ir /dev/sdb, su failų sistemų skirsniais /dev/sda1 ir /dev/sda2 (pirmasis swap antrasis rootfs) taip pat analogiškai antrame HDD turime /dev/sdb1 ir /dev/sdb2.
/dev/sda1 ir /dev/sdb1 sudaro RAID1 masyvą /dev/md0. /dev/sda2 ir /dev/sdb2 sudaro RAID1 masyvą /dev/md1.
Vieną dieną mums sugriuvo /dev/sdb diskas ir męs jį turime pakeisti.
Pažymime diską kaip blogą
Jeigu diskas pradėjo gesti, jūs tai pajusite pažiūrėję dmesg arba žurnalų failus /var/log/messages ir /var/log/syslog. Taip pat matysite su komanda
cat /proc/mdstat
Vietoje užrašo [UU] šalia disko, matysite [U_], jeigu diskas pradėjo degraduoti RAID1 masyve.
Išimame pažeistą diską
Norint teisingai išimti diską /dev/sdb, pirmiausia jį reikia pažymėti kaip sugedusį, pažymėsime skirsnius /dev/sdb1 ir /dev/sdb2 kaip sugedusius ir išimsime iš RAID masyvo (/dev/md0 ir /dev/md1). Pirmiausia pažymime /dev/sdb1 kaip sugedusį:
mdadm --manage /dev/md0 --fail /dev/sdb1
pažiūrime statusą:
cat /proc/mdstat
Turi pasirodyti kažkas panašaus į:
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] sdb1[2](F) 24418688 blocks [2/1] [U_] md1 : active raid1 sda2[0] sdb2[1] 24418688 blocks [2/2] [UU] unused devices: <none>
Tuomet išimame pirmajį skirsnį /dev/sdb1 iš /dev/md0:
mdadm --manage /dev/md0 --remove /dev/sdb1
Tai turi atrodyti maždaug taip:
srv:~# mdadm --manage /dev/md0 --remove /dev/sdb1 mdadm: hot removed /dev/sdb1
Vėl pažiūrime statusą:
cat /proc/mdstat
Turime matyti panašią informaciją:
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] 24418688 blocks [2/1] [U_] md1 : active raid1 sda2[0] sdb2[1] 24418688 blocks [2/2] [UU] unused devices: <none>
Tuos pačius žingsnius atliekame ir /dev/sdb2 skirsniui (kuris priklauso /dev/md1 masyvui):
mdadm --manage /dev/md1 --fail /dev/sdb2
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] 24418688 blocks [2/1] [U_] md1 : active raid1 sda2[0] sdb2[2](F) 24418688 blocks [2/1] [U_] unused devices: <none>
srv:~# mdadm --manage /dev/md1 --remove /dev/sdb2 mdadm: hot removed /dev/sdb2 cat /proc/mdstat
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] 24418688 blocks [2/1] [U_] md1 : active raid1 sda2[0] 24418688 blocks [2/1] [U_] unused devices: <none>
Išjunkite sistemą:
shutdown -h now
Pakeiskite HDD į naują diską (kuris turi būti tokios pat talpos arba didesnis, bet jokiu būdu ne mažesnis), su HDD pakeistu į mažesnį RAID masyvai neveiks.
Įdedame naują HDD
Kai pakeitėte antrajį diską t.y /dev/sdb, įkraukite sistemą. Dabar turime darbo padaryti naujajį diską identišką senajam pagal jo particijų dydi/skaičių/poziciją. Tai lengvai galima atlikti su komanda
sfdisk -d /dev/sda | sfdisk /dev/sdb
Patikrinti galite su šiomis dviejomis komandomis:
fdisk -l /dev/sdb
arba
cfdisk /dev/sdb
Pažiūrėkite ar skirsnių lentelė susikūrė tokia pati kaip /dev/sda diske. Toliau mums reikia pridėti /dev/sdb1 į /dev/md0 masyvą ir /dev/sdb2 į /dev/md1 masyvą:
srv:~# mdadm --manage /dev/md0 --add /dev/sdb1 mdadm: re-added /dev/sdb1 srv:~# mdadm --manage /dev/md1 --add /dev/sdb2 mdadm: re-added /dev/sdb2
Dabar abu masyvai (/dev/md0 ir /dev/md1) yra sinchronizuojami. Norint pamatyti finišą suveskite šią komandą:
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] sdb1[1] 24418688 blocks [2/1] [U_] [=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec md1 : active raid1 sda2[0] sdb2[1] 24418688 blocks [2/1] [U_] [=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec unused devices: <none>
Kai sinchonizacija bus baigta pastaroji komanda turi parodyti tokią išvestį:
srv:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10] md0 : active raid1 sda1[0] sdb1[1] 24418688 blocks [2/2] [UU] md1 : active raid1 sda2[0] sdb2[1] 24418688 blocks [2/2] [UU] unused devices: <none>
Jeigu viską padarėte teisingai, tuomet sinchronizacija baigėsi ir jūs sėkmingai pakeitėte /dev/sdb (antrajį) RAID1 masyvo diską.
Sistemos įkrova
Norint, kad įkrova (bootloaderis) veiktų sklandžiai (ne visada susireplikuoja kaip norima), reiktų rankomis papildomai įdiegti GRUB2 t.y:
grub-install /dev/sdb
Jeigu daroma masyve kuriame yra vienas arba keli diskai sugedę, reikėtų pirmiausia juos išimti, kitaip grub įdiegti nepavyks.
Recovery jeigu nesikrauna grub "file '/grub/i386-pc/normal.mod' not found."
Pažiūrime kokius skirsnius turime
ls (hd0) (hd0,msdos4) (hd0,msdos3) (hd0,msdos2) (hd0,msdos2) (hd0,msdos1) (md/0) (md/1) (md/2) set root=(md/2) set prefix=($root)/boot/grub insmod $prefix/i386-pc/normal.mod normal
Naujų/hotswapintų diskų aptikimas
apt install scsitools rescan-scsi-bus
arba
tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null partprobe