Certificación LFCE. Crear, montar y desmontar sistemas de ficheros estándar de Linux.

Este artículo forma parte de una serie de documentación enfocada a preparar el examen de certificación Linux Foundation Certified Engineer (LFCE)” para Centos 7. Pertenece a la sección de competencias “Network filesystems & file services”.

hard-disk-775847_640b

Introducción.

En este tema no nos extenderemos mucho ya que esto debe ser algo ya superado en LFCS. La finalidad será repasar para aplicarlo con el tema de los Sistemas de ficheros encriptados.
Los temas a controlar parecen ser:

  • Crear particiones estándar de disco (no LVM en principio) ya que serán necesarias para crear los Sistemas de ficheros.
  • Crear sistemas de ficheros estándar (ext3, ext4 y xfs)
  • Montar y desmontar mediante comandos sistemas de ficheros.
  • Montar sistemas de ficheros de forma automática mediante fstab.

Crear particiones de disco.

Para crear las particiones de disco tenemos varias opciones clásicas.

  • El clásico fdisk
  • El llamado a suceder al anterior por su capacidad de gestionar particiones [GPT](https://wiki.archlinux.org/index.php/GUID_Partition_Table_(Espa%C3%B1ol “”), gdisk.
  • La alternativa a ambas que sería gparted

El consejo es que uses mejor fdisk. Si por un casual en el examen hablan de discos GPT o de particiones mayores de 2 Tb (no lo creo) puedes usar gdisk que si se usa para particionar un disco nuevo es prácticamente igual en su uso que fdisk. Si usas gdisk probablemente tengas que instalarla primero.

Uso básico de fdisk

Listamos discos con fdisk -l

[]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Identificador del disco: 0x000e9b33

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Accedemos al disco para editar las particiones con fdisk dispositivo.
Mostramos un particionado clásico con fdisk usando las opciones habituales:
* p -> imprimir particiones en pantalla
* n -> nueva particion
* p -> partición primaria (en el menu de tipo de particionar)
* t -> tipo de partición
* w -> escribir cambios a disco (muy importante). Dentro de fidsk podemos usar …
* m …para que nos ofrezca la ayuda de los comandos posibles.

    []# fdisk  /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).

    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.

    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0x42956db5.

    Orden (m para obtener ayuda): p   <-------- VER PARTICIONES (p)

    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Identificador del disco: 0x42956db5

    Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema

    Orden (m para obtener ayuda): n  <-------- NUEVA PARTICION (n)

    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p            <-------- PARTICION PRIMARIA (p)
    Número de partición (1-4, default 1): 1  <-------- PARTICION 1
    Primer sector (2048-2097151, valor predeterminado 2048):
    Se está utilizando el valor predeterminado 2048
    Last sector, +sectors or +size{K,M,G} (2048-2097151, valor predeterminado 2097151):
    Se está utilizando el valor predeterminado 2097151
    Partition 1 of type Linux and of size 1023 MiB is set

    Orden (m para obtener ayuda): t <--------  TIPO DE PARTICION
    Selected partition 1

    Hex code (type L to list all codes): 83 <-------- TIPO 83 = Linux
    Changed type of partition 'Linux' to 'Linux'

    Orden (m para obtener ayuda): p   <-------- VER PARTICIONES (p)

    Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Identificador del disco: 0x42956db5

    Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
    /dev/sdb1            2048     2097151     1047552   83  Linux

    Orden (m para obtener ayuda): w   <-------- ESCRIBIR PARTICIONES (p)
    ¡Se ha modificado la tabla de particiones!

    Llamando a ioctl() para volver a leer la tabla de particiones.
    Se están sincronizando los discos.

NOTA: En versiones previas de fdisk era habitual usar los parámetros -c (desactivar compatibilidad DOS) y -u (mostrar tamaño de disco en sectores). Estos dos flags han cambiado la forma de uso en recientes versiones de fdisk y, sobre todo, además ambas opciones son ya por defecto. Por defecto las nuevas particiones empezarán en el sector 2048 lo que nos permite un correcto alineamiento con cualquier tipo de disco en cualquier tipo de almacenamiento.

Uso básico de gdisk

La utilidad gdisk se creo para permitir gestionar además particiones de tipo GPT (cosa que fdisk no hace). GPT nos permite entre otras cosas:

  • Particiones de más de 2Tb.
  • 128 particiones por disco

Excepto el comienzo al ejecutar la utilidad el resto es muy similar a fdisk por lo que no vamos a profundizar mucho. Basicamente cambia algo la presentación en cuanto al análisis y la información mostrada del disco pero las opciones de partición son iguales que con fdisk.

[]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help):

Si cambian completamente por ejemplo los codigos del tipo de partición (L). En cualquier caso es sencillo localizar el adecuado y nos ofrece por defecto el código 8300 que equivale a “Linux filesystem”.

Ojo: No usar fdisk en un disco ya particionado con gdisk. Para evitar problemas seguir usando gdisk.

Crear sistemas de ficheros estándar.

Nos centraremos en Sistemas de ficheros ext3, ext4 y xfs que se introduce en RHEL7 / Centos7 como estándar.

Actualmente todas las utilidades para crear sistemas de ficheros se suelen encontrar en /sbin y empiezan por mkfs (make filesystem).

[]#  ll /sbin/mk* | awk '{print $5, $9}'
15 /sbin/mkdict
16890 /sbin/mkdumprd
96240 /sbin/mke2fs
11504 /sbin/mkfs
287400 /sbin/mkfs.btrfs
32768 /sbin/mkfs.cramfs
96240 /sbin/mkfs.ext2
96240 /sbin/mkfs.ext3
96240 /sbin/mkfs.ext4
32856 /sbin/mkfs.minix
351440 /sbin/mkfs.xfs
19488 /sbin/mkhomedir_helper
11360 /sbin/mklost+found
66984 /sbin/mkswap

A partir de ahí es sencillo. Es obvio cual tendrás que usar en función del tipo de filesystem a usar. Si no está el que necesitas probablemente tendrás que instalar el paquete adecuado para que instale el binario.
La sintaxis básica es:

mkfs.typo /dev/particion

Por ejemplo:

[]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: hecho
Etiqueta del sistema de ficheros=
OS type: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 261883 blocks
13094 blocks (5.00%) reserved for the super user
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=268435456
8 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
    32768, 98304, 163840, 229376

Allocating group tables: hecho
Escribiendo las tablas de nodos-i: hecho
Creating journal (4096 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

NOTA: ¿mkfs, mke2fs, mkfs.extX ? ¿Por que tantos comandos similares?
* mkfs es solo un “intermediario” para el resto de binarios “mkfs.XXX”. Se puede usar especifcando el tipo de FS con -t FileSystem y parece que existe sobre todo por temas de compatibilidad.
* mkfs.extX son “intermediarios” para mke2fs que es el comando usado para los sistemas de ficheros ext.
Creo que lo más práctico es usar siempre los comandos mkfs.xxx.

Otro ejemplo creando un sistemas de ficheros xfs. El parámetro -f (force) existente en todas las utilidades de particionado es para forzar la eliminación del sistema de ficheros actual de la partición.

[]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=65471 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=261883, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

No hay mucho más sobre la creación de sistemas de ficheros salvo repasar parámetros habituales de estas utilidades que son un móntón de ellos realmente pero que no es habitual su uso y sobre todo no deben ser objeto de este tema. Algunos más habituales son:
* -f fuerza la creación del Sistema de ficheros. Sobreescribe el actual.
* -L etiqueta Asigna una etiqueta al FS

Ejemplo de creación de Sistema de ficheros xfs.

[]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=131008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=524032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Montar y desmontar sistemas de ficheros estándar mediante comandos.

Para montar desmontar sistemas de ficheros usaremos mount / umount.
La sintaxis general básica será la siguiente:

mount -t Tipo_sistema_ficheros -o Opciones <ORIGEN(Particion)>  <DESTINO(directorio_ubicación)>

El Sistema de ficheros a montar especificado con -t no es obligatorio ya que si no se específica será capar de determinarlo automáticamente y montarlo.
En cuanto a las opciones más habituales -o suelen ser:

  • async Permite operaciones E/S asíncronas en el sistema de ficheros.
  • auto / noauto Permite o no que el sistema de ficheros se monte automaticamente con mount -a.
  • exec / noexec Permite o no la ejecución de ficheros binarios en el sistema de ficheros.
  • loop Monta una imagen como un dispositivo loop (hace un fichero p.e. iso accesible como un disco)
  • user / nouser Permite o no a un usuario “ordinario” montar / desmontar el Sistema de ficheros,
  • ro / rw Monta el sistema de ficheros en modo lectura (read only) o modo lectura y escritura (read write)
  • remount Remonta el sistema de ficheros si ya está montado. Se usa mucho para pasar de ro a rw.
  • defaults Un alias para las opciones: async,auto,dev,exec,nouser,rw,suid.

Algunas de estas opciones no tienen mucho sentido para el montaje manual de sistemas de ficheros. Por defecto usará los parámetros de defaults si no especificamos otros.

Ejemplo: montar sistema de ficheros XFS creado previamente.

mkdir /mnt/midisco
mount /dev/sdb1 /mnt/midisco

Vemos que no especificamos el tipo de sistema de ficheros y lo monta igualmente porque lo detecta automáticamente. El sistemas de ficheros montado:

[]# mount | grep /dev/sdb1
/dev/sdb1 on /mnt/midisco type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

[]# df -h | grep /dev/sdb1
/dev/sdb1                 2,0G    33M  2,0G   2% /mnt/midisco

Mediante lsblk podemos ver con una presentación muy cómoda los discos, particiones y puntos de montaje.

[]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0               2:0    1    4K  0 disk
sda               8:0    0   20G  0 disk
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19,5G  0 part
  ├─centos-swap 253:0    0    1G  0 lvm  [SWAP]
  └─centos-root 253:1    0 18,5G  0 lvm  /
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part /mnt/midisco
sr0              11:0    1 1024M  0 rom

Para ver todos los sistemas de ficheros actualmente montados usamos mount a secas. En Centos7 / REHL7 nos saldrán un montón de ellos que nos pueden confundir, resumimos:

[root@centos7 ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=236380k,nr_inodes=59095,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
...
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=49320k,mode=700)

Algunos ejemplos útiles de montaje de dispositivos.

  • Pendrive USB -> mount -t vfat /dev/sdc1 /media/flashdisk
  • Imagen (fichero) ISO -> mount -o ro,loop Centos7.iso /media/cdrom

En últimas ditribuciones de linux lo normal ya será que incluso no sea necesario especificar los parámetros y detecte automaticamente lo que tiene que hacer.

Para desmontar un sistema de ficheros usamos umount.
Podemos desmontar un sistema de ficheros tanto aludiendo al dispositivo como al punto de montaje. Siguiendo con el ejemplo previo ambas opciones valdrían:

umount /dev/sdb1
umount /mnt/midisco

Si nos diera un error por estar ocupado lo primero será salirnos del directorio :-D, lo segundo si no es eso será echar un ojo a ver que ficheros hay en uso en el punto de montaje para intentar tener más datos de quien / que lo está usando con fuser -m directory, p.e.:

fuser -m /mnt/midisco

Montar y desmontar sistemas de ficheros de forma automática (en el inicio del sistema).

Si queremos montar sistemas de ficheros en el inicio del sistema los añadiremos al fichero /etc/fstab. Ejemplo de fstab ordenadito:

/dev/mapper/centos-root  /     xfs     defaults        1 1
UUID=777c6682-...44479   /boot xfs     defaults        1 2
/dev/mapper/centos-swap  swap  swap    defaults        0 0

El formato es sencillo, en orden:

  • El dispositivo a montar. Bien por nombre de udev (mapper), LABEL, o por identificador único UUID (podemos usar blkid para localizar el UUID de los discos). /boot lo encontramos habitualmene montado por UUID.
  • El punto de montaje
  • El sistema de archivos del dispositivo.
  • Las opciones de montaje (defaults = async,auto,dev,exec,nouser,rw,suid). Lás básicas las hemos visto previamente.
  • dump – Usado por la utilidad dump para saber si debe hacer backup de este sistema de fichersos (0 = no, 1 = si). No se suele usar dumpo actualmente.
  • pass – Usado por fsck al inicio para saber el orden de revisión de esta partición en busca de errores al inicio (0 = no se revisa, 1 = prioritario, 2 = menos prioritario)

El formato del fichero /etc/fstab es algo muy delicado dado que un pequeño error de sintaxis en este no solo puede suponer que no se monte un sistema de ficheros concreto si no que por error de lectura en el fichero no se monte nada en el inicio. Por eso debemos extremar la precaución al añadir entradas. Lo mejor es probar cada nueva entrada que añadamos con mount -a que leerá el fichero /etc/fstab y montará todas las particiones que aún no estén montadas Si funciona funcionará correctamente al iniciar.

Si usamos volúmenes LVM usaremos como dispositivo la referencia al “mapper” /dev/mapper. Si usamos particiones estándar usaremos el UUID del “disco”. Buscariamos primero el UUID de nuestra partición con la utilidad blkid que nos muestra el de todos los “discos”. Podriamos usar el “dev” pero no es aconsejable ya que este podría llegar a cambiar. Vemos que el resto de discos tienen una ruta en /dev/mapper proporcionada por udev ya que son particiones LVM (que no parece asunto de este examen, si de LFCS).

[]# blkid
/dev/sdb1: UUID="1d1b6227-5024-414b-beea-e42b70071578" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="770f39f9-9493-4b78-97b4-ba69c1f539d1"
/dev/sda1: UUID="dbbcd8cb-30e1-4d7c-b425-43ffab4e018a" TYPE="xfs"
/dev/sda2: UUID="TyzPPb-WNya-cRao-JdnB-hs6T-VWie-cdmMtj" TYPE="LVM2_member"
/dev/mapper/centos-swap: UUID="e542d710-558b-410c-84ad-58c21f30c31a" TYPE="swap"
/dev/mapper/centos-root: UUID="9b40fb10-17f1-484b-9e58-271081677c5d" TYPE="xfs"

Añadiriamos una línea a /etc/fstab

UUID=1d1b6227-5024-414b-beea-e42b70071578 /mnt/midisco xfs defaults 1 2

Verificamos que no está. Lo montamos con mount -av y volvemos a verificar. Añadimos el parámetro -v / verbose para tener más datos ya que si no lo hacemos solo nos dará información en caso de error.

[]# vim /etc/fstab
[]# mount | grep "disco"
[]# mount -av
/                        : ignored
/boot                    : already mounted
swap                     : ignored
mount:
/mnt/midisco             : successfully mounted

[]# mount | grep "disco"
/dev/sdb1 on /mnt/midisco type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

Ayuda durante el examen.

  • Páginas de man para las utilidades básicas: fdisk, gdisk, mkfs.xxx, mount, umount, ...
  • Páginas de man para los archivos de configuración: fstab

Leave a Reply

Your email address will not be published. Required fields are marked *

*