Network filesystems & file services. Crear, montar y desmontar Sistemas de ficheros estándar de Linux.
Introducción.
En este tema no haremos mucho hincapié ya que entiendo que es algo superado en LFCS. Imagino que la finalidad es repasar para controlar luego bien el tema de los Sistemas de ficheros encriptados. Los temas a controlar serian:
- 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, gdisk.
- La alternativa 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 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
Disk /dev/sdc: 2147 MB, 2147483648 bytes, 4194304 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. Sin o está el que necesitas probablemente tendrás que instalar el paquete adecuado para que instale el binario.
La sintaxis basica 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:
- -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 ficehros usarmos 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 olbigatorio 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 ficehros en modo lectura (read only) o modo lectura y escritura (read write)
- remount Remonta el sistema de fichero si ya está montado. Se usa mucho para pasar de
ro
arw
. - 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 fichero y lo monta igualmente porque lo detecta automáticamente.
Vemos el sistemas de ficheros montad:
[]# 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.
én montadas.
Montariamos nuestro sistema de ficheros de ejemplo en la forma:
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 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)
Recursos
Redhat 7 doc - Using de mount command..
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