203 sistemas de archivos y dispositivos
203.1 Manipular sistemas de archivos
Tipos de filesystem
fisic | filesystem |
---|---|
EXT2 | versión base de ext, archivos de hasta 2TB y volumen máximo 32TB, fecha limte de archivo en 2038. |
EXT3 | se añade un registro de transacciones sobre la version ext2. |
EXT4 | archivos hasta 16TB y volumenes 1EB, fecha limite de archivo en año 2514. |
reiserfs | Este tipo de sistema de archivos ya no se mantiene, por lo que se debería evitar. Tenia un rendimiento ligeramente mejor a ext3 |
XFS | - Permite archivos de hasta 8EB y una partición de 16EB - Las operaciones de escritura sobre los metadatos se escriben en el registro antes de ejecutarse, lo que permite garantizar la coherencia del sistema de archivos en caso de fallo físico. - Permite realizar de forma simultánea diferentes operaciones de entrada/salida en un mismo sistema de archivos - Permite crear snapshots, Se puede ampliar en caliente, herramientas especificas |
BTRFS | - implementa la posibilidad de compresión, de copia de seguridad en línea, de redundancia de datos, de snapshot, de redimensionamiento en línea, etc. - multi-devices : se puede crear un unico sistema de ficheros en varias particiones mkfs.btrfs /dev/device1 /dev/device2 /dev/device3 - Subvolumenes : se puede crear subvolúmenes y snapshots(instantaneas) btrfs subvolume create /mnt/punto-montaje/subvolumen1 - mas información sobre btrfs |
Virtual filesystem o Pseudofilesystem
En los sistemas Linux hay sistemas de archivos virtuales que solo están presentes en memoria sin ocupar espacio en disco.
proc
El sistema de archivos virtual proc (o procfs), generalmente montado en el directorio /proc
, permite la visualización de los elementos del sistema relacionados con la gestión de procesos por parte del núcleo.
sys
El sistema de archivos virtual sys (o sysfs), generalmente montado en el directorio /sys
, permite visualizar elementos de sistema relacionados con los periféricos.
Creación sistem de archivos
Para crear los sistemas de archivos el comando más utilizado es mkfs
junto a sus diferentes extensiones adecuadas a cada sistema de archivos
mkfs -t tipo dispositivo
-c # comprovar bloques defectuosos
sudo mkfs.ext4 /dev/sdb1
sudo mkfs -t ext4 /dev/sdb1
mkfs.ext4
mkfs.vfat
mkfs.ntfs
mkfs.btrfs
mkfs.xfs
mkswap
Administración del swap
El swap es una partición en la que la RAM utiliza para grabar datos en caso de que el sistema este llegando a sus límites y así evitar el colapso del sistema.
La gran época del swap se dio cuando la memoria tenía un coste tan caro que era necesario encontrar para el servidor un compromiso entre el coste del sistema y el rendimiento que podía obtener.
Hoy en día aun que se crea por defecto en la instalación básica, no es obligatoria. El tamaño a establecer como Swap siempre a sido un dilema, antiguamente se decia igual o doblar el tamaño de RAM. En los tiempos que corren dedicar 4G al swap es suficiente.
# crear filesystem swap
mkswap espacio_de_almacenamiento
/ruta/archivo
/dev/device
-L label
-U uuid
swapon espacio_de_almacenamiento
-s # visualizar espacio swap ( /proc/swaps)
-a # montar swap definida en /etc/fstab
swapoff espacio_de_almacenamiento
-a # desmontar swap definida en /etc/fstab
Por defecto las distribuciones empiezan a utilizar swap cuando la ram está a un 40% de su capacidad, y lo ideal es cambiarlo a 10% o 0%.
sudo sysctl -a | grep vm.swappiness # ver porcentaje actual
sudo echo vm.swappiness=10 >> /etc/sysctl.conf # definir porcentaje
sudo sysctl -p # guardar
Montaje del sistema de ficheros
El comando más usado para montar sistemas de ficheros localmente es mount
junto umount
para desmontarlos.
mount [-t tipo_fs] [-o opciones] dispositivo punto_de_montaje
umount [-O opciones] [dispositivo] punto_de_montaje
-f # forzar desmontaje
-l # desmontar cuando todo este liberado
# visualizan filesystem montados
mount
/etc/mtab
/proc/mounts
/etc/fstab es el archivo donde se guardan los puntos de montaje que se haran al arrancar el sistema
Este es un archivo de texto, donde cada línea describe un sistema de archivos que se va a montar, con seis campos por línea en el siguiente orden:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda5 / ext4 errors=remount-ro 0 1
fyle_sistem |
hace referencia a una partición o recurso. |
mount_point |
Dónde se montará el sistema de archivos. |
type |
El tipo de sistema de archivos. (ext4, ntfs, xfs, vfat, ...) |
options |
las opciones para montar un dispositivo, si son varias se separan por comas. Para opciones por defcto se utiliza defaults |
dump |
si se utiliza dump para hacer copias de seguridad en esta columna podemos indicar 1 para indicar que se copie la partición o un 0 para ignorarla. |
pass |
Cuando es distinto de cero, define el orden en el que se comprobarán los sistemas de archivos durante el arranque. Normalmente es cero. |
Las diferentes formas de identificar un file system
/dev/sdax # nombre particion
UUID=854f5443... # Uid completo de particion
LABEL=sistema # label de partición
/dev/sr0 # cdrom/dvd
192.168.88.10:/ruta # dispositivo de red nfs
/mnt/imagen.raw # imagen en ruta del sistema
Diferentes opciones de montaje de file sistem. | |
---|---|
default |
Englova las siguientes opciones |
ro, rw |
Solo lectura o lectura y escritura. |
noauto |
no se montara automáticamente en el arranque del sistema ni con mount -a |
users |
cualquier usuario puede montar y desmontar una linea con la opción users, indiferentemente quien lo aya montado. |
user |
puede montar cualquier usuario, pero solo el usuario que lo monta puede desmontarlo. |
group |
Permite a un usuario montar el sistema de archivos si el usuario pertenece al mismo grupo que posee el dispositivo que lo contiene. |
exec, noexec |
no se pueden ejecutar archivos en esa partición. |
async |
utiliza bufers para el uso de tareas en el disco, sync no utiliza bufers y escribe al momento. |
atime, noatime |
por defecto, cada vez que se lee un archivo, se actualiza la información de tiempo de acceso. |
dev, nodev |
se deben interpretarse los dispositivos de caracteres o bloques en el sistema de archivos |
suid, nosuid |
Permite, o no, que los bits SETUID y SETGID surtan efecto. |
remount |
sta opción no es par /etc/fstab sino para el comando mount -o remount,ro /dev/sdb1 que remontara un dispositivo en solo lectura |
Montaje con Systemd
Systemd también se puede utilizar para gestionar el montaje (y montaje automático) de sistemas de archivos.
Para utilizar esta función de systemd, debe crear un archivo de configuración llamado mount unit. Cada volumen que se va a montar tiene su propia unidad de montaje y es necesario colocarlos en /etc/systemd/system/
.
mnt-external.mount
[Unit]
Description=External data disk
[Mount]
What=/dev/disk/by-uuid/56C11DCC5D2E1334
Where=/mnt/external
Type=ntfs
Options=defaults
[Install]
WantedBy=multi-user.target
Para que funcione correctamente, la unidad de montaje debe tener el mismo nombre que el punto de montaje. En este caso, el punto de montaje es
/mnt/external
, por lo que el archivo debe llamarsemnt-external.mount
.
Despues de esto se debe reiniciar el demonio de systemd e inciar la unidad:
sudo systemctl daemon-reload # recargar systemd
sudo systemctl start mnt-external.mount # iniciar unidad de montaje
sudo systemctl enable mnt-external.mount # habilitar unidad en el arranque
203.2 Mantener sistemas de archivos
tar es un clasico en copias de seguridad en Linux, esto se deve a la versatilidad a la hora de crear copias de seguridad a nivell de archivos.
opciones para copia de seguridad
-
Totales: se copian todos los datos
-
Diferenciales: se copian sólo los que se hayan modificado desde una fecha indicada. Se utiliza la opción
-N
seguido de la fecha - incrementales: se copian sólo los ficheros que se han modificado desde la última copia. Se utiliza la opción
-g
seguido de la ruta del fichero de registro.
-c # comprime
-x # descomprime
-z # gzip
-J # xz
-j # bzip2
-p # conserva permisos
-h # conservar softlinks
-v # muestra informacion vervose
-P # conserva ruta absoluta
-f # referencia a archivos
-r # añade elementos a un fichero compacto
-t # ver interior tar
-u # añadir archivo a tar
--exclude # Excluir directorio o fichero
--delete # borrar ruta del interior del tar
tar cf file.tar files*
tar xf file.tar
tar czf file.tar.gz files*
tar xzf file.tar.gz
find /etc -type f -print0 | tar -cJ -f /srv/backup/etc.tar.xz -T - --null
La opción -T
indica que son nombres extraidos de un fichero o comando, y la opción --null
que el caracter separador es nulo.
cpio tiene una función parecida a tar
. Copia ficheros y desde n solo archivo. Utiliza la enttrada y salida estándar para el origen y destino de datos.
-o # crear un archivo con el contenido que le indiquemos
-i # extrae el contenido de un fichero
-t # junto con "-i" lista el contenido de un archivo de recopilación existente
-p # copia una estructura de directorios a otro lugar
find /etc/ | cpio -o > copia_etc.cpio
cpio -i < copia_etc.cpio
find /etc/ | cpio -o | gzip > copia_etc.cpio.ggz
Btrfs es un nuevo sistema de archivos de copia en escritura (CoW) para Linux destinado a implementar funciones avanzadas mientras se enfoca en la tolerancia a fallas, reparación y fácil administración.
Algunas ventajas son: crear sistema de ficheros en multiples discos, compresión de datos, suvbolumenes y snapshots, soporta raid.
# crear una particion en varios discos
mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
# creacion raid 0
mkfs.btrfs -d raid0 /dev/sdb /dev/sdc
# raid10 con datos y metadatos
mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# no duplicar datos en una unidad
mkfs.btrfs -m single /dev/sdb
btrfs filesystem show # ver sistema de archivos creados
btrfs subvolume create /home # crear subvolumen de /home
btrfs subvolume snapshot /home/ /home-snap # crear snapshot
btrfs subvolume delete /home-snap/ # eliminar instantanea
ZFS actualmente propiedad de Oracle Corporation, fue desarrollado en Sun Microsystems como un sistema de archivos de próxima generación destinado a una escalabilidad casi infinita y libre de paradigmas de diseño tradicionales.
las principales ventajas de zfs son: alta tolerancia a fallos, almacenamiento casi ilimitado, gestion hibrida de volumen, compresion, snapshots, volumenes(zvols), ...
zpool create -f -m /tank tank /dev/vdb # crear volumenes
zpool scrub tank # añadir control de fallos al volumen
zpool list
zpool status
zpool history
# creear subvolumen con compresion
zfs create -o compression=on tank/documents
zfs create tank/documents
zfs set compression=on tank/documents
zfs list
# snapshots
zfs snapshot tank/documents@backup
zfs list -t snapshot
ll /tank/documents/.zfs/snapshot/backup
copias de seguridad a nivel de sistema de archivos
Las utilidades dump y restore permiten realizar copias de seguridad incrementales y la restauración de un sistema de archivos entero.
dump 0 -f /root/cs /dev/sdb1
0 # n nivel de incremento 0 copia completa
-f # archivo destino
restore -rvf /root/cs
-r # realizar restauracion
-f # fichero de restauración
Los sistemas de ficheros xfs tienen sus propias herramientas xfsdump xfsrestore
xfsdump -f file.dump /dev/sdb2
-L # añadir etiqueta
-f # modo desatendido
-E # sobreescritura
xfsrestore -f file.dump dir-destino
-t # ver contenido del dump
-f # fichero de dump
-v trace # visualizacion detallada
Programas de copias de seguridad
AMANDA (Advanced Maryland Automatic Network Disk Archiver) es una solución de copias de seguridad creada inicialmente por la universidad de Maryland con licencia BSD. Disponible con licencia libre (gratuita) o comercial, AMANDA permite hacer copias de seguridad de forma local o en red, en discos o en cintas, de los datos de sistemas Linux/Unix o Windows.
Bacula es un programa con licencia GPL que permite crear copias de seguridad de forma local o en red, en discos o en cintas, de los datos de sistemas Linux/Unix o Windows.
BackupPC es un programa con licencia GPL que permite crear copias de seguridad de forma local o en red, en discos o en cintas, de los datos de sistemas Linux/Unix o Windows.
Revisión de filesystems
fsck verifica la integridad del sistema de ficheros. Utiliza un comando distinto dependiendo del tipo de sistema de ficheros a analizar:
e2fsck
para familia extdosfsckl
para dos/fatreiserfsck
para raiserFSxfs_check, xfs_repair
para xfs
Opciones fsck:
-A verifica todos los sistemas de fstab
-C indica el progreso
-V salida detallada
-N simular verificación
-f fuerza verificación
-p repara sin preguntar
Para verificar un sistema de ficheros la partición a de estar desmontada obligatoriamente
sudo fsck.ext4 /dev/particion
dumpe2fs muestra información técnica sobre el sistema de ficheros que le pasemos como parametro. es recomendabl usar la opción -h
para mostrar unicamente la información más importante dumpe2fs -h /dev/particion
tune2fs Modifica opciones del sistema de ficheros, es muy extensa y técnica esta orden ya que modificar las opciones del sistema de ficheros puede ser en algunos casos peligroso. Las opciones más sencillas serian:
-l # ver parametros actuales
-c # numero maximo de montajes tras los que se hara una verificación
-i # periodo maximo entre comprobaciones, se usa d,w y m para dia, semana y mes
tune2fs -i 1m /dev/sdb1
-m # porcentaje de espacio reservado para root
-L # estblece etiqueta del volumen
-U [uuid|random|time]# añadir UUID
-j dispositivo # convertir de ext2 a ext3
-0 extents,uninit_bs,div_index dispositivo # convertir de ext3 a ext4
# cambiar espacio reservado de root a 1% y aññadir label buster
sudo tune2fs -m 1 -L buster /dev/sda3
XFS tiene sus propios comandos para verificar su sistema de archivos:
-
xfs_repair
es el equivalente a fsck, para sistemas XFSxfs_repair /dev/sdaX
-
xfs_db
es una herramienta de depuracion de xfs, contiene sus propios subcomandos -
xfs_fsr
defragmenta el sistema de ficheros, reorganiza sus trozos para que estén juntosxfs_fsr /dev/sdaX
xfs-info device|puntoMontaje
xfs_reapir -n /dev/sda1 # buscar errores
-m N # limita la memoria que puede utilizar repair, default 75% del sistema
-d # reparación de sistemas montados en lectura
-v # vervose
xfs_admin
-L etiqueta device # asignar etiqueta max 12 caracteres
-U uuid device # añadir uuid
xfs_growfs -D Nuevotamaño device # aumentar filesistem a tamaño indicado
xfs_growfs -d device # aumentar tamaño al max permitido
xfs_fsr device # defragmentar
mkfs.xfs -f -d size=25g /dev/sdb # crear filesistem xfs de 25G
xfsdump
El comando gestiona niveles de copia de seguridad, lo que permite implementar estrategias de copias incrementales. Solo se puede hacer una copia de seguridad de un sistema de archivos si está montado.
xfsdump -F -f /var/datassave.dump /dev/sdb
-f file # archivo donde se crea la copia
-F # modo desatendido
xfsrestore
-t -f /var/datassave.dump # muestra objetos del dump
-f /var/datassave.dump . # restaurar
203.3 Crear y configurar opciones
Encriptación de datos
Una manera simple de protejer los datos es cifrando y descifrando manualmente el contenido con datos sensibles.
cencrypt file -K pass
ccat file
cdecrypt file -K pass
Otra forma de protejer los datos es cifrar directamente una partición, siempre teniendo cuidado de no cifrar la partición que contenga el kernel.
cryptsetup luksFormat /dev/vdb1 # formatear particion como encrypt_luks
cryptsetup luksOpen /dev/vdb1 cryptpart # crear volumen y generar pasword
mkfs.ext4 /dev/mapper/cryptpart # formatear volumen
mount /dev/mapper/cryptpart /mnt/secret # montar volumen en el sistema
cryptsetup luksDump /dev/vd1 # ver informacion
El mejor compromiso entre la flexibilidad y la eficiencia lo aporta el cifrado a nivel de sistema de archivos.
En el siguente ejemplo se creasn dos directorios y se montan uno encima del otro. los archivos creados en datos se trabaja como siempre, pero al desmontar todos esos archivos estan encriptados en .datos
mkdir .datos datos
mkdir -t ecryptfs .datos datos
umount datos
Administración de datos almacenados
udev
funciona en segundo plano por su cuenta, pero en ocasiones queremos gestionar algún comportamiento especifico y esto es posible hacerlo mediante reglas
La ubicación de estas reglas se precisa en el archivo de configuración de udev: /etc/udev/udev.conf. En el supuesto de que no se haya informado, su valor por defecto es /etc/udev/rules.d.
udevadm info /dev/sda # información de cdisco
udevmonitor # monitorización
lsdev # ver perifericos reconocidos
ls /dev/disk/ # directorios de reconocimiento de discos
by-id by-partuuid by-path by-uuid
El rendimiento de discos lo checkeamos con hdparm
, también se puede cambiar algunas opciones de disco.
hdparm /dev/sda # ver opciones
-c # acceso 32bits
-d # acceso DMA
-a # lectura canticipada
Los fallos en disco debido a bloques defectuosos se comprueba con badblocks
una vez detectados se tendrán que gestionar mediante ordenes como e2fsck o mke2fs
badblocks -b tamaño_bloke -o archivo_salida
badblocks /dev/sdb1
Gestión de discos iSCSI
SCSI (Small Computer System Interface) es una familia de protocolos de comunicación destinados a los dispositivos de entrada/salida. . Es un protocolo cliente servidor, que permite al cliente (el sistema) enviar peticiones al servidor (el controlador SCSI), que se encarga de gestionar las unidades de almacenamiento.
iSCSI (Internet SCSI) es una extensión de red del protocolo SCSI, que permite transferir comandos SCSI a través de una red TCP/IP. De este modo se pueden gestionar a distancia accesos a discos de bajo nivel, sobre una topología de tipo Ethernet.
Open-iSCSI es una implementación de este protocolo sobre Linux. Este software permite a un sistema Linux utilizar este protocolo como cliente (acceder a los servidores de almacenamiento de disco iSCSI).
Los nombres iSCSI utilizan una nomenclatura de tipo WWN (World Wide Name), de manera que asegure que sea única:
iqn.: prefijo que especifica el espacio de nombres (iSCSI qualified name).
AAAA-MM.: fecha (Año-Mes) prevista que corresponderá al primer mes de asignación del nombre de dominio utilizado por la autoridad administradora de este WWN.
Dominio: nombre de dominio, en orden inverso, de la autoridad administradora de este WWN.
:cadena_ident: eventualmente, identificador del elemento designado para este nombre. La unicidad de este identificador es responsabilidad de la autoridad administradora del WWN.
iqn.2014-01.net.pas:cloud1.target1
La implementación de un cliente iSCSI en Linux, para permitir al sistema utilizar discos remotos a través de una red TCP/IP, se hace mediante tres conjuntos de elementos:
- Un módulo central que gestiona las interfaces de red TCP/IP.
- Un módulo servidor que garantice la comunicación con los servidores de almacenamiento de destino.
- Comandos de gestión que permiten gestionar las unidades lógicas de almacenamiento de los servidores de destino iSCSI.
El archivo de configuración por defecto del servidor iscsid es /etc/iscsi/iscsid.conf
.
El descubrimiento de un servidor iSCSI se hace mediante su portal de red, identificado por una dirección IP.
iscsiadm -m discovery -t sendtargets -p 192.168.0.39 # descubrir servidor
# conectar servidor
iscsiadm -m node -T iqn.2008-09.com.ejemplo:server.target1 -p 192.168.0.39 --login
# desconectar servidor
iscsiadm -m node -T iqn.2008-09.com.ejemplo:server.target1 -p 192.168.0.39 -logout
Linux como servidor iSCSI arranca como servicio, se pone a la escucha de las peticiones de los clientes iSCSI (los iniciadores) y por defecto en el puerto 3260. Este servidor gestiona uno o varios destinos y, para cada uno de ellos, una o más unidades lógicas (LUN).
En el archivo de configuración /etc/tgt/targets.conf
:
<target iqn.2008-09.com.ejemplo:server.target1>
backing-store /dev/sdf
</target>
service tgtd start
tgtadm --mode target --op show # ver
Duplicación y sincronización de datos
El comando de copia bloque a bloque dd
permite realizar copias de bajo nivel de un periférico.
dd if=entrada of=salida bs=tamaño_del_bloque count=número_de_bloques
if=origen
of=destino
bs # tamaño del bloque a copiar
count # cantidad de bloques a copiar
dd if=/dev/sdb1 of=/home/alumno/usb.img
dd if=/dev/zero of=fichero bs=1024 count=100000 # archivo 100M
mkisofs o genisoimage
genera archivos ISO. Puede ser útil generar imágenes ISO a partir de una estructura de directorios.
genisoimage -J -o imagen.iso directorio
-J # opcional: Mejora la compatibilidad con los sistemas Windows.
-o # archivo imagen a generar
-r # permisos de lectura a todos los archivos
mount -t iso9660 -o loop archivo_de_imagen punto_de_montaje
Sincronización de datos con rsync
rsync -a m04-lm /tmp/proves/ # copia el directorio
rsync -a --delete m04-lm/ /tmp/proves/ # sincronizar borrando si hay cambios
rsync -a m04-lm/ localhost:/tmp/proves/ # remoto
-n --dry-run # acer test
rsync -a ~/dir1 username@remote_host:destination_directory
rsync -av --delete -e ssh /root/data root@192.168.200.106:/root/svg # conexion segura
rsync puede funcionar como servidor añadiendo ciertos permisos al archivo /etc/rsyncd.conf
log file = /var/log/rsync.log
pid file = /var/run/rsyncd.pid
[public]
comment = recurso publico
path = /home/debian/rsync/public
[read]
comment = recurso solo lectura
path = /home/debian/rsync/read
read only = yes
[privat]
comment = recurso de escritura
path = /home/debian/rsync/privat
list = no
read only = no
write only = no
auth users = jorge
secrets file = /etc/rsyncd.secrets
[write]
comment = recurso de escritura
path = /home/debian/rsync/write
read only = no
write only = yes
read only = no
Imprescindible para que el servicio pueda escribir en el disco.
Para el modo servidor tiene algunas ordenes adicionales
rsync localhost:: # listar recursos
rsync localhost::public # listar contenido de public
rsync -a file localhost::write # subir contenido
rsync -a localhost::public . # descargar contenido