Ir al contenido

Entradas etiquetadas como ‘filesystems’

25
nov

El archivo /etc/fstab

Introducción.

Un archivo fundamental en cualquier sistema Linux es el /etc/fstab, cuyo nombre es una especie de abreviatura de File System Table. El mismo reune la información sobre los sistemas de archivos y es leído por el demonio init para poder montarlos al bootear el sistema operativo. También se utiliza su información una vez iniciado el sistema al invocar al comando mount.

La estructura del archivo es extremadamente simple y aún así muchas veces confunde o se desconocen sus parámetros. A continuación se puede ver un ejemplo de un archivo /etc/fstab y luego la explicación de cada elemento.

El archivo /etc/fstab.

# /etc/fstab: static file system information.
#
# file system   mount point     type    options         dump    pass
/dev/sda1       /boot           ext4    defaults        1       2
/dev/sda5       /               ext4    defaults        1       1
/dev/sda6       /home           ext4    defaults        0       0
/dev/sda7       /storage        ext4    defaults        1       2
/dev/sda8       swap            swap    defaults        0       0

Las líneas que comienzan con # son ignoradas como en la mayoría de los archivos de configuración de Linux por tratarse de comentarios. Por lo tanto, la parte interesante arranca a partir de la cuarta línea. Se puede ver que cada una de las líneas del archivo representan un filesystem distinto. A su vez, es sencillo notar que todas las líneas presentan seis columnas cada una, cuyo significado se detalla a continuación:

  • Primera: en este campo se indica el dispositivo o la partición donde se encuentra el filesystem.
  • Segunda: aquí va el punto de montaje para el dispositivo especificado.
  • Tercera: el tipo de sistema de archivos. Puede tomar varios valores, entre los que se destacan: ext2, ext3, ext4, iso9660, nfs, ntfs, reiserfs, smbfs, swap, vfat, xfs.
  • Cuarta: en esta columna van las opciones para el montaje del filesystem. Son muchas y a continuación se mencionan las más comunes. Para un listado más completo se pueden leer el manual del comando mount y el del nfs (para los parámetros específicos de nfs).
    • async: las escrituras al filesystem se demoran, es decir que no se hacen en el momento sino que se hacen varias escrituras juntas. Esto da un mayor rendimiento, aunque si el sistema se cuelga, apaga o el filesystem se desmonta, los datos se pederán si aún no han sido escritos.
    • auto: el sistema de archivos será montado automáticamente al iniciar el sistema o al ejecutar el comando mount -a.
    • noauto: debe ser montado explícitamente.
    • defaults: utiliza las opciones por defecto, que son rw, suid, dev, exec, auto, nouser, async.
    • ro: monta el filesystem como de sólo lectura.
    • rw: monta el filesystem como lectura/escritura.
    • user: permite que cualquier usuario pueda montar el filesystem.
    • nouser: especifica que el filesystem sólo puede ser montado por el usuario root y no por un usuario común.
    • sync: todas las escrituras al filesystem se hacen en el momento. Esto da mayor seguridad a los datos pero un menor rendimiento.
  • Quinta: esta columna indica a la utilidad dump si debe o no hacer backup del filesystem. Puede tomar dos valores: 0 y 1. Con 0 se indica que no se debe backupear, con 1 que sí se haga. Lógicamente, depende de que se tenga instalado y configurado dump, por lo que en la mayoría de los casos este campo es 0.
  • Sexta: en este caso se trata de una indicación para el fsck (comando que chequea el filesystem) y nuevamente se define con un valor numérico. Las posibilidades son 0, 1 y 2. El 0 indica que el filesystem no debe ser chequeado, mientras que el 1 y el 2 le dicen a fsck que sí lo chequee. La diferencia es que el 1 representa una prioridad mayor que el 2, por lo que debe utilizarse para el sistema raíz y el 2 para el resto de los sistemas de archivos.

Referencias.

Existen multitud de documentos a los que acudir para obtener información sobre fstab. Entre ellos recomiendo los manuales de los comandos fstab, mount y nfs. Además hay buena información en la wiki de ArchLinux y en un post en TuxFiles.

21
jul

Soporte para ext3 y NTFS en Mac

Si trabajamos con diferentes sistemas operativos es muy común encontrarse con la situación en la que se necesita leer o escribir diferentes sistemas de archivos. En este caso, me ocurrió que necesitaba acceder a filesystems NTFS y ext3 con Mac OS X y ninguno de los dos tiene soporte nativo en el sistema operativo mencionado, por lo cuál es necesario valerse de algún agregado.

Para NTFS el soporte es completo de lectura/escritura utilizando NTFS-3G, el mismo software utilizado para obtener el soporte de lectura/escritura de NTFS en Linux.

En el caso de ext3 se puede utilizar fuse-ext2 que requiere tener instalado en el sistema Mac Fuse. No obstante, el soporte para ext3 es de sólo lectura, al menos hasta lo que pude encontrar.

18
jun

LVM (parte 3): reducir y eliminar volúmenes

Al momento se ha tratado la parte teórica de LVM introduciendo los conceptos del mismo y se ha visto también cómo crear y extender volúmenes. En el post del día de hoy se explicará la forma de reducir el tamaño de un volumen y eliminar volúmenes.

Reducir un volumen

Cuando se trató el tema de aumentar el tamaño de un volumen se vio que los pasos básicamente consistían en extender el tamaño del grupo de volúmenes, luego el tamaño del volumen lógico a expandir y, finalmente, el tamaño del sistema de archivos.

Para el caso de reducir un volumen los pasos son los mismos pero en orden inverso, aunque no es necesario achicar el grupo de volúmenes (eso dependerá de la necesidad particular).

En la siguiente salida se puede verificar que el filesystem está montado y tiene una tamaño total de 2.9G.

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

Lo que hay que hacer entonces es redimensionar el filesystem. Para poder hacerlo el mismo no debe estar montado, dado que de lo contrario da un error al intentar la ejecución, tal como se muestra a continuación:

testing:/home/leandro# resize2fs /dev/testing/storage 1G
resize2fs 1.41.3 (12-Oct-2008)
Filesystem at /dev/testing/storage is mounted on /storage; on-line resizing required
On-line shrinking from 772096 to 262144 not supported.

Se ve que dice claramente que la reducción del filesystem de forma on-line no puede llevarse a cabo. Entonces sí es necesario desmontarlo y luego hacer la reducción. Es muy recomendado hacer un chequeo del filesystem antes de achicarlo.

testing:/home/leandro# umount /dev/mapper/testing-storage
testing:/home/leandro# e2fsck -f /dev/mapper/testing-storage
e2fsck 1.41.3 (12-Oct-2008)
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/mapper/testing-storage: ***** FILE SYSTEM WAS MODIFIED *****
/dev/mapper/testing-storage: 12/195840 files (0.0% non-contiguous), 21270/772096 blocks

testing:/home/leandro# resize2fs /dev/mapper/testing-storage 1G
resize2fs 1.41.3 (12-Oct-2008)
Resizing the filesystem on /dev/mapper/testing-storage to 262144 (4k) blocks.
The filesystem on /dev/mapper/testing-storage is now 262144 blocks long.

Muy bien, con los pasos anteriores logró reducirse el tamaño del sistema de archivos a 1GB. Dicha modificación puede constatarse volviendo a montar el filesystem y viendo que ahora el tamaño es de 1008M contra los 2.9G que mostraba antes.

testing:/home/leandro# mount /storage/
testing:/home/leandro# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testing-storage
                     1008M   35M  923M   4% /storage
testing:/home/leandro# cat /storage/archivo.txt
prueba

Ahora bien, hasta aquí sólo se achicó el filesystem y no se modificó nada del volumen lógico, por lo que es de suponer que el mismo se haya mantenido sin cambios. Se puede verificar esto mediante el siguiente comando:

testing:/home/leandro# lvdisplay /dev/testing/storage | grep Size
  LV Size                2.95 GB

Entonces, para reducir efectivamente el volumen hay que indicarle con el comando lvreduce cuál será su nuevo tamaño. En este caso, 1GB.

testing:/home/leandro# lvreduce -L 1GB /dev/testing/storage
  WARNING: Reducing active and open logical volume to 1.00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage? [y/n]: y
  Reducing logical volume storage to 1.00 GB
  Logical volume storage successfully resized

testing:/home/leandro# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/testing-storage
                     1008M   35M  923M   4% /storage

testing:/home/leandro# lvdisplay /dev/testing/storage | grep Size
  LV Size                1.00 GB

En este punto sí se ve claramente que se ha reducido tanto el tamaño del filesystem como el del volúmen. Faltaría asegurarse que los datos sigan estando bien. Para ello se puede ver que el contenido de “archivo.txt” sea legible.

testing:/home/leandro# cat /storage/archivo.txt
prueba

Obviamente, lo anterior no asegura que todo esté bien. El archivo se creó como una demostración de que los datos se mantienen, pero una medida más precisa implicaría tener un volumen más amplio de información, en lo posible cerca del límite del tamaño del filesystem.

Finalmente, con el siguiente comando se puede verificar que, si bien se achicaron el filesystem y el volúmen lógico, el grupo de volúmenes sigue teniendo la misma dimensión, con la diferencia que en este caso tiene espacio libre que podrá ser asignado a un nuevo volumen. Esta información puede verse en las variables VG Size, Alloc Size, Free Size.

testing:/home/leandro# vgdisplay testing
  --- Volume group ---
  VG Name               testing
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  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       256 / 1.00 GB
  Free  PE / Size       499 / 1.95 GB
  VG UUID               epQoNY-6JWP-1vUX-IZm0-LRwo-4fR4-AEEo1p

Remover volúmenes

Llegó el momento de deshacer todo el trabajo que se llevó adelante hasta el momento.

Eliminar un volumen lógico.

testing:/home/leandro# umount /storage/
testing:/home/leandro# lvremove /dev/testing/storage
Do you really want to remove active logical volume "storage"? [y/n]: y
  Logical volume "storage" successfully removed

Eliminar un grupo de volúmenes.

testing:/home/leandro# vgremove testing
  Volume group "testing" successfully removed

Eliminar un volumen físico.

testing:/home/leandro# pvremove /dev/hdb
  Labels on physical volume "/dev/hdb" successfully wiped

Conclusión

Luego de tres posts se han visto las funcionalidades básicas de LVM que consisten en crear volúmenes, expandirlos, achicarlos y eliminarlos. Quedan como temas de algún otro post dos tópicos interesantes: las instantáneas de los volúmenes y los volúmenes encriptados. Probablemente haya algo de eso en un tiempo.

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.

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.