Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

Atsinaujinus kompiuterio pagrindinę plokštę, nusprendžiau atnaujinti ir kompiuterio diskinius kaupiklius. Turimi ekonominės klasės 1TB diskai neblizgėjo darbo sparta, taigi visą sistemą nusprendžiau perkelti į SSD kaupiklius, o 1TB diskus palikti tik duomenims saugoti. Prieš įdendant naujus kaupiklius abiejuose 1 TB diskuose buvo po 3 skirsnius, kurie buvo sujungti į atitinkamus RAID1 (veidrodinius) masyvus: 512M md0 (/boot), 50G md1 (LVM rootvg) ir md2 881G (LVM datavg). Na bent jau aš maniau, jog diskų konfigūracija yra tokia.

Pirminė užduotis buvo migruoti md0 ir md1 masyvus į SSD diskus. Tam abu SSD kaupikliai buvo prijungti, kaip SATA1 ir SATA2 ir pirmą kartą sistemą priverstinai įkrauta iš SATA3 kaupiklio. Pernelyg nenustebau, kai sistema įsikrovė lyg niekas nebuvo pasikeitę (pabandykite su Windows pakeisti pagrindinę plokštę ir perjungti kaupiklius prie kitų SATA jungčių ;)).

Įsikrovus sistemai diskinio posistemio konfigūracija buvo maždaug tokia:

[email protected]:~# pvs
  PV         VG            Fmt  Attr PSize   PFree  
  /dev/md1   juodas-rootvg lvm2 a--   49,96g <29,96g
  /dev/md2   juodas-datavg lvm2 a--  880,88g   8,16g
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdc1[1] sdd1[0]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 1/7 pages [4KB], 65536KB chunk

md1 : active raid1 sdc2[1] sdd2[0]
      52396032 blocks super 1.2 [2/2] [UU]

Abiejuose naujuose SSD kaupikliuose sukūriau po du skirsnius, vieną /boot kitą LVM rootvg tomų grupei ir pirmąjį skirsnį pažymėjau aktyviu (dažnai pamirštama ir paskui stebimasi, kodėl kompiuteris nesikrauna). Galutinė skirsnių konfigūracija atrodė taip:

[email protected]:/var/log# fdisk -l /dev/sda
Disk /dev/sda: 223,6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x2fa20d3c

Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *       2048   1050623   1048576   512M 83 Linux
/dev/sda2       1050624 468862127 467811504 223,1G 8e Linux LVM
[email protected]:/var/log# fdisk -l /dev/sdb
Disk /dev/sdb: 223,6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x06310630

Device     Boot   Start       End   Sectors   Size Id Type
/dev/sdb1  *       2048   1050623   1048576   512M 83 Linux
/dev/sdb2       1050624 468862127 467811504 223,1G 8e Linux LVM


Toliau naujus diskus reikėjo įtraukti į mdraid masyvus md0 ir md1, migruoti duomenis ir išmesti iš masyvo senus skirsnius. Tada atnaujinti įkrovos duomenis ir perkrauti kompiuterį... Kaip pasirodė, šis etapas buvo tikrai paprastas, tačiau paskui buvo užmiršta viena komanda, o padėdį dar labiau komplikavo karšligiškas UEFI parametrų kaitaliojimas. Bet apie viską iš eilės.

Mdraid masyvo migravimas yra paprastas. Nauji diskai pridedami prie masyvo ir masyvas "išauginamas" iki 4 diskų. Tuomet mdraid naujus diskus traktuoja, kaip aktyvius, o ne rezervinius ir pradeda duomenų sinchronizavimą.

Pridėti diskai vis yra laikomi atsarginiais:

[email protected]:~# mdadm --add /dev/md0 /dev/sda1 /dev/sdb1
mdadm: added /dev/sda1
mdadm: added /dev/sdb1
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3](S) sda1[2](S) sdc1[1] sdd1[0]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 2/7 pages [8KB], 65536KB chunk

md1 : active raid1 sdc2[1] sdd2[0]
      52396032 blocks super 1.2 [2/2] [UU]

Išauginus masyvą, pradedama md0 masyvo sinchronizacija:

[email protected]:~# mdadm --grow /dev/md0 --raid-devices=4
raid_disks for /dev/md0 set to 4
[email protected]uodas:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3] sda1[2] sdc1[1] sdd1[0]
      523712 blocks super 1.2 [4/2] [UU__]
      [=======>.............]  recovery = 37.5% (196608/523712) finish=0.0min speed=196608K/sec
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 1/7 pages [4KB], 65536KB chunk

md1 : active raid1 sdc2[1] sdd2[0]
      52396032 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

Baigus duomenų sinchronizavimą, senus diskus galima "sugadinti" ir išmesti iš masyvo, o patį masyvą sumažinti iki 2 diskų:

[email protected]:~# mdadm /dev/md0  --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
[email protected]:~# mdadm /dev/md0  --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0
[email protected]:~# mdadm /dev/md0  --remove /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md0
[email protected]:~# mdadm /dev/md0  --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
[email protected]:~# mdadm --grow /dev/md0 --raid-devices=2
raid_disks for /dev/md0 set to 2
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3] sda1[2]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 0/7 pages [0KB], 65536KB chunk

md1 : active raid1 sdc2[1] sdd2[0]
      52396032 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

Analogiška operacija padaryta ir md1 masyvui.

r[email protected]:~# mdadm --add /dev/md1 /dev/sda2 /dev/sdb2
mdadm: added /dev/sda2
mdadm: added /dev/sdb2
[email protected]:~# mdadm --grow /dev/md1 --raid-devices=4
raid_disks for /dev/md1 set to 4
[email protected]:~#
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3] sda1[2]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 2/7 pages [8KB], 65536KB chunk

md1 : active raid1 sdb2[3] sda2[2] sdc2[1] sdd2[0]
      52396032 blocks super 1.2 [4/4] [UUUU]
      
unused devices: <none>
[email protected]:~# mdadm /dev/md1 --fail  /dev/sd
sda   sda1  sda2  sdb   sdb1  sdb2  sdc   sdc1  sdc2  sdc3  sdd   sdd1  sdd2  sdd3  
[email protected]:~# mdadm /dev/md1 --fail  /dev/sd
sda   sda1  sda2  sdb   sdb1  sdb2  sdc   sdc1  sdc2  sdc3  sdd   sdd1  sdd2  sdd3  
[email protected]:~# mdadm /dev/md1 --fail  /dev/sdc2
mdadm: set /dev/sdc2 faulty in /dev/md1
[email protected]:~# mdadm /dev/md1 --fail  /dev/sdd2
mdadm: set /dev/sdd2 faulty in /dev/md1
[email protected]:~# mdadm /dev/md1 --remove  /dev/sdd2
mdadm: hot removed /dev/sdd2 from /dev/md1
[email protected]:~# mdadm /dev/md1 --remove  /dev/sdc2
mdadm: hot removed /dev/sdc2 from /dev/md1

Sistemai skirtą RAID veidrodį dar papildomai reikėjo padidinti, kad jis išnaudotų visą 240GB SSD disko talpą, nes ankstesnis masyvas buvo tik 50 GB. Tai matosi, patikrinus masyvo elementą su mdadm programa, kuri rodo, kad panaudota tik 53.65 GB iš 239.49 GB.

[email protected]:~# mdadm --examine /dev/sda2
/dev/sda2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 18160780:ade14487:bb4e3f2e:d74e2dc7
           Name : vm-serv:1
  Creation Time : Fri Dec  7 21:48:07 2018
     Raid Level : raid1
   Raid Devices : 4

 Avail Dev Size : 467745968 (223.04 GiB 239.49 GB)
     Array Size : 52396032 (49.97 GiB 53.65 GB)
  Used Dev Size : 104792064 (49.97 GiB 53.65 GB)
    Data Offset : 65536 sectors
   Super Offset : 8 sectors
   Unused Space : before=65384 sectors, after=362953904 sectors
          State : clean
    Device UUID : ca36f9a5:d0be214a:7b5e0f2f:93f820c6

    Update Time : Thu Feb 21 20:30:58 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 137811b4 - correct
         Events : 1539


   Device Role : Active device 3
   Array State : ..AA ('A' == active, '.' == missing, 'R' == replacing)
[email protected]:~# mdadm --grow /dev/md1 --size=max
mdadm: component size of /dev/md1 has been set to 233872984K
[email protected]:~#
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3] sda1[2]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 2/7 pages [8KB], 65536KB chunk

md1 : active raid1 sdb2[3] sda2[2]
      233872984 blocks super 1.2 [4/2] [__UU]
      [====>................]  resync = 23.1% (54118784/233872984) finish=8.6min speed=344550K/sec
      
unused devices: <none>

Migruojant buvau pamiršęs sumažinti masyvo dydį iki 2 diskų, tačiau kol vyko duomenų sinchronizacija, to padaryti neleido, kas šiaip yra logiška.

[email protected]:~# mdadm --grow /dev/md1 --raid-devices=2
mdadm: /dev/md1 is performing resync/recovery and cannot be reshaped

Pabaigus migracijas ir sumažinus, RAID konfigūracija atrodė taip.

[email protected]:~# mdadm --grow /dev/md1 --raid-devices=2
raid_disks for /dev/md1 set to 2
[email protected]:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md0 : active raid1 sdb1[3] sda1[2]
      523712 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdc3[1] sdd3[0]
      923677376 blocks super 1.2 [2/2] [UU]
      bitmap: 1/7 pages [4KB], 65536KB chunk

md1 : active raid1 sdb2[3] sda2[2]
      233872984 blocks super 1.2 [2/2] [UU]
      
Beliko tik atnaujinti sistemos įkrovos duomenis, paleidžiant šias komandas:

mdadm --detail --scan > /etc/mdadm/mdadm.conf
update-initramfs -k all -u
update-grub
grub-install /dev/sda
grub-install /dev/sdb

Būtent paskutinės dvi komandos buvo pamirštos ir kompiuteris nesikrovė, tuomet jau prireikė krauti iš USB atmtintinės, nes iš senų diskų sistema jau nebenorėjo krautis. O USB atmintinę dar reikėjo pasidaryti. O kai dar UEFI pakaitaliojau parametrus, tai paaiškėjo, kad kompiuteris nesikrauna ir iš USB, spjaudamas "Kernel panic".

O tereikėjo iš pradžių paleisti štai šias komandas:

[email protected]:/var/log# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[email protected]:/var/log# grub-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

Bet po UEFI parametrų kaitaliojimo, bandymų ir klaidų metodu ir atsisiuntus naują „Linux Mint“ sistemą, pavyko įkrauti sistemą, pridėjus štai tokį įkrovos parametrą: iommu=soft. Jį reikia įdėti į /etc/default/grub failą, pataisant  GRUB_CMDLINE_LINUX_DEFAULT paramertą ir paskui paleisti „update-grub“.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=soft"


Tam padaryti reikia pirmiausia iš USB įkrauti kompiuterį, o tada prijungti esamą sistemą prie aktyvios OS, terminale leidžiant šias komandas („Gentoo“ vartotojai turėtų jas pažinti)

# Paruošti prijungimo katalogą
mkdir -p /mnt
# Prijungti / LVM tomą prie /mnt
mount /dev/mapper/juodas--rootvg-root /mnt/
# Prijungti /boot
mount /dev/md0 /mnt/boot
# Prijungti /dev, /proc ir /sys failines sistemas
mount -o bind /dev /mnt/dev
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
# Pakeisti šakninę sistemą iš USB į kompiuteryje esančią
chroot  /mnt/ /bin/bash
. /etc/profile

Atlikus aukščiau esančius veiksmus komandinėje eilutėje galima keisti kompiuteryje įdiegtos sistemos parametrus, nors pats kompiuteris ir buvo įkrautas iš USB atmintinės. Žinoma tai nebus visavertė sistema, nes USB atmintinės branduolio versija greičiausiai nesutaps su sistemos ir dėl to gali kilti kokių nors sunkumų. Tačiau tokios "apgaulės" visiškai pakanka sistemos darbui atkurti.

Susitvarkius su sistemos įkrova ir pakeitus GRUB įkrovos parametrus, priėjau prie paskutinio veiksmo - padidinti LVM tomo dydį ir root failinės sistemos dydį. To reikia, nes nors RAID masyvas ir buvo "ištemptas" iki 239 GB, tačiau jame buvęs LVM tomas taip ir liko 50 GB.

Taigi, imamės jau atmintinai išmoktų komandų leidžiam jas ir ... niekas nevyksta

[email protected]:~# lvresize -l +100%FREE /dev/juodas-rootvg/root
  Extending 2 mirror images.
  Size of logical volume juodas-rootvg/root unchanged from 18,00 GiB (4608 extents).
  Logical volume juodas-rootvg/root successfully resized.

Bandom pridėti 100GB. Nulis reakcijos.

[email protected]:~# lvresize -L +100G /dev/juodas-rootvg/root
  Extending 2 mirror images.
  Insufficient suitable allocatable extents for logical volume root: 51200 more required

Jei žiūrėti į LVM fizinių tomų ir rootvg grupės informaciją, tai laisvos vietos juose yra apstu.

r[email protected]:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               juodas-rootvg
  PV Size               <223,04 GiB / not usable <2,59 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              57097
  Free PE               51975
  Allocated PE          5122
  PV UUID               2FTsUl-I0hx-Jf3M-2emf-i5IL-Xfr4-ouGP62
   
  --- Physical volume ---
  PV Name               /dev/md2
  VG Name               juodas-datavg
  PV Size               <880,89 GiB / not usable <4,69 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              225506
  Free PE               2089
  Allocated PE          223417
  PV UUID               qCdTxH-9Gwb-EWSo-Zuvs-Bxy0-ckRf-jXUXxX
[email protected]:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               juodas-rootvg
  PV Size               <223,04 GiB / not usable <2,59 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              57097
  Free PE               51975
  Allocated PE          5122
  PV UUID               2FTsUl-I0hx-Jf3M-2emf-i5IL-Xfr4-ouGP62
   
  --- Physical volume ---
  PV Name               /dev/md2
  VG Name               juodas-datavg
  PV Size               <880,89 GiB / not usable <4,69 MiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              225506
  Free PE               2089
  Allocated PE          223417
  PV UUID               qCdTxH-9Gwb-EWSo-Zuvs-Bxy0-ckRf-jXUXxX

Prireikė dar poros papildomų valandų naršymo ir pakartotinų nesėkmingų bandymų padidinti LVM tomą nors vienu gigabaitu ar bloku, kol akys užkliuvo už eilutės: "Extending 2 mirror images". Pala, pala... koks dar "mirror image", taigi mano diskinės sistemos konfigūracijoje diskų veidrodis yra formuojamas pasitelkus mdraid ir jau suformuotame /dev/mdX įrenginyje formuojamas LVM tomų masyvas.

Pasirodo ne - kompiuteryje buvo likęs prieš kelis metus suformuotas LVM tomų vridrodis, kurį sėkmingai migravau į mdraid, bet LVM veidrodžio funkcijos taip ir neišjungiau. Taigi dabar LVM užsispyrusiai atsisako plėsti LVM tomą, nes rootvg LVM grupėje yra tik vienas fizinis tomas /dev/md0 ir, LVM požiūriu, masyvas veikia "avariniu" režimu. Kadangi tikrai žinau, kad duomenų dubliavimas tikrai jau veikia mdraid masyve, tai perteklinis LVM dubliavimas man nereikalingas.


[email protected]:~# lvconvert -m0 /dev/juodas-rootvg/root
Are you sure you want to convert raid1 LV juodas-rootvg/root to type linear losing all resilience? [y/n]: y
  Logical volume juodas-rootvg/root successfully converted.

Panaikinus perteklinę LVM veidrodžio funkciją, LVM tomą ir failinę sistemą pavyko išplėsti be jokių problemų. Ir štai dėl šios funkcijos turiu priekaištų LVM. Jei mdraid akivaizdžiai parodo, kad masyvas yra subyrėjęs vien žvilgterėjus į /proc/mdstat failą, tai LVM tomų sąraše, kurį duoda lvs komanda nebuvo nė užuominos apie tai, kad mano veidrodinis LVM tomas yra "subyrėjęs".

lvresize -l +100%FREE /dev/juodas-rootvg/root
resize2fs /dev/mapper/juodas--rootvg-root

Ir po šių komandų / laisvos vietos padaugėjo iki 192GB.

[email protected]:/var/log# df -h | grep root
/dev/mapper/juodas--rootvg-root  218G   17G  192G   8% /

Pabaigai keletas naudingų nuorodų:

LVM tomų manipuliacijos
https://wiki.gentoo.org/wiki/LVM#Different_storage_allocation_methods
MDRAID migracija
https://zedt.eu/tech/linux/migrating-existing-raid1-volumes-bigger-drives/

Komentuoti


Apsaugos kodas
Atnaujinti