Agregar una partición a un volumen lógico LVM

Cuando instalé Linux decidí usar un viejo disco duro de 10 GB ya que sólo era para probarlo, no imaginaba que me cambiaría definitivamente a Linux. Cuando el disco duro se llenó pensé en reinstalar Linux desde cero en otro disco más grande pero entonces aprendí sobre LVM, Logical Volume Manager de Linux. Como el nombre lo indica, LVM se encarga de administrar unidades lógicas de una forma independiente a las unidades físicas presentes. Esto permite, entre otras cosas, agregar una nueva partición física a una unidad lógica, efectivamente incrementando la capacidad de almacenamiento en la unidad lógica.

¡ADVERTENCIA!: No debes tomar las instrucciones en este post como una solución universal; tu configuración puede ser distinta y hacerlo de forma incorrecta podría dejar tu instalación de Linux inutilizable. Sólo debes intentar modificar el LVM de tu sistema si sabes lo que estás haciendo.

En este caso comenzamos con una instalación de Linux que ya usa LVM y una partición nueva y previamente formateada que deseamos agregar al LVM. LVM consiste de 3 componentes: unidades físicas (pv: physical volumes), grupos de unidades (vg: volume groups) y unidades lógicas (lv: logical volumes).

Antes que nada, veamos cuanto espacio libre tenemos en nuestro sistema:

monstruosoft@PC:~$ df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/dm-1        8.7G   8.1G  145M  99% /
udev              10M      0   10M   0% /dev
tmpfs            779M   9.7M  769M   2% /run
tmpfs            2.0G    68K  2.0G   1% /dev/shm
tmpfs            5.0M   4.0K  5.0M   1% /run/lock
tmpfs            2.0G      0  2.0G   0% /sys/fs/cgroup
/dev/sdb1        236M    34M  190M  16% /boot
tmpfs            390M    12K  390M   1% /run/user/1000

Como podemos ver, mi sistema de archivos (/) tiene solamente 145 MB libres. Aquí es donde queremos usar LVM para agregar espacio a la unidad lógica correspondiente a /.

El primer paso es agregar al LVM la unidad física para que pueda usarla, en este caso la unidad física que quiero agregar es /dev/sdc5. Este paso consiste en informarle al LVM que hay una nueva unidad física que puede usar. Para hacer esto usamos el comando pvcreate como se muestra a continuación:

monstruosoft@PC:~$ sudo pvcreate /dev/sdc5
  Physical volume "/dev/sdc5" successfully created
monstruosoft@PC:~$ sudo pvdisplay 
  --- Physical volume ---
  PV Name               /dev/mapper/sda5_crypt
  VG Name               monstruosoft-PC-vg
  PV Size               9.30 GiB / not usable 0   
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2380
  Free PE               0
  Allocated PE          2380
  PV UUID               2LXreV-peu4-5Qfd-K6vD-9g5W-1b0J-1oFht6
   
  "/dev/sdc5" is a new physical volume of "48.83 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc5
  VG Name               
  PV Size               48.83 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NMrju4-75ym-3v57-V015-bmjZ-Pkuz-rl98yz

LVM ahora está al tanto de que hay una nueva unidad física que puede usar de manera que ahora podemos agregar la unidad física a un grupo de unidades, en este caso al grupo de unidades predeterminado del sistema; para ello podemos usar primero el comando vgdisplay para obtener una lista de los grupos de unidades definidos en el LVM:

monstruosoft@PC:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               monstruosoft-PC-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               9.30 GiB
  PE Size               4.00 MiB
  Total PE              2380
  Alloc PE / Size       2380 / 9.30 GiB
  Free  PE / Size       0 / 0   
  VG UUID               wPJi8H-28uZ-SkjL-m8Yk-Km0D-FU8l-1I9Y2i

Como podemos ver, en este caso sólo hay un grupo de unidades definido: monstruosoft-PC-vg. Este es el grupo al cual agregaremos la unidad física y para ello usamos el comando vgextend:

monstruosoft@PC:~$ sudo vgextend monstruosoft-PC-vg /dev/sdc5
  Volume group "monstruosoft-PC-vg" successfully extended
monstruosoft@PC:~$ sudo vgdisplay 
  --- Volume group ---
  VG Name               monstruosoft-PC-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               58.12 GiB
  PE Size               4.00 MiB
  Total PE              14879
  Alloc PE / Size       2380 / 9.30 GiB
  Free  PE / Size       12499 / 48.82 GiB
  VG UUID               wPJi8H-28uZ-SkjL-m8Yk-Km0D-FU8l-1I9Y2i

Ahora el tamaño total del grupo de unidades ha aumentado de 9.30 GB a 58.12 GB y el espacio libre (sin utilizar) en el grupo de unidades ha aumentado de 0 (no había más espacio disponible en el grupo de unidades para ser asignado a una unidad lógica) a 48.12 GB disponibles para ser asginados a una unidad lógica.

Para asignar el nuevo espacio disponible en el grupo de unidades a una unidad lógica, primero debemos ver cuales son las unidades lógicas definidas en el LVM con el comando lvdisplay:

monstruosoft@PC:~$ sudo lvdisplay 
  --- Logical volume ---
  LV Path                /dev/monstruosoft-PC-vg/root
  LV Name                root
  VG Name                monstruosoft-PC-vg
  LV UUID                DJN7Nw-n2dU-ngt8-hJ83-V1r6-v7iv-N61ias
  LV Write Access        read/write
  LV Creation host, time PC, 2015-09-29 07:22:28 -0500
  LV Status              available
  # open                 1
  LV Size                8.87 GiB
  Current LE             2270
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1
   
  --- Logical volume ---
  LV Path                /dev/monstruosoft-PC-vg/swap_1
  LV Name                swap_1
  VG Name                monstruosoft-PC-vg
  LV UUID                FV88Um-nhGG-xas2-Ur6f-y237-Mjrg-s873ZI
  LV Write Access        read/write
  LV Creation host, time PC, 2015-09-29 07:22:28 -0500
  LV Status              available
  # open                 2
  LV Size                440.00 MiB
  Current LE             110
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2

Hay dos unidades lógicas definidas: root y swap_1. Obviamente en este caso queremos agregar a la unidad lógica root el espacio extra que hemos definido y para ello usamos el comando lvextend:

monstruosoft@PC:~$ sudo lvextend -r -l +100%FREE /dev/monstruosoft-PC-vg/root
  Size of logical volume monstruosoft-PC-vg/root changed from 8.87 GiB (2270 extents) to 57.69 GiB (14769 extents).
  Logical volume root successfully resized
resize2fs 1.42.12 (29-Aug-2014)
El sistema de ficheros de /dev/mapper/monstruosoft--PC--vg-root está montado en /; hace falta cambiar el tamaño en línea
old_desc_blocks = 1, new_desc_blocks = 4
The filesystem on /dev/mapper/monstruosoft--PC--vg-root is now 15123456 (4k) blocks long.

monstruosoft@PC:~$ sudo lvdisplay 
  --- Logical volume ---
  LV Path                /dev/monstruosoft-PC-vg/root
  LV Name                root
  VG Name                monstruosoft-PC-vg
  LV UUID                DJN7Nw-n2dU-ngt8-hJ83-V1r6-v7iv-N61ias
  LV Write Access        read/write
  LV Creation host, time PC, 2015-09-29 07:22:28 -0500
  LV Status              available
  # open                 1
  LV Size                57.69 GiB
  Current LE             14769
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1
   
  --- Logical volume ---
  LV Path                /dev/monstruosoft-PC-vg/swap_1
  LV Name                swap_1
  VG Name                monstruosoft-PC-vg
  LV UUID                FV88Um-nhGG-xas2-Ur6f-y237-Mjrg-s873ZI
  LV Write Access        read/write
  LV Creation host, time PC, 2015-09-29 07:22:28 -0500
  LV Status              available
  # open                 2
  LV Size                440.00 MiB
  Current LE             110
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2

Como podemos ver, el tamaño de la unidad lógica de nuestro sistema de archivos ha cambiado de tamaño exitosamente de 8.87 GB a 57.69 GB, lo cual podemos verificar al correr nuevamente el comando df como lo hicimos antes de comenzar:

monstruosoft@PC:~$ df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/dm-1         57G   8.1G   47G  15% /
udev              10M      0   10M   0% /dev
tmpfs            779M   9.7M  769M   2% /run
tmpfs            2.0G    68K  2.0G   1% /dev/shm
tmpfs            5.0M   4.0K  5.0M   1% /run/lock
tmpfs            2.0G      0  2.0G   0% /sys/fs/cgroup
/dev/sdb1        236M    34M  190M  16% /boot
tmpfs            390M    12K  390M   1% /run/user/1000

Ahora nuestro sistema de archivos tiene espacio libre una vez más :D.

Importante: Si agregas una partición encriptada al volumen lógico del sistema (root), debes asegurarte de hacer que dicha partición sea visible al LVM al arrancar, de lo contrario podrías experimentar problemas de arranque la próxima vez que inicies tu PC. Para hacer visible al LVM la partición encriptada durante el arranque, es necesario actualizar la imagen de arranque con el comando update-initramfs; para ello primero debemos asegurarnos de que el programa de arranque pueda desbloquear la partición encriptada editando el archivo /etc/crypttab que debe contener una lista de todas las particiones LUKS que contengan particiones encriptadas que deban estar disponibles durante el arranque; un ejemplo del contenido del archivo /etc/crypttab es el siguiente:

sda5_crypt UUID=68aa53c9-49f7-4249-a304-2763578f754d none luks
sdc5_crypt UUID=afcb7264-dafd-456a-aeb7-9357249875f1 none luks

El UUID de cada dispositivo lo puedes encontrar ejecutando como root el comando lsblk:

monstruosoft@PC:~$ sudo lsblk -o name,uuid,mountpoint
NAME           UUID                                   MOUNTPOINT
sda                                                   
├─sda1         819d00dc-1976-4ab1-83fe-52872fa7b7b7   /boot
├─sda2                                                
└─sda5         68aa53c9-49f7-4249-a304-2763578f754d   
  └─sda5_crypt 2LXreV-peu4-5Qfd-K6vD-9g5W-1b0J-1oFht6 
    ├─monstruosoft--PC--vg-root
               9f6aa1bc-9a92-5bae-7465-5874fa4355f4   /
    └─monstruosoft--PC--vg-swap_1
               b58013af-7ff3-4582-6543-ab83afea5b96   [SWAP]
sdc                                                   
├─sdc2                                                
└─sdc5         afcb7264-dafd-456a-aeb7-9357249875f1   
  └─sdc5_crypt NMrju4-75ym-3v57-V015-bmjZ-Pkuz-rl98yz 
    └─monstruosoft--PC--vg-root
               9f6aa1bc-9a92-5bae-7465-5874fa4355f4   /
sr0

Como puedes ver, el UUID que debes agregar al archivo /etc/crypttab es el de la partición física que contiene la partición encriptada para que ésta pueda ser desbloqueada durante el arranque. Una vez que has editado el archivo /etc/crypttab puedes ejecutar el comando update-initramfs para actualizar la imagen de arranque para que tu PC pueda desbloquear las particiones encriptadas durante el arranque y pueda arrancar normalmente:

monstruosoft@PC:~$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s