Diminuir o volume físico LVM sobre a matriz RAID degradada do mdadm, adicionando um sobressalente e reconstruindo-o

8

Eu tenho um Debian Wheezysistema com um par de 500 GB HDDs em RAID-1 ( mdadmespelho), no topo do qual se senta LVMvolumes lógicos com 5 partições ( boot, root, usr, vare tmp), o tamanho total de 47.15 GiB. 418,38 GiB no volume físico são gratuitos. GRUBinstalado em ambas as unidades.

Um dos HDDs falhou e agora a matriz está degradada, mas os dados estão intactos.

O que eu quero é trocar todos esses 2 HDDs para SSDs de 80 GB sem a necessidade de reinstalar o sistema do zero. O ponto sutil aqui é que eu preciso reduzir o volume físico do LVM para corresponder ao tamanho do SSD, mas os volumes lógicos não são contíguos (há muito espaço livre no começo), então tenho que, de alguma forma, mover volumes lógicos dentro de um físico . E não há lvmovecomando no Debian.

Como faço para conseguir isso?

Alguma saída do console:

Versões:

root@wheezy:~# uname -a && mdadm --version && lvm version
Linux wheezy 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
mdadm - v3.2.5 - 18th May 2012
  LVM version:     2.02.95(2) (2012-03-06)
  Library version: 1.02.74 (2012-03-06)
  Driver version:  4.22.0

Detalhes da matriz:

root@wheezy:~# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Dec  4 12:20:22 2014
     Raid Level : raid1
     Array Size : 488148544 (465.53 GiB 499.86 GB)
  Used Dev Size : 488148544 (465.53 GiB 499.86 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Thu Dec  4 13:08:59 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 : 26

Number   Major   Minor   RaidDevice State
   0       8       16        0      active sync   /dev/sdb
   1       0        0        1      removed

Breves detalhes do LVM:

root@wheezy:~# pvs && vgs && lvs                                                                                               
  PV         VG     Fmt  Attr PSize   PFree                                                                                          
  /dev/md0   system lvm2 a--  465.53g 418.38g                                                                                        
  VG     #PV #LV #SN Attr   VSize   VFree                                                                                            
  system   1   5   0 wz--n- 465.53g 418.38g                                                                                          
  LV   VG     Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert                                                            
  boot system -wi----- 152.00m                                                                                                       
  root system -wi-----   2.00g                                                                                                       
  tmp  system -wi-----  10.00g                                                                                                       
  usr  system -wi-----  20.00g                                                                                                       
  var  system -wi-----  15.00g

Segmentação do PV:

root@wheezy:~# 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 89600          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g  89600    38 boot     0 linear /dev/md0:89600-89637  
    /dev/md0   system lvm2 a--  465.53g 418.38g  89638   512 root     0 linear /dev/md0:89638-90149  
    /dev/md0   system lvm2 a--  465.53g 418.38g  90150  5120 usr      0 linear /dev/md0:90150-95269  
    /dev/md0   system lvm2 a--  465.53g 418.38g  95270  3840 var      0 linear /dev/md0:95270-99109  
    /dev/md0   system lvm2 a--  465.53g 418.38g  99110  1280          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g 100390  2560 tmp      0 linear /dev/md0:100390-102949
    /dev/md0   system lvm2 a--  465.53g 418.38g 102950 16226          0 free  
Neurotransmissor
fonte
Ou você pode simplesmente criar um novo RAID / VG / LV no SSD e rsyncseus arquivos acabados. Não está online, mas provavelmente será mais rápido do que qualquer outra coisa.
Frostschutz
No começo eu deveria encolher PV e array. Então eu apenas recupero a matriz.
Neurotransmitter

Respostas:

5

Você não precisa encolher o PV ou reconstruir a matriz. Você só precisa criar uma nova matriz a partir das novas unidades e adicioná-la como um novo pv ( pvcreate+ vgextend), depois pvmovetodos os lvs existentes fora do antigo pv, remover o antigo pv ( vgreduce) e tirar essa unidade de serviço.

psusi
fonte
Boa solução alternativa, mas prefiro manter a matriz antiga apenas para economizar tempo: não quero reintegrar uma nova matriz no sistema antigo.
Neurotransmitter
1
@TranslucentCloud, leva menos tempo para criar uma nova matriz do que redimensionar a antiga, reconstruí-la em uma das novas unidades, remover a unidade antiga e reconstruí-la novamente.
Pssi
Mas você pode enfrentar etapas adicionais tentando instalar a GRUBpartir do sistema Live. É mais fácil inicializar no sistema de produção e instalar o GRUB a partir dele com um simples comando.
Neurotransmitter
@TranslucentCloud, quem disse alguma coisa sobre um sistema ativo? De qualquer maneira, você precisa instalar o grub nas novas unidades. Como você está executando o debian, isso é muito fácil: dpkg-reconfigure grub-pce selecione os novos drives.
Pssi
1
@TranslucentCloud O ponto principal do LVM é a capacidade de redimensionar e mover as coisas enquanto o sistema está em uso. O mesmo para o MD, você pode substituir discos e redimensionar enquanto estiver em execução. A única coisa que poderia impedi-lo é se o seu sistema de arquivos não suportar redimensionamento ao vivo (se você precisar reduzi-lo).
Frostschutz
3

Não é lvmovemas pvmove.

pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070

Isso deve mover quaisquer extensões dentro do intervalo 89600-102950 para o intervalo 0-12070. De acordo com os dados que você postou, os resultados devem ser realocados para os LVs no início do seu PV.

frostschutz
fonte
Sim, isso resolve LValinhar parte da tarefa.
Neurotransmitter
3

ATENÇÃO: ESTE GUIA ESTÁ LONGE DO OPTIMAL. VERIFIQUE A RESPOSTA ACEITADA

Ok, eu descobri como fazer o que tentei. Este será um tipo de tutorial.

Durante esse período, eu ainda não havia percebido que manipulações com LVs são realmente possíveis quando os sistemas de arquivos são montados e inicializados em alguma livedistribuição 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 diminuindo o PV.

Assim, com este guia você definitivamente vai conseguir o que deseja, mas não de uma forma eficiente, porque confronta a própria natureza do LVM - possibilidade de fazer as coisas viver .

  1. Devido à natureza não contígua dos volumes lógicos no meu volume físico, devo movê-los de alguma forma no início do volume físico. O pvmovecomando, conforme sugerido por @frostschutz, pode se mover LVsdentro 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  
    
  2. Agora PVestá pronto para diminuir 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
    
  3. Depois disso, eu posso redimensionar a própria matriz. Não há sistemas de arquivos nesse nível, então acabo com apenas um mdadm --growcomando, que também pode ser usado para reduzir matrizes. O tamanho deve ser inserido 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
    
  4. 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 uma matriz saudável. Seus membros podem ser trocados e a instalação do GRUB pode ser realizada rotineiramente (após a inicialização no sistema de produção) com grub-install /dev/sdc.

Neurotransmissor
fonte
Espero que você não tenha tornado seu PV muito grande; se o SSD for de 80 GB, talvez não seja possível definir seu PV para 80 GB, com compensações devido a particionamento e metadados. Além disso, é claro que esta é uma operação on-line, tudo isso, nenhum CD ao vivo necessário.
Frostschutz 04/04
@frostschutz, como você provavelmente já viu, não configurei meu PV para 80 gigabytes, mas para 74,5 gibibytes (etapa 3) e este é um espaço suficiente para corresponder ao tamanho do SSD. Além disso, os LVs são montados e usados ​​pelo sistema, então tive que inicializar em algum sistema ativo.
Neurotransmitter