Yo he descubierto que son las cosas pequeñas de las acciones diarias de las personas ordinarias lo que mantiene a raya a la oscuridad. Actos simples de amabilidad y amor.
Gandalf en El Hobbit de J.R.R. Tolkien
Anteriormente había publicado, a manera de acordeón, una guía de como manejar los volúmenes lógicos en AIX; ahora toca turno de realizar el mismo ejercicio sobre Linux.
La administración de los volúmenes lógicos en Linux tiene conceptos similares a los conceptos vistos en el post de AIX, basados en el siguiente diagrama tendremos:
Physical Volumes (PV): Elemento físico del arreglo, pueden ser particiones de discos físicos, primarias o extendidas, o incluso discos completos; internos o externos, abriendo la posibilidad a dispositivos de almacenamiento externo de alto desempeño, como lo son los discos proporcionados por un arreglo de discos de un storage de fibra (fibre channel)
Volume Group (VG): Conjunto de volúmenes físicos (PV’s) para proporcionar espacio de almacenamiento dinámico en ambos sentidos (ampliación y reducción). Además de ofrecer la posibilidad de configuración de alta disponibilidad (LVM HA – clusterizado)
Logical Volumes (LV): Espacio de almacenamiento, equivalente a una partición, con las misma naturaleza dinámica del volume group.
FileSystems: Espacio de almacenamiento asociado a un punto de montaje para el resguardo de archivos.
Redimensionar VG root
Uno de los primeros casos con los que nos encontramos al recibir una asignación de un sistema Linux, es tener un servidor sin un particionamiento adecuado para administrarlo, tal como:
[root@fedora20 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-root 11G 1.8G 7.8G 19% / devtmpfs 994M 0 994M 0% /dev tmpfs 1002M 0 1002M 0% /dev/shm tmpfs 1002M 472K 1001M 1% /run tmpfs 1002M 0 1002M 0% /sys/fs/cgroup tmpfs 1002M 4.0K 1002M 1% /tmp /dev/vda1 477M 75M 374M 17% /boot [root@fedora20 ~]# vgs VG #PV #LV #SN Attr VSize VFree fedora 1 2 0 wz--n- 11.51g 0 [root@fedora20 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root fedora -wi-ao---- 10.31g swap fedora -wi-ao---- 1.20g [root@fedora20 ~]#
Como podemos observar, se generó un sólo logical volume dentro del volume group, el cual ocupa todo el espacio disponible, si por ejemplo, los logs (como /var/log/messages ó /var/log/httpd/error.log) crecieran más allá de lo normal, podrían ocasionar una caída de nuestro equipo.
Para solucionarlo es necesario realizar un procedimiento con un disco de rescate, ya que no es posible realizarlo con el sistema ejecutándose de manera normal. Utilizaremos el disco de rescate (rhel-server-7.0-x86_64-boot.iso) de RHEL7, que podemos bajar de:
http://ftp.redhat.com/redhat/rhel/rc/7/Server/x86_64/iso/
Reiniciamos el server con el disco de rescate y booteamos sin montar el sistema de archivos que encuentre:
Cuando estamos dentro del ambiente de rescate, activamos el volumen que contiene nuestro LV root, ejecutando:
sh-4.2# lvmdiskscan /dev/loop0 [ 259.58 MiB] /dev/mapper/live-rw [ 2.00 GiB] /dev/loop1 [ 2.00 GiB] /dev/vda1 [ 500.00 MiB] /dev/mapper/live-base [ 2.00 GiB] /dev/loop2 [ 512.00 MiB] /dev/vda2 [ 11.51 GiB] LVM physical volume /dev/fedora/swap [ 1.02 GiB] /dev/fedora/root [ 10.31 GiB] 4 disks 4 partitions 0 LVM physical volume whole disks 1 LVM physical volume sh-4.2# sh-4.2# vgscan Reading all physical volumes. This may take a while... Found volume group "fedora" using metadata type lvm2 sh-4.2# sh-4.2# vgchange -ay fedora 2 logical volume(s) in volume group "fedora" now active sh-4.2# sh-4.2# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root fedora -wi-a---- 10.31g swap fedora -wi-a---- 1.20g sh-4.2#
Con el LV root activo, realizamos un fsck para validar su integridad:
sh-4.2# e2fsck -y /dev/fedora/root e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/fedora/root: clean, 22423/675952 files (0.1% non-contiguos), 260495/27022336 blocks sh-4.2#
Después de esto, procedemos a reducir el LV root:
sh-4.2# resize2fs /dev/fedora/root 3G Resizing the filesystem on /dev/fedora/root to 786432 (4k) blocks. The filesystem /dev/fedora/root is now 786432 blocks long. sh-4.2# sh-4.2# lvreduce -L 3G /dev/fedora/root WARNING: Reducing active logical volume to 3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce root? [y/n]: y Reducing logical volume root to 3.00 GiB Logical volume root successfully resized sh-4.2# sh-4.2# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root fedora -wi-a---- 3.00g swap fedora -wi-a---- 1.20g sh-4.2# sh-4.2# exit
Al reiniciar, encontramos modificado nuestro particionamiento:
[root@fedora20 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-root2.9G 1.8G 1.1G 54% / devtmpfs 994M 0 994M 0% /dev tmpfs 1002M 0 1002M 0% /dev/shm tmpfs 1002M 472K 1001M 1% /run tmpfs 1002M 0 1002M 0% /sys/fs/cgroup tmpfs 1002M 4.0K 1002M 1% /tmp /dev/vda1 477M 75M 374M 17% /boot [root@fedora20 ~]# vgs VG #PV #LV #SN Attr VSize VFree fedora 1 2 0 wz--n- 11.51g 7.31g [root@fedora20 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert root fedora -wi-ao---- 3.0g swap fedora -wi-ao---- 1.20g [root@fedora20 ~]#
Operaciones básicas
Ya con espacio disponible podemos crear un particionamiento que consideremos conveniente para nuestro sistema. Por ejemplo, separar los logs en su propio filesystem; para ello, primeramente, validamos el espacio utilizado actualmente:
[root@fedora20 ~]# du -sh /var/log 10M /var/log [root@fedora20 ~]#
Considerando un crecimiento diez veces su tamaño actual, creamos el volumen correspondiente y lo formateamos como ext4:
[root@fedora20 ~]# lvcreate -L+100M -n logs fedora Logical volume "logs" created [root@fedora20 ~]# [root@fedora20 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert logs fedora -wi-a----- 100.00m root fedora -wi-ao---- 3.00g swap fedora -wi-ao---- 1.20g [root@fedora20 ~]# [root@fedora20 ~]# mkfs.ext4 /dev/fedora/logs mke2fs 1.42.8 (20-Jun-2013) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25688 inodes, 102400 blocks 5120 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67371008 13 block groups 8192 blocks per group, 8192 fragments per group 1976 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done [root@fedora20 ~]#
Montamos temporalmente el LV en /mnt, para copiar el contenido de /var/log en él:
[root@fedora20 ~]# mount /dev/fedora/logs /mnt [root@fedora20 ~]# [root@fedora20 ~]# df -h /mnt Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-logs 93M 1.6M 85M 2% /mnt [root@fedora20 ~]# [root@fedora20 ~]# cp -pRf /var/log/* /mnt/ [root@fedora20 ~]# ls -l /mnt total 64 drwxr-xr-x. 2 root root 1024 Jun 5 01:04 anaconda drwxr-x---. 2 root root 1024 Jun 5 01:13 audit -rw-r--r--. 1 root root 6283 Jun 5 08:52 boot.log -rw-------. 1 root utmp 384 Jun 5 01:29 btmp drwxr-sr-x+ 3 root systemd-journal 1024 Jun 5 01:13 journal -rw-r--r--. 1 root root 292000 Jun 5 08:52 lastlog drwx------. 2 root root 12288 Jun 5 09:05 lost+found drwx------. 2 root root 1024 Aug 1 2013 ppp -rw-r--r--. 1 root root 1040 Apr 7 21:10 README -rw-------. 1 root root 0 Jun 5 00:55 tallylog -rw-rw-r--. 1 root utmp 13440 Jun 5 08:52 wtmp [root@fedora20 ~]#
Configuramos el LV en el /etc/fstab de manera permanente y lo montamos:
[root@fedora20 ~]# vi /etc/fstab [root@fedora20 ~]# [root@fedora20 ~]# tail -1 /etc/fstab /dev/fedora/logs /var/log ext4 defaults 0 0 [root@fedora20 ~]# [root@fedora20 ~]# mount /var/log [root@fedora20 ~]# [root@fedora20 ~]# df -h /var/log Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-logs 93M 12M 75M 14% /var/log [root@fedora20 ~]#
Para evitar que algún log haya detenido su escritura, los rotamos, reiniciamos journald y validamos que la bitácora esté activa:
[root@fedora20 ~]# logrotate /etc/logrotate.conf [root@fedora20 ~]# [root@fedora20 ~]# systemctl restart systemd-journald.service [root@fedora20 ~]# [root@fedora20 ~]# date Thu Jun 5 09:25:32 CDT 2014 [root@fedora20 ~]# journalctl -f -- Logs begin at Thu 2014-06-05 01:13:05 CDT. -- Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1096]: Journal stopped Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M). Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M). Jun 05 09:23:56 fedora20.example-rh.com systemd-journald[1096]: Received SIGTERM Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Starting Journal Service... Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Started Journal Service. Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Journal started Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Starting Trigger Flushing of Journal to Persistent Storage... Jun 05 09:23:56 fedora20.example-rh.com systemd[1]: Started Trigger Flushing of Journal to Persistent Storage. Jun 05 09:23:56 fedora20.example-rh.com systemd-journal[1103]: Runtime journal is using 8.0M (max allowed 100.1M, trying to leave 150.1M free of 992.7M available → current limit 100.1M). ^C [root@fedora20 ~]#
Si necesitaramos más espacio en el filesystem, primeramente expandimos el LV y después ejecutamos el resize (contrario a como lo reducimos):
[root@fedora20 ~]# lvextend -L+100M /dev/fedora/logs Extending logical volume logs to 200.00 MiB Logical volume logs successfully resized [root@fedora20 ~]# [root@fedora20 ~]# resize2fs /dev/fedora/logs resize2fs 1.42.8 (20-Jun-2013) Filesystem at /dev/fedora/logs is mounted on /mnt; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/fedora/logs is now 204800 blocks long.
[root@fedora20 ~]# [root@fedora20 ~]# df -h /var/log/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/fedora-logs 190M 12M 168M 7% /var/log [root@fedora20 ~]#
En caso de que necesitemos un punto de retorno, creamos un snapshot de nuestro LV:
[root@fedora20 ~]# lvcreate -L 15M -s -n logs5jun /dev/fedora/logs Rounding up size to full physical extent 16.00 MiB Logical volume "logs5jun" created [root@fedora20 ~]#
Si requerimos restaurar a partir del snapshot, ejecutamos:
[root@fedora20 ~]# touch /var/log/test [root@fedora20 ~]# [root@fedora20 ~]# ls -l /var/log/test -rw-r--r--. 1 root root 0 Jun 5 09:54 /var/log/test [root@fedora20 ~]# [root@fedora20 ~]# lvconvert --merge /dev/fedora/logs5jun Logical volume fedora/logs contains a filesystem in use. Can't merge over open origin volume. Merging of snapshot logs5jun will start next activation. [root@fedora20 ~]#
Al reiniciar se habrá restaurado nuestro LV:
[root@fedora20 ~]# ls -l /var/log/test ls: cannot access /var/log/test: No such file or directory [root@fedora20 ~]#
En los próximos posts veremos como configurar un LV en HA para utilizarlo en un clúster.
Espero les sirva…