• No results found

A Semantic Definition of Separate Type Checking in C ++ with

Después de tener los dispositivos físicos listos dentro de un VG, es hora de crear el dispositivo lógico para poder darle formato y montarlo como cualquier dispositivo tipo Bloques. El LV se podrá crear dependiendo de la cantidad de PE libres que tenga el VG.

Se crea un LV con el comando lvcreate. Un LV lleva un nombre, dispone de un tamaño

expresado en extensiones lógicas (LE) que corresponden en realidad a los PE dentro del LV.

root@sugeek:/home/soporte# lvcreate -n Datos1 -L 8g vg01 Logical volume “Datos1” created

El anterior comando me crea un LV usando como nombre con la opción n Datos1, y con el

tamaño opción L de 8 Gigabytes (Podemos definir megabytes con m, terabytes con t,

petabytes con p o exabytes con e) y va a pertenecer al Volumen Group vg01.

El sistema creara el dispositivo dentro de /dev/vg01/Datos1, a lo cual, como podemos observar el dispositivo se crea dentro de una carpeta que contiene el nombre del VG. Este a su ves es un enlace simbólico apuntando a /dev/mapper/vg01-Datos1.

Para ver las características de nuestro LV lo realizamos con el comando lvdisplay podemos usar las opciones -v (verbose) y -m (maps) para obtener información mas detallada sobre los bloques de PE y LE utilizados por el LV.

Using logical volume(s) on command line --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write

LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 0 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3 --- Segments --- Logical extent 0 to 2046: Type linear

Physical volume /dev/sdg1 Physical extents 0 to 2046

Luego para poder utilizar este LV, solo nos queda darle el formato adecuado para poderlo montar y darle el uso que deseemos o por el cual fue creado.

root@sugeek:/home# mkfs.ext4 /dev/vg01/Datos1 ; mount /dev/vg01/Datos1 /home/LVM/ Observemos que ya tenemos listo nuestro “Disco Duro”, si lo queremos permanente

recordemos usar su UUID y colocarlo en el archivo fstab.

root@sugeek:/home# df -h

S.ficheros Tamaño Usados Disp Uso% Montado en rootfs 5,0G 1,9G 2,9G 40% / udev 10M 0 10M 0% /dev tmpfs 101M 332K 100M 1% /run /dev/mapper/System-etc 5,0G 1,9G 2,9G 40% / tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 201M 0 201M 0% /run/shm /dev/sda1 184M 23M 152M 14% /boot /dev/mapper/System-home 5,0G 139M 4,6G 3% /home /dev/mapper/System-var 9,2G 343M 8,4G 4% /var /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM

Ampliar y Reducir un VG

Si tenemos un nuevo disco duro, y lo queremos agregar a un sistema LVM debemos de prepararlo y luego agregarlo a un VG para usarlo en un LV.

el VG vg01, y con el comando pvdisplay observamos que tenemos agregado el dispositivo RAID /dev/md126p1 para ser usado en cualquier VG.

Para ampliar un VG, utilizamos el comando vgextend que funciona de la misma manera

que vgcreate, indicando el VG al cual se le desea añadir el PV. Como se podrá observar el VG Size paso de 8GB a 23,98GB y además los valores del PE también aumentaron, el único que se mantiene el Alloc PE el cual posee el tamaño del actual LV llamado Datos1, y si vemos los PV asociados al VG, entroncamos el PV /dev/md126p1.

root@sugeek:/home/soporte# vgextend vg01 /dev/md126p1 Volume group "vg01" successfully extended

root@sugeek:/home/soporte# vgdisplay -v vg01 Using volume group(s) on command line Finding volume group "vg01"

--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 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 23,98 GiB PE Size 4,00 MiB Total PE 6139

Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 4092 / 15,98 GiB

VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write

LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1

--- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0 PV Name /dev/md126p1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL PV Status allocatable Total PE / Free PE 4092 / 4092

Para reducir un VG utilizamos el comando vgreduce, el cual se le indica el PV que se

desea retirar, pero antes de ello, el PV debe de estar libre, no debe estar montado o siendo utilizado por algún LV y observaremos como los valores del PE dentro del VG cambian y sus PV asociados.

root@sugeek:/home/soporte# vgreduce vg01 /dev/md126p1 && vgdisplay -v vg01 Removed "/dev/md126p1" from volume group "vg01"

Using volume group(s) on command line Finding volume group "vg01"

--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size 8,00 GiB PE Size 4,00 MiB Total PE 2047

Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 0 / 0 VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write

LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available

# open 1

Segments 1

Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0

Ampliar y Reducir un LV

Como ya tenemos un nuevo PV dentro del VG al cual hace parte el LV, solo queda asociarle el PV nuevo al LV, para ello utilizamos el comando lvextend el cual permite los parámetros -l (Numero de extensiones lógicas LE) o -L como para lvcreate. Luego precisamos el nuevo tamaño del LV o , si añadimos el prefijo +, el tamaño adicional que deseamos. También se puede precisar, como ultimo argumento, el nombre del PV el cual forzar la extensión del LV, esto ultimo solo sera posible si el PV tiene suficiente PE disponibles.

A continuación vamos a agregar 12GB al LV Datos1.

root@sugeek:/home/soporte# lvextend -L +12g /dev/vg01/Datos1 Extending logical volume Datos1 to 20,00 GiB

Logical volume Datos1 successfully resized

Ahora observamos como están distribuidos los PE dentro del LV. root@sugeek:/home/soporte# lvdisplay -vm /dev/vg01/Datos1 Using logical volume(s) on command line

--- Logical volume ---

LV Path /dev/vg01/Datos1 LV Name Datos1

VG Name vg01

LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write

LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 20,00 GiB Current LE 5119 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1

--- Segments ---

Type linear

Physical volume /dev/sdg1 Physical extents 0 to 2046

Logical extent 2047 to 5118: Type linear

Physical volume /dev/md126p1 Physical extents 0 to 3071

Con el comando vgdisplay notaremos como el Free PE se ha reducido y el AllocPE a

aumentado. root@sugeek:/home/soporte# vgdisplay vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 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 23,98 GiB PE Size 4,00 MiB Total PE 6139

Alloc PE / Size 5119 / 20,00 GiB Free PE / Size 1020 / 3,98 GiB

VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA

Ahora lo que queda es asociar dicho incremento a nuestra “Partición” ya que aun no se a agregado dicho aumento.

root@sugeek:/home/soporte# df -h /home/LVM

S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM

Para ello utilizamos el comando resize2fs el cual permite reducir y aumentar un sistema

de archivos. El primer argumento es el sistema de archivos, el segundo se indica el tamaño con un sufijo como lo podría ser K (KB), M (MB), G (GB). Si el sufijo, se indica el número de bloques del sistema de archivos. Si no se define un tamaño, este de forma automática tomara el tamaño total que este asociado al LV.

Se debe de tener en cuenta que para ampliar un LV se podrá realizar en caliente, lo que quiere decir que no necesitamos desmontar el LV, en cambio cuando se requiere reducir

root@sugeek:/home/soporte# df -h /home/LVM && df -h /home/LVM S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM root@debian:/home/soporte# resize2fs /dev/vg01/Datos1 resize2fs 1.42.5 (29-Jul-2012)

Filesystem at /dev/vg01/Datos1 is mounted on /home/LVM; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2

Performing an on-line resize of /dev/vg01/Datos1 to 5241856 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 5241856 blocks long.

S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 20G 150M 19G 1% /home/LVM

Como hemos notado el LV paso de 8GB a 20GB, con las 12GB que le hemos agregado. Nunca debemos de reducir por debajo del espacio real utilizado por los datos contenidos en el LV.

Ahora queda reducir nuestro LV, vamos reducirlo a 8GB, para ello se recomienda seguir los siguientes pasos.

• Desmontar el sistema de Archivos a reducir

• Comprobar el sistemas de archivos del LV que vamos a reducir con fsck

• Reducir del LV lógico con resize2fs

• Reducir el LV con el comando lvreduce

root@sugeek:/home/soporte# umount /home/LVM/ && fsck -f /dev/vg01/Datos1 fsck de util-linux 2.20.1

e2fsck 1.42.5 (29-Jul-2012)

Paso 1: Verificando nodos-i, bloques y tamaños Paso 2: Verificando la estructura de directorios Paso 3: Revisando la conectividad de directorios Paso 4: Revisando las cuentas de referencia

Paso 5: Revisando el resumen de información de grupos

/dev/mapper/vg01-Datos1: 11/1310720 files (0.0% non-contiguous), 120657/5241856 blocks

Ya lo hemos desmontado y comprobado, ahora sigue el turno de resize2fs.

root@sugeek:/home/soporte# resize2fs /dev/vg01/Datos1 10G resize2fs 1.42.5 (29-Jul-2012)

Resizing the filesystem on /dev/vg01/Datos1 to 2621440 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 2621440 blocks long.

Y ahora a reducir el LV con lvreduce, debemos de tener cuidado, si colocamos un valor

diferente al cual va a quedar el LV puede destruir los datos, en este no se puede definir el

PV como con lvextend. A la pregunta que arroja le respondemos que si (y), por ultimo

montamos nuevamente el sistema de archivo y verificamos si efectivamente quedo en 10GB.

root@sugeek:/# lvreduce -L 8G /dev/vg01/Datos1

WARNING: Reducing active logical volume to 8,00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce Datos1? [y/n]: y Reducing logical volume Datos1 to 8,00 GiB Logical volume Datos1 successfully resized

root@sugeek:/home/soporte# mount /dev/vg01/Datos1 /home/LVM/ root@sugeek:/home/soporte# df -h /home/LVM

S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 8G 146M 7,8G 2% /home/LVM

Mover el contenido de un PV a otro PV

En entornos empresariales (Cuando no se tiene una infraestructura de almacenamiento y crecimiento bien planteada) es común ver como se hace necesario cambiar un disco duro por otro cumpliendo la necesidad de aumentar su tamaño. En estos casos se puede mover el contenido de un PV a otro, incluso varios PE de un LV a otro PV, o también determinados PE específicos. Sin precisar nada como destino, el LVM va a mover todos los PE del PV (Lo mas común), en los otros PV del VG. Debemos de tener en cuenta que para mover el contenido de un PV hacia otro, el otro PV debe de encontrarse en el mismo VG.

El comando pvmove permite mover los PE de un PV hacia otro. Se trata, de desplazar el

contenido del PV /dev/sdg1 hacia /dev/md126p1.

Nota: Para simular un contenido de 7GB dentro del LV hemos usado el comando dd if=/dev/zero of=/home/LVM bs=1024 count=7000000

A continuación verificamos cuanto espacio libre tiene el PV /dev/md126p1 (Free PE) y cuanto espacio ocupado tiene el PV /dev/sdg1 (Allocated PE), veremos que el PV /dev/sdg1 tiene todos llenos.

root@sugeek:/home/soporte# pvdisplay -m /dev/md126p1 --- Physical volume ---

PV Name /dev/md126p1 VG Name vg01

PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 4091 Allocated PE 1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL --- Physical Segments --- Physical extent 0 to 0:

Logical volume /dev/vg01/Datos1 Logical extents 2047 to 2047 Physical extent 1 to 4091:

root@sugeek:/home/soporte# pvdisplay -m /dev/sdg1 --- Physical volume ---

PV Name /dev/sdg1 VG Name vg01

PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes (but full)

PE Size 4,00 MiB Total PE 2047 Free PE 0 Allocated PE 2047 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey --- Physical Segments --- Physical extent 0 to 2046:

Logical volume /dev/vg01/Datos1 Logical extents 0 to 2046

Vemos que el PV /dev/md126p1 tiene suficiente espacio para soportar el contenido del PV /dev/sdg1, procederemos a mover su contenido.

root@sugeek:/home/soporte# pvmove -v /dev/sdg1 /dev/md126p1 Executing: /sbin/modprobe dm-mirror

Finding volume group "vg01"

Archiving volume group "vg01" metadata (seqno 8). Creating logical volume pvmove0

Moving 2047 extents of logical volume vg01/Datos1 Found volume group "vg01"

activation/volume_list configuration setting not defined: Checking only host tags for vg01/Datos1

Updating volume group metadata Found volume group "vg01" Found volume group "vg01" Creating vg01-pvmove0

Loading vg01-pvmove0 table (254:4) Loading vg01-Datos1 table (254:1)

Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01"

activation/volume_list configuration setting not defined: Checking only host tags for vg01/pvmove0

Resuming vg01-pvmove0 (254:4) Found volume group "vg01"

Loading vg01-pvmove0 table (254:4)

Suppressed vg01-pvmove0 identical table reload. Resuming vg01-Datos1 (254:1)

Creating volume group backup "/etc/lvm/backup/vg01" (seqno 9). Checking progress before waiting every 15 seconds

/dev/sdg1: Moved: 100,0% Found volume group "vg01" Found volume group "vg01"

Loading vg01-pvmove0 table (254:4)

Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01"

Resuming vg01-pvmove0 (254:4) Found volume group "vg01" Resuming vg01-Datos1 (254:1) Found volume group "vg01" Removing vg01-pvmove0 (254:4) Removing temporary pvmove LV

Writing out final volume group after pvmove

Creating volume group backup "/etc/lvm/backup/vg01" (seqno 11).

Ahora comprobamos el VG y verificamos que el PV /dev/sdg1 ya tiene todos sus PE Libres, en cambio el PV /dev/md126p1 se ha ocupado (Allocated PE).

root@sugeek:/home/soporte# pvdisplay -m /dev/m126p1 && pvdisplay -m /dev/sdg1 --- Physical volume ---

PV Name /dev/sdg1 VG Name vg01

PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 2047 Free PE 2047 Allocated PE 0 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey --- Physical volume --- PV Name /dev/md126p1 VG Name vg01

PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 2044 Allocated PE 2048 PV UUID QHZC0o-VuuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL

Ya el PV sdg1 podemos quitarlo del VG. Con la opción -a quitaremos los PV que no están siendo usados.

root@sugeek:/home/soporte# vgreduce -a vg01 Removed "/dev/sdg1" from volume group "vg01" Physical volume "/dev/md126p1" still in use

Ahora nos queda indicarle al LV nuevo tamaño del PV, asignárselo (Indicando el total de PE Libres que son 2044) y comprobar que efectivamente se aplico con df.

Extending logical volume Datos1 to 15,98 GiB Logical volume Datos1 successfully resized resize2fs 1.42.5 (29-Jul-2012)

Filesystem at /dev/mapper/vg01-Datos1 is mounted on /home/LVM; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

Performing an on-line resize of /dev/mapper/vg01-Datos1 to 4190208 (4k) blocks. The filesystem on /dev/mapper/vg01-Datos1 is now 4190208 blocks long.

S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 16G 6,9G 8,2G 46% /home/LVM

Como vemos el tamaño del LV es el tamaño de mi PV, además utiliza el mismo tamaño que usaba el antiguo de 6,9G y sus correspondientes archivos.

Suprimir un VG

Para poder suprimir de forma adecuada un LVM de nuestro sistema es necesario seguir la siguiente estructura.

• Desmontar por completo los LV que tengamos

• Suprimir todos los LV con lvremove

• Retirar todos los los PV de los VG con lvreduce

• Destruir el VG con vgremove

• Suprimir el PV con pvremove

Siguiendo las instrucciones anteriores:

root@sugeek:/home# umount /home/LVM && lvremove /dev/vg01/Datos1 Do you really want to remove active logical volume Datos1? [y/n]: y Logical volume "Datos1" successfully removed

El siguiente comando quitara todos los PV posibles, recordemos que LVM siempre deja un PV asociado a un VG. Por ende aparecerá un error de que no se puede quitar 1 PV del VG, no nos preocupemos, esto es normal.

root@sugeek:/home# vgreduce -a vg01

Can't remove final physical volume "/dev/md126p1" from volume group "vg01" Procederemos a quitar el VG y luego eliminaremos el PV.

root@sugeek:/home# vgremove vg01 && vgdisplay -v vg01 Volume group "vg01" successfully removed

Volume group "vg01" not found

root@sugeek:/home# pvremove /dev/md126p1 /dev/sdg1

Labels on physical volume "/dev/md126p1" successfully wiped Labels on physical volume "/dev/sdg1" successfully wiped Existen otros comandos que no vimos, dichos comandos son:

• pvchange: Modifica el estado de un PV, por ejemplo para prohibir la asignación de extensiones físicas en este volumen.

• Pvresize: Vuelve a dimensionar un PV si su partición o disco de origen ha sido

ampliado o reducido, común con los RAID por software.

• Pvscan: Busca todos los volúmenes presentes en todos los soportes de almacenamiento del sistema.

• Vgchange: Modifica los atributos de un VG, para activarlo o desactivarlo por ejemplo, pero también para modificar sus valores máximos del PV y de PE, o para prohibir su ampliación o reducción.

• Vgscan: Busca todos los grupos de volúmenes en todos los soportes.

• Vgrename: Renombra un VG

• vgmerge: Ensambla 2 VG en uno solo

• lvresize: Vuelve a dimensionar un LV, es equivalente a lvextend y lvreduce

• lvchange: Modifica los atributos del LV