LVM: Mover volúmenes lógicos entre discos físicos.

  Tech / SysAdmin

Asumámoslo, shit happens.

A veces pasa que tu magnífico disco de 2TB lleno de porno interesantísimos proyectos, máquinas virtuales y archivos sensibles (porno) empieza a fallar. Si tienes backup de todo ésto, pues tampoco es ningún drama, excepto la parte de configurar de cero un nuevo sistema en otro disco y restaurar los datos. Cuando tienes el sistema más tuneado que los gorgoritos de Justin Bieber, pues es un peñazo insufrible.

Así que si eres mínimamente listo (o te ha pasado con anterioridad la mierda ésta), te lo montas para que el sistema vaya avisando (con smartctl, por ejemplo) conforme al disco duro de tus entretelas se le van acabando las horas de vuelo. Si además configuras todo el sistema con LVM (Fedora, Debian y otras ya te lo hacen por defecto al instalar), lo tienes hecho.

Asumimos un sistema con todos sus archivos y particiones dentro de un LVM basado en /dev/sdb1(excepto /boot, que sigue dando problemas). Asumiremos también que ya hemos pinchado el disco de recambio y que es correctamente reconocido por el sistema.

Creamos un nuevo volumen físico en /dev/sdc1 y echamos un vistazo a cómo está el patio a nivel de volúmenes físicos, grupos de volúmenes y volúmenes lógicos:

root@bestiaparda:/mnt# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
root@bestiaparda:/mnt# pvscan
  PV /dev/sdb1   VG vg_deb   lvm2 [1,82 TiB / 1,55 TiB free]
  PV /dev/sdc1               lvm2 [1,82 TiB]
  Total: 2 [3,64 TiB] / in use: 1 [1,82 TiB] / in no VG: 1 [1,82 TiB]
root@bestiaparda:~# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  vg_deb lvm2 a--  1,82t 1,55t
  /dev/sdc1         lvm2 a--  1,82t 1,82t
root@bestiaparda:~# vgs
  VG     #PV #LV #SN Attr   VSize VFree
  vg_deb   2   5   0 wz--n- 3,64t 3,10t
root@bestiaparda:~# lvs
  LV          VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log [...]
  lv_ERP      vg_deb -wI-a-----  20,00g                                                    
  lv_home     vg_deb -wI-ao---- 200,00g                                                    
  lv_root     vg_deb -wI-ao----  46,56g                                                    
  lv_swap     vg_deb -wI-ao----   1,86g                                                    
  vfmbofh.net vg_deb -wI-a-----   8,00g                                                    
root@bestiaparda:~#

Cuidadín con el pvcreate, que como nos equivoquemos de partición, la liaremos parda. Por otra parte, si el disco es grande (en este caso de 2TB, conviene crear una partición y luego crear el pv en ella. Cosas del GPT.

Bueno, vemos que nuestro LVM reside en /dev/sdb1, que contiene un grupo de volúmenes (VG) llamado vg_deb y éste diversos volúmenes lógicos (LV), llamados lv_WHATEVER. También vemos que el sistema reconoce correctamente el nuevo volumen físico (PV) en /dev/sdc1.

Toca extender el VG con nuestro flamante PV nuevo:

root@bestiaparda:/mnt# vgextend vg_deb /deb/sdc1
  Volume group "vg_deb" successfully extended
root@bestiaparda:~# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  vg_deb lvm2 a--  1,82t 1,55t
  /dev/sdc1  vg_deb lvm2 a--  1,82t 1,82t
root@bestiaparda:~# 

Vemos que ya tenemos el nuevo PV asignado al VG, así que podemos proceder a mover todos los LV de un disco a otro del tirón. Sin desmontar ni nada. Fácil para todos.

root@bestiaparda:/mnt# pvmove /dev/sdb1 /dev/sdc1
/dev/sdb1: Moved: 0,0%
[...]
/dev/sdb1: Moved: 99,9%

Fácil. No rápido. Si tenéis tabaco, es un buen momento para un piti. O diez.
Es un movimiento bastante seguro. Internamente, LVM no elimina nada que no se haya copiado correctamente antes. Así que la cosa es a prueba de fallos. MUY a prueba de fallos. He visto sistemas recuperarse de un apagado a las bravas con un proceso como éste a medio hacer y no sólo arrancar tan ricamente, sino continuar el proceso allí donde se quedó.
Por cierto, no avisa con ningún mensaje en caso de éxito. Simplemente llega al 100% y para.

Veamos qué tenemos al acabar:

root@bestiaparda:/mnt# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  vg_deb lvm2 a--  1,82t 1,82t
  /dev/sdc1  vg_deb lvm2 a--  1,82t 1,55t

Como podemos ver, los datos se han movido sin más. Aunque la partición raíz del sistema que estemos moviendo esté en uso. Ole y ole.

Ya podemos eliminar el disco moribundo del LVM activo y respirar tranquilos:

root@bestiaparda:/mnt# vgreduce vg_deb /dev/sdb1
  Removed "/dev/sdb1" from volume group "vg_deb"
root@bestiaparda:/mnt# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
root@bestiaparda:/mnt# 

Ahora, en la próxima parada del sistema, podremos eliminar físicamente el disco sin más problemas y darle un final PePero, a martillazos.

<ESC>:wq!

4 comentarios en - LVM: Mover volúmenes lógicos entre discos físicos.

  • Los discos tienen que ser del mismo tamaño, o pueden ser de tamaños diferentes?
    Por ejemplo /dev/sdb1 500GB y /dev/sdc1 160GB….

    Excelente tuto, gracias.

  • Para este método, el disco de destino tiene que ser igual o mayor.

    Si tienes que mover a un disco más pequeño, te va a tocar parada de servicio. Arrancas con un live, reduces el FS, el LV y el PV y, posteriormente, haces el pvmove.

  • hola apenas estoy aprendiendo esto del pv
    tengo un disco duro mecanico de 500 gb con fedora en lvm pero quiero clonarlo a uno de estado solido de 240 gb podrias decirme los pasos que debo de hacer para poder lograrlo.
    otra la particion swap que se creo automaticamente cuando instale fedora fue de 8 gb porque mi memoria ram es de ese tamaño y no se como reducirlo para no desperdiciar tanto espacio.
    y ya si se pudiera podrias decirme si la cago, hacer una instalacion con la particion manual en este tipo de formatp lvm

  • [root@localhost ~]# fdisk -l
    Disco /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectores
    Modelo de disco: WDC WD5000AAKS-6
    Unidades: sectores de 1 * 512 = 512 bytes
    Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
    Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
    Tipo de etiqueta de disco: gpt
    Identificador del disco: DE75B625-B0EF-4D10-9E63-9B3BF49646E8

    Disposit. Comienzo Final Sectores Tamaño Tipo
    /dev/sda1 2048 411647 409600 200M Sistema EFI
    /dev/sda2 411648 2508799 2097152 1G Sistema de ficheros de Linux
    /dev/sda3 2508800 976773119 974264320 464.6G Linux LVM
    y al hacer
    [root@localhost ~]# lvs
    WARNING: Failed to connect to lvmetad. Falling back to device scanning.
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    home fedora_localhost-live -wi-ao—- <387.70g
    root fedora_localhost-live -wi-ao—- 70.00g
    swap fedora_localhost-live -wi-ao—- 6.86g
    [root@localhost ~]# pvs
    WARNING: Failed to connect to lvmetad. Falling back to device scanning.
    PV VG Fmt Attr PSize PFree
    /dev/sda3 fedora_localhost-live lvm2 a– 464.56g 0

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.