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,16g
root@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 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:

root@juodas:/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
root@juodas:/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:

root@juodas:~# mdadm --add /dev/md0 /dev/sda1 /dev/sdb1
mdadm: added /dev/sda1
mdadm: added /dev/sdb1
root@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 chunk

md1 : 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=4
raid_disks for /dev/md0 set to 4
root@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 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ų:

root@juodas:~# mdadm /dev/md0 --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
root@juodas:~# mdadm /dev/md0 --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0
root@juodas:~# mdadm /dev/md0 --remove /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md0
root@juodas:~# mdadm /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
root@juodas:~# mdadm --grow /dev/md0 --raid-devices=2
raid_disks for /dev/md0 set to 2
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: 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.

root@juodas:~# mdadm --add /dev/md1 /dev/sda2 /dev/sdb2
mdadm: added /dev/sda2
mdadm: added /dev/sdb2
root@juodas:~# mdadm --grow /dev/md1 --raid-devices=4
raid_disks for /dev/md1 set to 4
root@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 chunk

md1 : 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/sd
sda sda1 sda2 sdb sdb1 sdb2 sdc sdc1 sdc2 sdc3 sdd sdd1 sdd2 sdd3
root@juodas:~# mdadm /dev/md1 --fail /dev/sd
sda 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/md1
root@juodas:~# mdadm /dev/md1 --fail /dev/sdd2
mdadm: set /dev/sdd2 faulty in /dev/md1
root@juodas:~# mdadm /dev/md1 --remove /dev/sdd2
mdadm: hot removed /dev/sdd2 from /dev/md1
root@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=max
mdadm: component size of /dev/md1 has been set to 233872984K
root@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 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.

root@juodas:~# 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.

root@juodas:~# mdadm --grow /dev/md1 --raid-devices=2
raid_disks for /dev/md1 set to 2
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: 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:

root@juodas:/var/log# grub-install /dev/sda
Installing for i386-pc platform.
Installation fini shed. No error reported.
root@juodas:/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

root@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-jXUXxX
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-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/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.

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/