Linux softwarinio raid1 disko keitimas

Iš Žinynas.
18:55, 30 rugpjūčio 2018 versija, sukurta \dev\null (Aptarimas | indėlis)
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Jump to navigation Jump to search

Screenshot at Jun 14 13-37-09.png

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