Sistemas de archivos
Contenido
- 1 Paso 1: Añadir un disco a la máquina virtual
- 2 Paso 2: Ver discos en Linux
- 3 Paso 3: Creación de particiones en Linux
- 4 Paso 4: Formatear partición: crear un sistema de archivos
- 5 Paso 5: Montar y desmontar particiones en Linux
- 6 Paso 6: Creación de sistemas de ficheros de red NFS
- 7 Paso 7: Acceso a sistema de ficheros de red NFS
- 8 Paso 8: Creación de un RAID
- 8.1 Paso 8.1: Añadir discos a la máquina virtual
- 8.2 Paso 8.2: Detectar, particionar y formatear discos
- 8.3 Paso 8.3: Instalación de la herramienta de mdadm
- 8.4 Paso 8.4: Utilización de la herramienta de mdadm
- 8.5 Paso 8.5: Guardar la configuración del RAID
- 8.6 Paso 8.6: Formatear el RAID
- 8.7 Paso 8.7: Montar el RAID
- 8.8 Paso 8.8: Comprobar tolerancia a fallos
Paso 1: Añadir un disco a la máquina virtual
Vamos a usar cualquier máquina virtual de ubuntu cloud que hayamos usado previamente y vamos a añadir dos discos virtuales para hacer pruebas.
- Abrimos la ventana de la máquina virtual a usar
- Nos movemos a Vista -> Detalles, y le damos al botón de 'Agregar hardware'
- Seleccionamos Almacenamiento, le damos un tamaño de 5GB y en el tipo de dispositivo seleccionamos 'dispositivo de disco'. Con estas opciones, pulsamos Finalizar., y ya tendremos nuestro disco creado.
- Repetir el paso anterior y crear otro disco de 4GB
Paso 2: Ver discos en Linux
Para comprobar los discos añadidos en el paso 1, tenemos varias opciones. Antes que nada, volvamos a la vista consola (Vista -> Consola) y arranquemos la máquina (Máquina virtual -> Ejecutar):
Opción 1
Utilizar el comando lsblk, el cual nos mostrará una salida similar a la siguiente:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 2.2G 0 disk
├─vda1 252:1 0 2.1G 0 part /
├─vda14 252:14 0 4M 0 part
└─vda15 252:15 0 106M 0 part /boot/efi
vdb 252:16 0 5G 0 disk
vdc 252:32 0 4G 0 disk
Aqui vemos que tenemos 3 discos:
- vda: el actual de ubuntu que añadimos al crear la máquina
- vdb: el disco que añadimos en el paso 1 de 5GB
- vdc: el disco que añadimos en el paso 1 de 4GB
También vemos que el disco vda tiene 3 particiones: vda1, vda14 y vda15
Opción 2
utilizar fdisk, este comando necesita permisos de superusuario, así que hacemos lo siguiente:
sudo fdisk -l
Nos mostrará una salida similar a la imagen 'fdisk'.
Opción 3
Esta opción es solo por ver que todo en linux es un fichero, hasta un nuevo disco añadido se trata como tal, hacemos lo siguiente:
ls -l /dev
Deberíamos de ver algo similar a lo siguiente:
brw-rw---- 1 root disk 252, 0 ago 16 13:31 vda
brw-rw---- 1 root disk 252, 1 ago 16 13:31 vda1
brw-rw---- 1 root disk 252, 14 ago 16 13:31 vda14
brw-rw---- 1 root disk 252, 15 ago 16 13:31 vda15
brw-rw---- 1 root disk 252, 16 ago 16 13:31 vdb
brw-rw---- 1 root disk 252, 32 ago 16 13:31 vdc
Podemos ver en la salida del comando ls -l, que el tipo de fichero es 'b', eso significa que es un bloque especial.
CONSEJO: para hacer scroll en la terminal, usamos los atajos Shift + Re Pág y Shift + Av Pág
Paso 3: Creación de particiones en Linux
Vamos a utilizar ahora nuestro disco añadido de 5GB, en el paso anterior deberiamos de haber identificado cual es, en mi caso /dev/vdb, aseguraros cual es el vuestro y comenzaremos a particionar el disco:
sudo fdisk /dev/vdb
Si el disco es nuevo y no ha hecho nada previamente, normalmente viene sin tabla de particiones, así que fdisk se encarga de crear una, seguramente veamos ese mensaje cuando hayamos ejecutado el comando anterior. La tabla de particiones es una pequeña parte del disco que se utiliza para alamacenar la información de las particiones, el formato y si una partición es ejecutable o no.
Una vez hecho esto, veremos que estamos dentro de fdisk (software para particionar un disco), y veremos que este tiene su propia linea de comando.
Ahora veremos la ayuda de fdisk y crearemos una partición de prueba de 3GB
- Introducir la letra 'm' y pulsar Intro, así obtendremos el listado de comandos posibles de fdisk.
- Introducir 'n' y pulsar Intro para crear una nueva partición. Nos preguntará varios detalles:
- Tipo de partición: pulsamos Intro y se asignará primaria por defecto.
- Número de partición: pulsamos Intro y se asignará 1 por defecto.
- Primer sector: pulsamos Intro para que se asigne por defecto.
- Último sector: vamos a crear una partición de 3GB, así que escribimos +3G y pulsamos Intro
- Ya está creada nuestra primera partición, aunque los cambios todavía no se han escrito en disco, para ello, necesitaremos aplicar estos cambios, y lo hacemos con el comando 'w' y pulsando Intro.
- Ahora si, ya tenemos nuestra partición creada. Vamos a comprobar que el cambio está hecho, usando lsblk por ejemplo, deberíamos de obtener algo similar a la siguiente:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 2.2G 0 disk
├─vda1 252:1 0 2.1G 0 part /
├─vda14 252:14 0 4M 0 part
└─vda15 252:15 0 106M 0 part /boot/efi
vdb 252:16 0 5G 0 disk
└─vdb1 252:17 0 3G 0 part
vdc 252:32 0 4G 0 disk
Vamos ahora a crear en el disco de 4GB (vdc en mi caso) dos particiones de 2GB cada una, y la partición de 3GB creada anteriormente, vamos a borrarla:
- sudo fdisk /dev/vdc
- comando 'n' e Intro
- Todos los datos por defecto, excepto el último sector, donde pondremos '+2G'
- Una vez creada la primera partición, antes de escribir a disco, vamos a crear la segunda partición, repetimos los pasos anteriores. Vamos a tener un problema y cuando lleguemos al último paso, nos dirá que 2GB no es posible. Si tenemos un disco de 4GB, ¿Por qué no nos permite crear dos particiones de 2GB? Exacto, por la tabla de particiones. Lo que haremos en el último paso será dejar el valor por defecto, que será todo el disco sobrante.
- Vamos a comprobar antes de escribir los cambios, que todo está bien, comando 'p' e Intro debería de mostrarnos una salida similar a:
Device Boot Start End Sectors Size Id Type
/dev/vdc1 2048 4196351 4194304 2G 83 Linux
/dev/vdc2 4196352 4196351 4194304 2G 83 Linux
- Si todo está correcto, pulsamos 'w' e Intro y aplicamos los cambios
- Ahora entraremos con el disco /dev/vdb para eliminar la partición: sudo fdisk /dev/vdb
- Ahora vamos a eliminar la particion, pulsamos 'd' e Intro. Como solo tenemos una partición, nos la borra directamente, en caso de tener más de una, nos preguntaría cual queremos borrar.
- Aplicamos los cambios: 'w' e Intro
- Comprobamos que todo ha quedado a nuestro gusto con el comando lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 2.2G 0 disk
├─vda1 252:1 0 2.1G 0 part /
├─vda14 252:14 0 4M 0 part
└─vda15 252:15 0 106M 0 part /boot/efi
vdb 252:16 0 5G 0 disk
vdc 252:32 0 4G 0 disk
├─vdc1 252:33 0 2G 0 part
└─vdc2 252:34 0 2G 0 part
Paso 4: Formatear partición: crear un sistema de archivos
Hasta ahora solo hemos definido en la tabla de particiones donde comienza y acaba cada partición, pero no podremos utilizarla hasta que no creemos un sistema de archivos en la partición. Para crear un sistema de archivos utilizaremos el comando 'mkfs', y tendremos varias opciones a la hora de crear uno: ext2, ext3, ext4, reiserfs, fat, ntfs, ...
Nosotros creamos un sistema ext4 para /dev/vdc1 y uno fat para /dev/vdc2:
sudo mkfs -t ext4 /dev/vdc1
sudo mkfs -t fat /dev/vdc2
Una vez hecho esto, vamos a comprobar que se han aplicado bien los cambios:
sudo file -s /dev/vdc1
sudo file -s /dev/vdc2
En la salida deberíamos de obtener que tenemos un sistema de ficheros ext4 y otro FAT.
Paso 5: Montar y desmontar particiones en Linux
Tras haber creado en los pasos anteriores unas particiones y formatearlas, vamos a pasar ahora a montarlas para poderles dar uso. En linux montar una partición significará que asignaremos una carpeta del sistema a una partición, y en ella estará todo el contenido del disco.
Mount y umount
Empezaremos utilizando los comandos mount y umount para montar y desmontar particiones. Vamos a montar las particiones /dev/vdc1 y /dev/vdc2, la primera la montaremos en /home/ubuntu/part1 y la segunda en /home/ubuntu/part2:
mkdir /home/ubuntu/part1 # Creamos la carpeta donde vamos a montar la partición
sudo mount /dev/vdc1 /home/ubuntu/part1 # montamos la partición
Lo mismo con /dev/vdc2
mkdir /home/ubuntu/part2
sudo mount /dev/vdc2 /home/ubuntu/part2
Vamos a ver el contenido de las particiones montadas:
ls /home/ubuntu/part1
ls /home/ubuntu/part2
Veremos que tenemos una carpeta lost+found en el sistema ext4, la cual se utiliza para los errores en el sistema de archivos, cuando hay un error y encontramos un fichero sin referencia, este se añadiría dentro de esta carpeta, y existiría la posibilidad de recuperarlo.
Ahora vamos a crear un nuevo fichero dentro de nuestra partición /dev/vdc1, la vamos a desmontar, y vamos a montarla en otro directorio diferente:
sudo touch /home/ubuntu/part1/nuevoFichero # tenemos que crearlo con sudo porque no tenemos permisos, luego veremos esto
sudo umount /dev/vdc1
ls /home/ubuntu/part3 # el fichero ya no está, la partición fue desmontada
mkdir /home/ubuntu/part3
sudo mount /dev/vdc1 /home/ubuntu/part3
ls /home/ubuntu/part3
Comprobaremos que el fichero creado en /home/ubuntu/part1 lo tenemos ahora en /home/ubuntu/part3, ya que realmente, cuando lo guardamos, estaba en la partición que montamos.
También podemos ver que utilizando el comando lsblk, podremos observar donde está montada la partición.
Montaje automático al iniciar el sistema
Ahora veremos como automatizar el proceso de montaje cada vez que se inicia el sistema, ya que sería tedioso tener que montar todos las particiones cada vez que apagamos y encendemos nuestra máquina.
El proceso de automatizado suele hacerse dentro del fichero /etc/fstab, veamos su contenido:
cat /etc/fstab
Cada fila contiene un montaje de una partición, la cual contiene:
- Identificación de la partición: en este caso se está utilizando una etiqueta de
la partición, pero podemos utilizar cualquier cosa que identifique al dispositivo, como el uuid o la localización (/dev/vdc1)
- Punto de montaje: donde se montará el dispositivo
- Sistema de archivos: ext4, fat32, reiserfs
- Opciones: aquí pondremos las diferentes opciones de montaje, como por ejemplo
montar para solo lectura, dar permisos a un usuario para utilizar la partición, etc. Hay que tener en cuenta que cada sistema tiene sus opciones.
- backup: si está a cero, no haremos backup
- chequeo: si está a cero no se hace chequeo al iniciar
Vamos a añadir unas líneas para montar automáticamente las particiones al iniciar:
Utilizando el editor que prefieras, añadir lo siguiente en el fichero /etc/fstab. Importante hacerlo con sudo para que nos permita escribir en el fichero:
/dev/vdc1 /home/ubuntu/part1 ext4 rw,user,exec 0 0
/dev/vdc2 /home/ubuntu/part2 vfat umask=000 0 0
Una vez guardado los cambios, vamos a aplicarlos sin reiniciar, para comprobar que funciona correctamente:
mount -a # aplica los cambios de fstab sin necesidad de reiniciar
lsblk # comprobar que está bien montado
Ahora vamos a comprobar si nuestro usuario tiene permisos para escribir:
touch /home/ubuntu/part1
touch /home/ubuntu/part2
En el primero no nos dejará y en el segundo no tendremos problemas. Esto funciona así porque los sistemas ext4, para poder tener permisos de escritura, tenemos que darlo sobre el sistema de ficheros, mientras que el sistema fat, tiene la opción umask que ya hace el trabajo. Para tener permisos de escritura con nuestro usuario en la partición, tendremos que darle permiso a la partición para poder escribir en ella, por ejemplo, utilizando el comando chown:
sudo chown ubuntu /home/ubuntu/part1
Si probamos ahora, podremos escribir en la partición de ext4, y al haber dado permisos, ya nos funcionará siempre:
touch /home/ubuntu/part1
Ahora, vamos a desmontar todo y a reiniciar la máquina para comprobar que está todo funciona.
sudo umount /dev/vdc1
sudo umount /home/ubuntu/part2 # Es otra forma de desmontar, dando el punto de montaje
lsblk # comprobamos que no estén montadas
Reiniciamos la máquina (Máquina virtual -> Apagar -> Reiniciar) y comprobamos:
lsblk
Paso 6: Creación de sistemas de ficheros de red NFS
Vamos a crear un sistema de ficheros de red compartido a través de NFS, para ello vamos a necesitar crear un servidor donde iniciemos este sistema al que se conectarán luego los demás (clientes).
Para configurar el servidor, necesitaremos abrir una de las máquinas virtuales creadas anteriormente, e instalar la herramienta necesaria:
sudo apt nfs-kernel-server
Una vez hecho esto, vamos a crear un directorio el cual será el que compartiremos, por ejemplo:
sudo mkdir /home/shared
Ahora vamos a editar el servidor nfs, para ello, tendremos que editar el fichero /etc/exports, pero antes, veremos cual es nuestra IP, que nos hará falta:
ifconfig
La salida de este comando será similar a la siguiente:
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.167 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::ea6a:64ff:fe66:66a0 prefixlen 64 scopeid 0x20<link>
ether e8:6a:64:66:66:a0 txqueuelen 1000 (Ethernet)
RX packets 3821 bytes 2152349 (2.0 MiB)
RX errors 0 dropped 268 overruns 0 frame 0
TX packets 3386 bytes 266855 (260.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xa4300000-a4320000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 220506 bytes 16017419 (15.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 220506 bytes 16017419 (15.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Nos fijamos donde pone inet, y miramos la red que NO sea 'lo', en este caso, la IP buscada sería 192.168.0.167. Ahora si, vamos a editar el /etc/exports:
/home/shared 192.168.0.*(rw,sync,subtree_check)
Explicamos los parámetros:
- Carpeta a compartir
- Le damos la IP con un * al final para poder permitir a todas las redes poder
acceder, desde la 192.168.0.0 a la 192.168.0.255
- Aquí tenemos muchas opciones disponibles:
- ro: solo lectura
- rw: lectura y escritura
- subtree_check: comprueba subdirectorios para compartirlos también
- sync: forzar a hacer las operaciones de forma síncrona, para evitar corrupción de datos
Una vez modificado el fichero, vamos a reiniciar el servicio NFS:
sudo service nfs-kernel-server restart
Una vez hecho esto, nuestro servidor NFS ya está configurado.
Paso 7: Acceso a sistema de ficheros de red NFS
Para acceder al sistema de ficheros NFS creado en el paso anterior, tendremos que configurar el cliente para montar el sistema de ficheros compartido. El cliente lo montaremos en otra máquina virtual diferente.
Creamos y abrimos esta nueva máquina e instalamos una herramienta para poder montar el NFS en nuestra máquina:
sudo apt install nfs-common
Con esto ya podremos montar en nuestro cliente el NFS. Recordemos la IP que obtuvimos en el paso anterior cuando montamos el servidor, y hacemos lo siguiente:
sudo mount 192.168.0.167:/home/shared /mnt
Ya tenemos nuestro sistema de ficheros compartidos por red montado, vamos a probar que todo funciona.
1. En la máquina donde instalamos el servidor de NFS, vamos a crear una carpeta
y un fichero dentro de la carpeta compartida, para ellos necesitaremos darle permisos a nuestro usuario previamente:
sudo chown -R ubuntu /home/shared
mkdir /home/shared/carpeta
touch /home/shared/carpeta/fichero
2. Vamos a comprobar en el cliente, que estos ficheros se están mostrando:
ls /mnt
ls /mnt/carpeta
3. Ahora lo hacemos al contrario, escribiremos desde el cliente, y vamos a verlo en el servidor:
mkdir /mnt/carpeta2
touch /mnt/carpeta2/fichero
4. Entramos en el servidor y comprobamos:
ls /home/shared
ls /home/shared/carpeta2
Paso 8: Creación de un RAID
Cuando tenemos un servidor, deberíamos de darle importancia a que los datos no se pierdan, a parte de realizar backup, podemos también montar un RAID. hay varios tipos de RAID diferentes, nosotros vamos a montar un RAID 1, que no es más que tener una copia en espejo.
Ventajas: ganaremos seguridad y mejoraremos velocidad de lectura. Desventajas: perdemos el 50% del espacio.
Lo que haremos será con dos discos duros de 5GB cada uno, montar una carpeta donde el usuario guarde sus datos. Empecemos:
Paso 8.1: Añadir discos a la máquina virtual
Como explicamos en el Paso 1, vamos a añadir a una máquina virtual 2 discos duros de 5GB cada uno.
Paso 8.2: Detectar, particionar y formatear discos
Como explicamos en los Pasos 2, 3 y 4, vamos a buscar los discos que hemos añadido, los particionaremos y formatearemos:
lsblk # comprobamos los dicos, en mi caso sería vdb y vdc
sudo fdisk /dev/vdb # particionamos primero vdb
Usamos la opción 'n', y marcamos todo por defecto, una ver terminado, escribimos con el comando 'm'. La opción por defecto crea una partición que ocupar el disco duro completo.
Ahora hacemo lo mismo con vdc:
sudo fdisk /dev/vdc # particionamos ahora vdc, de la misma forma que vdb
Una vez particionado, comprobaremos que todo está bien:
lsblk # debería de mostrarnos las particiones vdb1 y vdc1
Ahora vamos a formatear ambas particiones con ext4:
sudo mkfs -t ext4 /dev/vdb1
sudo mkfs -t ext4 /dev/vdc1
NOTA: nosotros hemos utilizados dos discos duros de 5GB, pero también podríamos haber seleccionado para el ejemplo uno de 10GB y crear dos particiones de 5GB cada una.
Paso 8.3: Instalación de la herramienta de mdadm
Por defecto, esta herramienta viene instalada en el ubuntu cloud server, pero en el caso de utilizar otra distribución diferente, necesitaremos instalarla:
sudo apt install mdadm
Paso 8.4: Utilización de la herramienta de mdadm
Empezamos escribiendo el comando, y luego pasamos a explicar los detalles:
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/vdb1 /dev/vdc1
Explicamos los parámetros:
- --create: para crear el raid
- --verbose: nos muestra más información del proceso
- /dev/md0: El nombre del nuevo raid, normalmente se utiliza md0
- --level=1: crea un raid 1 que es el que queremos
- --raid-devices=2: cantidad de dispositivos que vamos a utilizar, 2 en nuestro caso
- /dev/vdb1: Nombre de la partición 1
- /dev/vdc1: Nombre de la partición 2
Una vez ejecutado el comando, creará el RAID 1, pasemos ahora a ver los detalles:
sudo mdadm --detail /dev/md0
Esto nos mostrará la información del RAID, lo que a nosotros nos interesa son las últimas líneas:
Name : ubuntu:0 (local to host ubuntu)
UUID : e40ba520:5ed1bd37:5c818550:03a18368
Events : 17
Number Major Minor RaidDevice State
0 252 17 0 active sync /dev/vdb1
1 252 33 1 active sync /dev/vdc1
Aqui vemos el UUID de nuestro RAID, y también veremos en las dos última líneas, las dos particiones, las cuales están marcadas con active sync, esto quiere decir que están activos y sincronizados. Puede que si hacemos muy rápido este comando, muestre algo diferente porque tarda un poco en sincronizar la primera vez, pero pronto estará.
Paso 8.5: Guardar la configuración del RAID
Si dejamos todo como está y reinicamos, el nombre del raid podría cambiar, para evitarlo, vamos a modificar la configuración, tendremos que editar el fichero /etc/mdadm/mdadm.conf y debajo de la línea que pone '# definitions of existing MD arrays', añadir lo siguiente (notar que el UUID es el de nuestro dispositivo, que lo obtuvimos en el paso anterior):
ARRAY /dev/md0 UUID=e40ba520:5ed1bd37:5c818550:03a18368
Así, cuando reiniciemos, no tendremos ese problema.
Paso 8.6: Formatear el RAID
Al igual que con cualquier otra partición, esta también necesita ser formateada.
sudo mkfs -t ext4 /dev/md0
Paso 8.7: Montar el RAID
Como previamente hemos hecho, crearemos una carpeta donde montar el RAID y lo montaremos usando el comando mount:
mkdir /home/ubuntu/datos
sudo mount /dev/md0 /home/ubuntu/datos
sudo chown -R ubuntu /home/ubuntu/datos
Así ya tenemos nuestro RAID montado y podemos utilizarlo, vamos a probar a escribir en él.
touch /home/ubuntu/datos/fichero
Esto está funcionando, pero como comentamos en uno de los pasos previos, el comando mount solo montará el raid temporalmente, para automatizar este montado al arrancar, tendremos que añadir la siguiente línea a /etc/fstab:
/dev/md0 /home/ubuntu/datos ext4 defaults
Paso 8.8: Comprobar tolerancia a fallos
Vamos a probar que sin un disco duro, todo sigue funcionando bien, ya que al tener un RAID 1 y tener los datos en espejo, no debería de haber problemas.
Vamos a la máquina virtual y quitamos uno de los discos duros (Vista -> Detalle), seleccionamos uno de los discos duros y le damos a 'Quitar'.
Una vez hecho esto, nos movemos de nuevo a la consola (Vista -> Consola) y vamos a ver los detalles de nuestro RAID:
sudo mdadm --detail /dev/md0
Ahora vemos en las dos últimas líneas que uno de los discos tiene el estado removed, pero si comprobamos el fichero creado previamente, seguirá ahí:
ls /home/ubuntu/datos/