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:root@juodas:~# 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,16groot@juodas:~# 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 chunkmd1 : 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:root@juodas:/var/log# fdisk -l /dev/sdaDisk /dev/sda: 223,6 GiB, 240057409536 bytes, 468862128 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisklabel type: dosDisk identifier: 0x2fa20d3cDevice Boot Start End Sectors Size Id Type/dev/sda1 * 2048 1050623 1048576 512M 83 Linux/dev/sda2 1050624 468862127 467811504 223,1G 8e Linux LVMroot@juodas:/var/log# fdisk -l /dev/sdbDisk /dev/sdb: 223,6 GiB, 240057409536 bytes, 468862128 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisklabel type: dosDisk identifier: 0x06310630Device 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:root@juodas:~# mdadm --add /dev/md0 /dev/sda1 /dev/sdb1mdadm: added /dev/sda1mdadm: added /dev/sdb1root@juodas:~# 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 chunkmd1 : active raid1 sdc2[1] sdd2[0] 52396032 blocks super 1.2 [2/2] [UU]
Išauginus masyvą, pradedama md0 masyvo sinchronizacija:root@juodas:~# mdadm --grow /dev/md0 --raid-devices=4raid_disks for /dev/md0 set to 4root@juodas:~# 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 chunkmd1 : 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ų:root@juodas:~# mdadm /dev/md0 --fail /dev/sdc1mdadm: set /dev/sdc1 faulty in /dev/md0root@juodas:~# mdadm /dev/md0 --fail /dev/sdd1mdadm: set /dev/sdd1 faulty in /dev/md0root@juodas:~# mdadm /dev/md0 --remove /dev/sdd1mdadm: hot removed /dev/sdd1 from /dev/md0root@juodas:~# mdadm /dev/md0 --remove /dev/sdc1mdadm: hot removed /dev/sdc1 from /dev/md0root@juodas:~# mdadm --grow /dev/md0 --raid-devices=2raid_disks for /dev/md0 set to 2root@juodas:~# 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 chunkmd1 : active raid1 sdc2[1] sdd2[0] 52396032 blocks super 1.2 [2/2] [UU] unused devices: <none>
Analogiška operacija padaryta ir md1 masyvui.
root@juodas:~# mdadm --add /dev/md1 /dev/sda2 /dev/sdb2 mdadm: added /dev/sda2mdadm: added /dev/sdb2root@juodas:~# mdadm --grow /dev/md1 --raid-devices=4raid_disks for /dev/md1 set to 4root@juodas:~# root@juodas:~# 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 chunkmd1 : active raid1 sdb2[3] sda2[2] sdc2[1] sdd2[0] 52396032 blocks super 1.2 [4/4] [UUUU] unused devices: <none>root@juodas:~# mdadm /dev/md1 --fail /dev/sdsda sda1 sda2 sdb sdb1 sdb2 sdc sdc1 sdc2 sdc3 sdd sdd1 sdd2 sdd3 root@juodas:~# mdadm /dev/md1 --fail /dev/sdsda sda1 sda2 sdb sdb1 sdb2 sdc sdc1 sdc2 sdc3 sdd sdd1 sdd2 sdd3 root@juodas:~# mdadm /dev/md1 --fail /dev/sdc2 mdadm: set /dev/sdc2 faulty in /dev/md1root@juodas:~# mdadm /dev/md1 --fail /dev/sdd2 mdadm: set /dev/sdd2 faulty in /dev/md1root@juodas:~# mdadm /dev/md1 --remove /dev/sdd2 mdadm: hot removed /dev/sdd2 from /dev/md1root@juodas:~# 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.root@juodas:~# 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)root@juodas:~# mdadm --grow /dev/md1 --size=maxmdadm: component size of /dev/md1 has been set to 233872984Kroot@juodas:~# root@juodas:~# 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 chunkmd1 : 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.root@juodas:~# mdadm --grow /dev/md1 --raid-devices=2mdadm: /dev/md1 is performing resync/recovery and cannot be reshaped
Pabaigus migracijas ir sumažinus, RAID konfigūracija atrodė taip.root@juodas:~# mdadm --grow /dev/md1 --raid-devices=2raid_disks for /dev/md1 set to 2root@juodas:~# 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 chunkmd1 : 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.confupdate-initramfs -k all -uupdate-grubgrub-install /dev/sdagrub-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:root@juodas:/var/log# grub-install /dev/sdaInstalling for i386-pc platform.Installation fini shed. No error reported.root@juodas:/var/log# grub-install /dev/sdbInstalling 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 /mntmount /dev/mapper/juodas--rootvg-root /mnt/# Prijungti /bootmount /dev/md0 /mnt/boot# Prijungti /dev, /proc ir /sys failines sistemasmount -o bind /dev /mnt/devmount -t proc none /mnt/procmount -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 nevykstaroot@juodas:~# 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.root@juodas:~# 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. root@juodas:~# 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-jXUXxXroot@juodas:~# 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. root@juodas:~# lvconvert -m0 /dev/juodas-rootvg/rootAre 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/rootresize2fs /dev/mapper/juodas--rootvg-root
Ir po šių komandų / laisvos vietos padaugėjo iki 192GB.root@juodas:/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/