Riduzione del volume fisico LVM in cima all'array RAID degradato da mdadm, aggiungendo un ricambio e ricostruendolo


8

Ho un Debian Wheezysistema con una coppia di 500 GB HDD in RAID-1 ( mdadmmirror), sulla cui sommità si siede LVMvolumi logici con 5 partizioni ( boot, root, usr, vare tmp), dimensione totale di 47.15 GB. 418,38 GiB nel volume fisico sono gratuiti. GRUBinstallato su entrambe le unità.

Uno degli HDD è fallito e ora l'array è degradato, ma i dati sono intatti.

Quello che voglio è scambiare tutti questi 2 HDD con SSD da 80 GB senza la necessità di reinstallare il sistema da zero. Il punto sottile qui è che devo ridurre il volume fisico LVM per adattarlo alle dimensioni dell'SSD, ma i volumi logici non sono contigui (all'inizio c'è molto spazio libero), quindi devo spostare in qualche modo i volumi logici all'interno di uno fisico . E non c'è alcun lvmovecomando in Debian.

Come posso raggiungere questo obiettivo?

Alcuni output console:

versioni:

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

Dettagli dell'array:

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

Brevi dettagli 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

Segmentazione del fotovoltaico:

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  

Oppure potresti semplicemente creare un nuovo RAID / VG / LV sull'SSD e rsyncarchiviare i tuoi file. Non è online ma probabilmente sarà più veloce di ogni altra cosa.
frostschutz,

All'inizio dovrei ridurre sia il fotovoltaico che l'array. Quindi ho appena recuperato l'array.
Neurotrasmettitore

Risposte:


5

Non è necessario ridurre il pv o ricostruire l'array. Devi solo creare un nuovo array dalle nuove unità e aggiungerlo come nuovo pv ( pvcreate+ vgextend), quindi pvmovetutti i lv esistenti dal vecchio pv, quindi rimuovere il vecchio pv ( vgreduce) e mettere quell'unità fuori servizio.


Buona soluzione alternativa ma preferisco attenermi al vecchio array solo per risparmiare tempo: non voglio reintegrare un nuovo array nel vecchio sistema.
Neurotrasmettitore

1
@TranslucentCloud, ci vuole meno tempo per creare un nuovo array che per ridimensionare quello vecchio, ricostruirlo su una delle nuove unità, rimuovere la vecchia unità e ricostruirla di nuovo.
psusi,

Ma puoi affrontare ulteriori passaggi cercando di installare GRUBdal sistema Live. È più facile avviare il sistema di produzione e installare GRUB da esso con un semplice comando.
Neurotrasmettitore

@TranslucentCloud, chi ha detto qualcosa su un sistema live? In entrambi i casi è necessario installare grub sulle nuove unità. Dato che stai eseguendo debian è abbastanza semplice: dpkg-reconfigure grub-pce seleziona le nuove unità.
psusi,

1
@TranslucentCloud l'intero punto di LVM è la possibilità di ridimensionare e spostare le cose mentre il sistema è in uso. Lo stesso per MD, è possibile sostituire i dischi e ridimensionare mentre è in esecuzione. L'unica cosa che potrebbe impedirti è se il tuo filesystem non supporta il ridimensionamento live (se dovessi ridurlo).
frostschutz,

3

Non è lvmovema pvmove.

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

Ciò dovrebbe spostare qualsiasi estensione nell'intervallo 89600-102950 nell'intervallo 0-12070. Secondo i dati che hai pubblicato, i tuoi LV dovrebbero essere trasferiti all'inizio del tuo PV.


Sì, questo risolve l' LVallineamento di una parte dell'attività.
Neurotrasmettitore

3

ATTENZIONE: QUESTA GUIDA È LONTANO DA OTTIMALE. CONTROLLA LA RISPOSTA ACCETTATA

Ok, ho capito come fare quello che ho provato. Sarà una sorta di tutorial.

Durante questo periodo non mi ero ancora reso conto che le manipolazioni con LV sono effettivamente possibili quando i filesystem sono montati e avviati in alcune livedistribuzioni Linux (SystemRescueCD). Le persone qui mi hanno spiegato che non è necessario in questo caso se non si sta manipolando con i filesystem reali e si stanno semplicemente allineando LV e riducendo il PV.

Quindi con questa guida otterrai sicuramente quello che vuoi, ma non in modo efficiente, perché confronta la natura stessa di LVM: la possibilità di fare le cose dal vivo .

  1. A causa della natura non contigua dei volumi logici sul mio volume fisico, dovrei in qualche modo spostarli all'inizio del volume fisico. Il pvmovecomando, come suggerito da @frostschutz, può spostarsi LVsall'interno di un 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. Ora PVè pronto per ridursi alle dimensioni dell'SSD (80 GB). 80 gigabyte sono in realtà un 80000000000 byte:

    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. Dopo questo, posso ridimensionare l'array stesso. Non ci sono filesystem a questo livello, quindi finisco con un solo mdadm --growcomando, che può essere effettivamente utilizzato per ridurre anche le matrici. La dimensione deve essere inserita kibibytes, quindi è 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. Ora è il momento di aggiungere un SSD esistente all'array e lasciarlo ricostruire:

    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>
    

Dopo la ricostruzione ho un array sano. I suoi membri possono essere scambiati e l'installazione di GRUB può essere eseguita abitualmente (dopo l'avvio nel sistema di produzione) con grub-install /dev/sdc.


Spero che tu non abbia reso il tuo PV troppo grande; se l'SSD è 80 GB, potresti non essere in grado di impostare il tuo PV su 80 GB con offset a causa del partizionamento e dei metadati. Inoltre, ovviamente si tratta di un'operazione online, non è necessario alcun cd live.
frostschutz,

@frostschutz, come probabilmente hai visto, non ho impostato il mio PV su 80 gigabyte, ma su 74,5 gibibyte (passaggio 3) e questo è uno spazio sufficiente per adattarsi alle dimensioni dell'SSD. Inoltre, i LV sono montati e utilizzati dal sistema, quindi ho dovuto avviare un sistema live.
Neurotrasmettitore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.