ATENÇÃO: ESTE GUIA ESTÁ LONGO A PARTIR DO OPTIMAL. VERIFIQUE A RESPOSTA ACEITADA
Ok, descobri como fazer o que tentei. Este será um tipo de tutorial.
Durante esse tempo eu ainda não tinha percebido, que as manipulações com LVs são possíveis quando os sistemas de arquivos são montados e iniciados em alguma distribuição live
do Linux (SystemRescueCD). As pessoas aqui me explicaram que não há necessidade disso se você não estiver manipulando com sistemas de arquivos reais e apenas alinhando LVs e encolhendo PV.
Assim, com este guia, você definitivamente conseguirá o que deseja, mas não de maneira eficiente, porque confronta a natureza do LVM - possibilidade de fazer coisas ao vivo .
-
Devido à natureza não contígua dos volumes lógicos no meu volume físico, eu deveria de alguma forma movê-los no início do volume físico. O comando pvmove
, como sugerido por @frostschutz, pode mover LVs
dentro de PV
:
root@wheezy:/home/a# pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070
/dev/md0: Moved: 100.0%
root@wheezy:/home/a# pvs -v --segments /dev/md0
Using physical volume(s) on command line
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/md0 system lvm2 a-- 465.53g 418.38g 0 38 boot 0 linear /dev/md0:0-37
/dev/md0 system lvm2 a-- 465.53g 418.38g 38 512 root 0 linear /dev/md0:38-549
/dev/md0 system lvm2 a-- 465.53g 418.38g 550 5120 usr 0 linear /dev/md0:550-5669
/dev/md0 system lvm2 a-- 465.53g 418.38g 5670 2560 tmp 0 linear /dev/md0:5670-8229
/dev/md0 system lvm2 a-- 465.53g 418.38g 8230 3840 var 0 linear /dev/md0:8230-12069
/dev/md0 system lvm2 a-- 465.53g 418.38g 12070 107106 0 free
-
Agora o PV
está pronto para encolher para o tamanho do SSD (80 GB). 80 gigabytes são na verdade 80000000000 bytes:
root@wheezy:/home/a# pvresize --setphysicalvolumesize 80000000000B /dev/md0
Physical volume "/dev/md0" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
root@wheezy:/home/a# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 system lvm2 a-- 74.50g 27.36g
-
Depois disso, posso redimensionar o array em si. Não há sistemas de arquivos neste nível, então acabo com apenas o comando mdadm --grow
, que pode realmente ser usado para reduzir matrizes também. O tamanho deve ser digitado em kibibytes
, por isso é 80000000000/1024 = 78125000:
root@wheezy:/home/a# mdadm --grow --size=78125000 /dev/md0
mdadm: component size of /dev/md0 has been set to 78125000K
root@wheezy:/home/a# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Dec 4 12:20:22 2014
Raid Level : raid1
Array Size : 78125000 (74.51 GiB 80.00 GB)
Used Dev Size : 78125000 (74.51 GiB 80.00 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Thu Dec 4 17:56:53 2014
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : wheezy:0 (local to host wheezy)
UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
Events : 60
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 0 0 1 removed
-
Agora é hora de adicionar um SSD existente ao array e deixá-lo reconstruir:
root@wheezy:/home/a# mdadm --add /dev/md0 /dev/sdc
mdadm: added /dev/sdc
root@wheezy:/home/a# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[2] sdb[0]
78125000 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 1.3% (1081920/78125000) finish=11.8min speed=108192K/sec
unused devices: <none>
Após a reconstrução, tenho um array saudável. Seus membros podem ser trocados e a instalação do GRUB pode ser executada rotineiramente (após a inicialização no sistema de produção) com grub-install /dev/sdc
.