Reducción del volumen físico LVM sobre la matriz RAID degradada mdadm, agregando un repuesto y reconstruyéndolo


8

Tengo un Debian Wheezysistema con un par de 500 GB discos duros en RAID-1 ( mdadmespejo), en la parte superior de los cuales se sienta LVMvolúmenes lógicos con 5 particiones ( boot, root, usr, vary tmp), el tamaño total de 47,15 GiB. 418.38 GiB en el volumen físico son gratis. GRUBinstalado en ambas unidades.

Uno de los discos duros falló y ahora la matriz está degradada, pero los datos están intactos.

Lo que quiero es cambiar todos estos 2 HDD a SSD de 80 GB sin la necesidad de reinstalar el sistema desde cero. El punto sutil aquí es que necesito reducir el volumen físico de LVM para que coincida con el tamaño de la SSD, pero los volúmenes lógicos no son contiguos (hay mucho espacio libre al principio), por lo que tengo que mover los volúmenes lógicos dentro de uno físico. . Y no hay ningún lvmovecomando en Debian.

¿Cómo logro esto?

Alguna salida de consola:

Versiones

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

Detalles de la 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 detalles de 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

Segmentación de la 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  

O simplemente puede crear un nuevo RAID / VG / LV en el SSD y rsyncsus archivos de nuevo. No está en línea, pero es probable que sea más rápido que cualquier otra cosa.
frostschutz

Al principio debería reducir el PV y la matriz. Entonces solo recupero la matriz.
Neurotransmisor

Respuestas:


5

No necesita reducir el pv o reconstruir la matriz. Solo necesita crear una nueva matriz a partir de las nuevas unidades y agregarla como un nuevo pv ( pvcreate+ vgextend), luego pvmovetodos los lvs existentes del antiguo pv, luego elimine el viejo pv ( vgreduce) y saque esa unidad del servicio.


Es una buena solución alternativa, pero prefiero seguir con la matriz anterior solo para ahorrar tiempo: no quiero reintegrar una matriz nueva en el sistema anterior.
Neurotransmisor

1
@TranslucentCloud, lleva menos tiempo crear una nueva matriz que cambiar el tamaño de la anterior, reconstruirla en una de las nuevas unidades, quitar la unidad anterior y volver a generarla.
psusi

Pero puede enfrentar pasos adicionales al intentar instalar GRUBdesde el sistema Live. Es más fácil iniciar en el sistema de producción e instalar GRUB desde él con un simple comando.
Neurotransmisor

@TranslucentCloud, ¿quién dijo algo sobre un sistema en vivo? De cualquier manera, debe instalar grub en las nuevas unidades. Como está ejecutando Debian, es bastante fácil: dpkg-reconfigure grub-pcy seleccione las nuevas unidades.
psusi

1
@TranslucentCloud todo el punto de LVM es la capacidad de cambiar el tamaño y mover cosas mientras el sistema está en uso. Lo mismo para MD, puede reemplazar discos y cambiar el tamaño mientras se está ejecutando. Lo único que podría evitarlo es si su sistema de archivos no admite el cambio de tamaño en vivo (si tuviera que reducirlo).
frostschutz

3

No es lvmovepero pvmove.

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

Eso debería mover cualquier extensión dentro del rango 89600-102950 al rango 0-12070. De acuerdo con los datos que publicó, esto debería resultar en la reubicación de sus LV al comienzo de su PV.


Sí, esto resuelve LValinear parte de la tarea.
Neurotransmisor

3

ATENCIÓN: ESTA GUÍA ESTÁ LEJOS DE LO ÓPTIMO. COMPRUEBE LA RESPUESTA ACEPTADA

Bien, descubrí cómo hacer lo que intenté. Este será un tipo de tutorial.

Durante este tiempo aún no me había dado cuenta de que las manipulaciones con LV son realmente posibles cuando los sistemas de archivos se montan y arrancan en alguna livedistribución de Linux (SystemRescueCD). La gente aquí me explicó que no hay necesidad de esto si no estás manipulando con sistemas de archivos reales y solo estás alineando LV y reduciendo PV.

Entonces, con esta guía, definitivamente logrará lo que desea, pero no de manera eficiente, ya que se enfrenta a la naturaleza misma de LVM: la posibilidad de hacer las cosas en vivo .

  1. Debido a la naturaleza no contigua de los volúmenes lógicos en mi volumen físico, de alguna manera debería moverlos al comienzo del volumen físico. El pvmovecomando, como lo sugiere @frostschutz, puede moverse LVsdentro de 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. Ahora PVestá listo para reducirse al tamaño del SSD (80 GB). 80 gigabytes son en realidad 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. Después de esto, puedo cambiar el tamaño de la matriz en sí. No hay sistemas de archivos en este nivel, así que termino con un solo mdadm --growcomando, que en realidad también se puede usar para reducir matrices. El tamaño debe ingresarse kibibytes, por lo que es 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. Ahora es el momento de agregar un SSD existente a la matriz y dejar que se reconstruya:

    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>
    

Después de reconstruir tengo una matriz saludable. Sus miembros se pueden intercambiar y la instalación de GRUB se puede realizar de forma rutinaria (después de arrancar en el sistema de producción) con grub-install /dev/sdc.


Espero que no hayas hecho tu PV demasiado grande; Si el SSD es de 80 GB, es posible que no pueda configurar su PV a 80 GB con compensaciones debido a particiones y metadatos. Además, por supuesto, esta es una operación en línea, todo ello, no es necesario un CD en vivo.
frostschutz

@frostschutz, como probablemente haya visto, no configuré mi PV en 80 gigabytes, sino en 74.5 gibibytes (paso 3) y este es un espacio suficiente para que coincida con el tamaño del SSD. Además, el sistema monta y usa los LV, así que tuve que arrancar en algún sistema en vivo.
Neurotransmisor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.