Ir al contenido

Entradas etiquetadas como ‘debian’

16
jun

LVM (parte 2): crear y expandir volúmenes

Luego de haber tenido un post introductorio a LVM, explicaré en esta oportunidad cómo:

  • Crear volúmenes físicos, grupos de volúmenes y volúmenes lógicos.
  • Redimensionar los volúmenes.
  • Eliminar volúmenes.

Preparándose para utilizar LVM

Para este tutorial utilizaré Debian. El mismo se puede aplicar a cualquier Linux, aunque daré ciertas cosas por supuestas además de mostrar algunos comandos específicos de los sistemas Debian like.

Antes que nada, será necesario contar con el soporte para LVM. Para ello:

testing:~# aptitude install lvm2

Creación de un volumen lógico

Para crear un volumen lógico es necesario primero crear los volúmenes físicos que se necesitarán y luego el grupo de volúmenes. Finalmente se podrá crear el volumen lógico que se busca y asignar un sistema de archivos al mismo. Para este paso vamos a suponer que tenemos un disco rígido nuevo, sin particionar. El disco en cuestión se identifica en el sistema como /dev/hdb.

Crear el volumen físico.

testing:~# pvcreate /dev/hdb
  Physical volume "/dev/hdb" successfully created

Crear el grupo de volúmenes.

testing:~# vgcreate testing /dev/hdb
  Volume group "testing" successfully created

Crear un volumen lógico.

testing:~# lvcreate testing -L 1.99G -n storage
  Rounding up size to full physical extent 1.99 GB
  Logical volume "storage" created

testing:~# ls -l /dev/testing/storage
lrwxrwxrwx 1 root root 27 2010-06-10 16:01 /dev/testing/storage -> /dev/mapper/testing-storage

Crear el sistema de archivos en el volumen lógico.

testing:~# mkfs.ext3 /dev/mapper/testing-storage
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
130560 inodes, 522240 blocks
26112 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Agregar el nuevo volumen al FSTAB.

testing:~# vi /etc/fstab
/dev/mapper/testing-storage /storage ext3 defaults 0 2

Montar el nuevo sistema de archivos y probarlo.

testing:~# mkdir /storage
testing:~# mount /storage/
testing:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testing-storage
                      2.0G   36M  1.9G   2% /storage
testing:~# echo "prueba" > /storage/archivo.txt
testing:~# cat /storage/archivo.txt
prueba

Redimensionar un volumen lógico

Hasta aquí se ha visto cómo crear volúmenes físicos, grupos de volúmenes y volúmenes lógicos. A su vez, se mostró cómo utilizar el volumen creado. En este punto se verá el tema de redimensionar el volumen lógico recién creado, primero agrandando su tamaño y luego achicándolo (tema de un próximo post). Es de destacar que el primero de los redimensionamientos será llevado a cabo sin desmontar el volumen lógico.

Aumentar el tamaño

En este punto se considerará que se tiene un disco rígido adicional identificado como /dev/hdc y que el mismo tiene dos particiones, /dev/hdc1 y /dev/hdc2. Se utilizará la primera de ellas para extender el volumen creado en los pasos anteriores.

Crear volumen físico.

testing:~# pvcreate /dev/hdc1
  Physical volume "/dev/hdc1" successfully created

Extender el grupo de volúmenes.

En este paso se le indica al grupo de volúmenes testing que se le agregará un nuevo volumen físico.

testing:~# vgextend testing /dev/hdc1
  Volume group "testing" successfully extended

Extender el volumen lógico.

El siguiente comando toma el volumen storage ya existente y le agrega 0.95G de tamaño, tomados a partir de la integración del nuevo volumen físico.

testing:~# lvextend -L +0.95G /dev/testing/storage
  Rounding up size to full physical extent 976.00 MB
  Extending logical volume storage to 2.95 GB
  Logical volume storage successfully resized

Redimensionar el sistema de archivos.

Hasta aquí está todo bien, sin embargo aún nuestro volumen no ha crecido en tamaño, según muestra la salida del comando df.

testing:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testing-storage
                      2.0G   36M  1.9G   2% /storage

Lo que ha ocurrido es que, si bien el volumen ya cuenta con una mayor capacidad de almacenamiento, el sistema de archivos que se creó está limitando el tamaño del mismo. Por ello, es necesario extender el sistema de archivos existente. Este paso se realizará on-line, es decir, sin desmontar el volumen.

testing:~# resize2fs /dev/testing/storage
resize2fs 1.41.3 (12-Oct-2008)
Filesystem at /dev/testing/storage is mounted on /storage; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testing/storage to 772096 (4k) blocks.
The filesystem on /dev/testing/storage is now 772096 blocks long.

testing:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testing-storage
                      2.9G   36M  2.8G   2% /storage

testing:~# cat /storage/archivo.txt
prueba

Como puede verse, el sistema de archivos ha sido extendido sin desmontar el volumen y los datos que se tenían fueron conservados.

Herramientas informativas

Es posible ver el estado y detalles de los diferentes volúmenes físicos, grupos de volúmenes y volúmenes lógicos mediante tres sencillos comandos que se muestran a continuación: pvdisplay, vgdisplay y lvdisplay.

testing:/home/leandro# pvdisplay
  --- Physical volume ---
  PV Name               /dev/hdb
  VG Name               testing
  PV Size               2.00 GB / not usable 4.00 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               pE7qSU-COhd-j6a4-YnWg-1mR7-xZ48-XDstZk

  --- Physical volume ---
  PV Name               /dev/hdc1
  VG Name               testing
  PV Size               976.96 MB / not usable 984.50 KB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              244
  Free PE               1
  Allocated PE          243
  PV UUID               rmvKFh-0hGJ-mBby-zPjT-eyvf-2CrP-TjTKG3

testing:/home/leandro# vgdisplay
  --- Volume group ---
  VG Name               testing
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.95 GB
  PE Size               4.00 MB
  Total PE              755
  Alloc PE / Size       754 / 2.95 GB
  Free  PE / Size       1 / 4.00 MB
  VG UUID               epQoNY-6JWP-1vUX-IZm0-LRwo-4fR4-AEEo1p

testing:/home/leandro# lvdisplay
  --- Logical volume ---
  LV Name                /dev/testing/storage
  VG Name                testing
  LV UUID                ywXZGl-kafG-CoHV-3jGt-wt1S-rnlY-IBIgF8
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                2.95 GB
  Current LE             754
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2

Para la próxima

En otro nuevo post se mostrará cómo achicar un volumen lógico y cómo eliminar volúmenes lógicos, grupos de volúmenes y volúmenes físicos.

14
jun

Proxmox: instalación, clustering y migración en vivo

En este post explicaré cómo instalar Proxmox con un particionamiento personalizado y cómo luego formar un cluster con otro equipo con Proxmox. Finalmente, daré una pauta de cómo lograr hacer la migración en vivo de máquinas virtuales.

En mi caso, cuento con dos servidores que soportan virtualización por hardware y he decidido utilizar Proxmox como plataforma de virtualización por varios motivos:

  • Es software libre.
  • Es gratis.
  • Permite virtualizar con KVM y OpenVZ.
  • Tiene una interfaz web muy sencilla de utilizar
  • Basado en Debian: se lo puede administrar por SSH e instalar cualquier paquete compilado para Debian.
  • Soporta varias funcionalidades avanzadas sin adquirir ninguna licencia adicional:
    • Migración en vivo.
    • Clustering de servidores.
    • Backups automáticos de las VMs.
    • Posibilidad de conectar a un NAS/SAN con NFS, iSCSI.

Instalación

La instalación de Proxmox es sumamente sencilla dado que se realiza en pocos pasos mediante una interfaz gráfica muy intuitiva. No obstante, cabe destacar que por defecto no se pregunta nada del esquema de particionamiento que utilizará. Desde mi punto de vista, la forma en que se particiona por defecto resulta muy ineficiente, dado que se asigna mucho espacio al directorio raíz y a la swap, espacio que normalmente no se utiliza.

No obstante, como el particionamiento se lleva a cabo utilizando LVM, es posible luego redimensionar esas particiones; sin embargo, es más sencillo escoger el tamaño al momento de la instalación para luego no tener que hacer ningún cambio. Para ello, cuando Proxmox bootea desde el CD la primera vez se queda esperando con un prompt que nos permite pasarle algún parámetro. En este caso, le indicaremos que deseamos un disco raíz de 20GB y una swap de 4GB, de la siguiente manera:

boot: linux maxroot=20 swapsize=4

Una vez finalizado lo anterior se prosigue la instalación guiada normalmente.

Armar el cluster

Contar con un cluster de servidores Proxmox es sumamente útil dado que posibilita migrar máquinas virtuales entre cualquier servidor del cluster y permite administrar todos los servidores Proxmox desde una única interfaz, ubicada en el master.

Por fortuna, crear el cluster con Proxmox es totalmente trivial y se realiza con los siguientes pasos (tener en cuenta que todos los equipos que formen parte del cluster deben tener nombres diferentes):

En el nodo que será el master:

dell:~# pveca -c
cluster master successfully created

dell:~# pveca -l
CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---DISK
 1 : 10.31.1.67      M     A     1 day 05:11   0.08    30%     3%

Luego, el segundo nodo, que será el esclavo:

virtua:~# pveca -l
local node '10.31.1.60' not part of cluster

virtua:~# pveca -a -h 10.31.1.67
cluster node successfully created

virtua:~# pveca -l
CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---DISK
 1 : 10.31.1.67      M     A     1 day 05:13   0.01    30%     3%
 2 : 10.31.1.60      N     A           01:57   0.00    11%     2%

Con lo anterior ya se conformó el cluster entre ambos equipos. Si se accede por web a https://10.31.1.67 se podrá ver el estado de ambos servidores así como las máquinas virtuales con las que cuentan los mismos (en este caso ninguna dado que aún no hemos creado). Lógicamente, desde dicha interfaz podrán apagarse, prenderse, reiniciarse y modificarse las distintas máquins virtuales.

Migración en vivo

Para la migración en vivo se necesita utilizar un servidor NAS/SAN en el que se alojen los discos de las máquinas virtuales. El motivo de esto es que para lograr la migración en vivo, lo único que se hace es mover la información que la máquina a ser migrada tiene en memoria, de un equipo al otro. Como el disco es compartido por estar en un servidor de almacenamiento no cambia nada allí; además la migración gracias a esto se hace muy rápido.

Como en este caso sólo se tienen dos servidores, se utilizará el nodo master como servidor de almacenamiento. Para ello, se creará un directorio que luego será exportado por NFS y agregado a la sección “Storage”. Lo primero se realiza de la siguiente forma:

dell:~# aptitude install nfs-kernel-server
dell:~# mkdir /var/lib/vz/storage
dell:~# vi /etc/exports
/var/lib/vz/storage     10.31.1.60(rw,no_root_squash) 10.31.1.67(rw,no_root_squash)
dell:~# /etc/init.d/nfs-kernel-server restart

Listo, sólo resta agregar el nuevo dispositivo de almacenamiento por medio de la interfaz web. Luego, cuando se cree una máquina virtual y un disco para la misma se debe guardar este último en el almacenamiento de red. Teniendo esto hecho, el paso de migrar las máquinas virtuales en vivo es tan sencillo que ni vale la pena que lo explique aquí.

11
jun

LVM2: administración de volúmenes lógicos en Linux

Introducción

LVM2 es un administrador de volúmenes lógicos desarrollado para el kernel de Linux, compatible con su predecesor LVM1. En la actualidad, LVM está disponible en la mayoría de los sistemas Linux para utilizarlo al momento de la instalación. De hecho, sistemas como Fedora utilizan LVM si se los particiona como lo sugiere el instalador por defecto.

La primer ventaja fundamental de LVM es que nos quita el inconveniente de dimensionar exactamente las particiones tal cuál las necesitaremos, encontrándonos luego con que el esquema de particionamiento escogido no es el más adecuado. Este caso es muy fácil verlo con un ejemplo.

Se tiene un disco de 40G (pequeño para los tamaños actuales, lo reconozco, pero sirve para el ejemplo). Se desea instalar Linux allí entonces se decide particionarlo de la siguiente manera:

/boot          200M
/                4G
swap             1G
/home           34G

El problema al que nos enfrentamos en este caso (me ha ocurrido en alguna oportunidad) es quedarnos sin espacio en alguna partición y tener lugar de sobra en otra. Por ejemplo, supongamos que se llena el disco raíz y sin embargo tenemos aún 14G libres en /home. Eso representa una situación donde se hace un uso ineficiente del espacio en disco, además de un problema. La solución más obvia en este caso es hacer algún link simbólico apuntando a algún lugar de /home, pero es una solución bastante mala.

Con LVM, la solución a este problema es trivial, dado que se podría simplemente achicar la partición que contiene /home y aumentar luego el espacio asignado al directorio raíz.

Características de LVM2

LVM2 cuenta, básicamente, con las siguientes funcionalidades.

  • Redimensión de grupos de volúmenes y volúmenes lógicos en línea.
  • Crear instantáneas (snapshots) de lecturea/escritura del sistema de archivos.
  • Constituir los volúmenes lógicos separados en los diferentes volúmenes físicos, de manera similar que RAID 0.
  • Mover los volúmenes lógicos entre los diferentes volúmenes físicos.

Conceptos básicos de LVM

Para entender cómo funciona LVM es necesario conocer algunos conceptos elementales, que son:

  • Volumen físico (PV): un PV es un disco rígido, una partición o un RAID.
  • Volumen lógico (LV): un LV es el equivalente a una partición tradicional.
  • Grupo de volúmenes (VG): un grupo de volúmenes reúne uno o más PVs. Los PVs pueden comenzar a utilizarse en LVM recién cuando pasan a formar parte de un VG.
  • Physical extent (PE): un PE es una porción de cada volumen físico, de tamaño fijo. Un volumen físico se divide en mútiples PEs del mismo tamaño.
  • Logical extent (LE): un LE es una porción de cada volumen lógico, de tamaño fijo. Un volumen lógico se divide en mútiples LEs del mismo tamaño.
  • Device mapper: es un framework genérico del kernel de Linux que permite realizar un mapeo de un dispositivo de bloques a otro. Es la herramienta fundamental en la que se basa LVM para hacer el mapeo de los dispositivos virtuales con los dispositivos físicos.

Conclusión

LVM es un sistema muy interesante para utilizar ya sea en sistemas pequeños como en sistemas con muchos discos y esquemas complejos de particionamiento. Por su flexibilidad y sus capacidades puede reducir mucho el trabajo de mantenimiento de los equipos y cualquier cambio a nivel de almacenamiento.

En un próximo post explicaré cómo trabajar con LVM, desde la creación de los PVs, VGs y LVs, cómo redimensionarlos y eliminarlos e, incluso, cómo trabajar con las instantáneas.

23
feb

Equivalencias entre DPKG/RPM y APT/YUM

Las distribuciones basadas en Red Hat usan rpm como el formato de sus paquetes binarios y rpm / yum para administrarlos. Por otro lado, las basadas en debian usan deb y dpkg / apt-get. En la siguiente tabla presento las equivalencias para los usuarios que estén acostumbrado a uno de ellos y se muevan al otro.

Comparación entre dpkg y rpm

DPKG RPM Descripción
dpkg -Gi paquete(s).deb rpm -Uvh packages(s).rpm Instalar/Upgradear archivo(s) del/de los paquete(s)
dpkg -r paquete rpm -e paquete Eliminar paquete
dpkg -l *palabra* rpm -qa *palabra* Mostrar todos los paquetes cuyo nombre contenga “palabra”
dpkg -l paquete rpm -q paquete Mostrar la versión del paquete instalada
dpkg -s paquete rpm -q -i paquete Mostrar todos los metadatos del paquete
dpkg -I paquete.deb rpm -q -i -p paquete.rpm Mostrar todos los metadatos de los archivos del paquete
dpkg -S /path/archivo rpm -q -f /path/archivo A que paquete pertenece el archivo
dpkg -L paquete rpm -q -l paquete Lista dónde se instalaron los archivos
dpkg -c paquete.deb rpm -q -l -p paquete.rpm Lista dónde los archivos serían instalados
dpkg -x paquete.deb cpio -id Extrae los archivos del paquete al directorio actual
dpkg –purge –dry-run paquete rpm -q –whatrequires paquete Lista los paquetes que requiere paquete (ver también whatrequires)

Comparación entre apt-get y yum

APT-GET YUM Descripción
apt-get dist-upgrade yum update [lista de paquetes] Upgradea todos los paquetes del sistema (en el caso de yum se puede especificar sólo algunos)
apt-get install yum install Instala la última versión del/de los paquete(s)
apt-get remove yum remove Elimina los paquetes del sistema
apt-cache list [lista de paquetes] yum list [lista de paquetes] Lista los paquetes disponibles en los repositorios

13
feb

Dpkg: el administrador de paquetes de Debian

Las diferentes distribuciones de Linux suelen incluir un software específico para administrar los paquetes del sistema. En el caso de Debian y sus derivados (como Ubuntu) se trata del popular apt-get y de dpkg. Este último se controla por medio de la línea de comandos o, incluso, utilizando interfaces gráficas. Nosotros veremos el primer caso.

Dpkg permite administrar, construir, instalar y remover paquetes del sistema. Para llevar a cabo su tarea mantiene cierta información sobre los paquetes disponibles que son su estado, el estado de selección y sus flags. En el caso de los estados pueden alterarse manualmente mediante un comando.

La tabla de paquetes que mantiene dpkg se vería como la siguiente:

PAQUETE 1 ESTADO ESTADO DE SELECCION FLAGS
PAQUETE 2 ESTADO ESTADO DE SELECCION FLAGS
PAQUETE … ESTADO ESTADO DE SELECCION FLAGS
PAQUETE N ESTADO ESTADO DE SELECCION FLAGS

El estado representa precisamente en qué estado se encuentra en el sistema. Algunos estados disponibles hasta la versión actual son:

installed Instalado.
not-installed No fue instalado.
config-files Sólo existe la configuración del paquete en el sistema.
unpacked Sólo ha sido desempaquetado pero no configurado.
half-installed La instalación había comenzado pero no fue completada por alguna razón.
half-configured Se desempaquetó y la configuración había empezado pero finalizó por alguna razón.
triggers-awaited Está esperando de alguna activación.
triggers-pending El paquete ha sido activado.

El estado de la selección representa la acción a realizar sobre el paquete en cuestión. Los mismos pueden ser:

install El paquete fue seleccionado para instalar.
hold Se marcó en espera y no va a ser manipulado por dpkg.
deinstall El paquete es seleccionado para su desinstalación aunque se mantendrán los archivos de configuración.
purge El paquete es seleccionado para su desinstalación, incluyendo sus archivos de configuración.

Los flags son banderas o etiquetas que avisan sobre el estado de un paquete. Por ejemplo, si el flag reinst-required está activado significa que el paquete necesita de una reinstalación.