Este post no pretende ser un manual de ZFS, solo una sencilla guía rápida que permita a los neófitos en la materia, disponer de un punto de inicio que les sirva de trampolín, para poder profundizar en ZFS. Por esta razón, el post solo cuenta con 12 sencillos pasos, los cuales describen a grandes rasgos las operaciones básica que alguien que empieza debe aprender.
ZFS dispone de 2 comandos zpool y zfs.
Paso 1:Crear un pool
La primera operación cuando se comienza con ZFS es la creación de un pool de discos.
root # zpool create -f pool_prueba c2t500A098286584110d1 c2t500A098286584110d2Se crea un pool llamado pool_prueba utilizando los discos c2t500A098286584110d1 y c2t500A098286584110d2.
Con el zpool list podemos ver la lista de pooles que están configurados en nuestro sistema.
root # zpool listNAME SIZE USED AVAIL CAP HEALTH ALTROOTpool_prueba 19.9G 90K 19.9G 0% ONLINE -root #root # df -h | grep poolpool_prueba 20G 24K 20G 1% /pool_pruebaroot #
Paso 2:Crear FS ZFS
Una vez creado el pool de disco, podemos crear los sistemas de ficheros, para ello utilizaremos el comando zfs.
root # zfs create pool_prueba/fs1root # zfs create pool_prueba/fs2Se han creado los FS en el pool pool_prueba llamados fs1 y fs2.
root # df -k | grep poolpool_prueba 20514816 27 20514668 1% /pool_pruebapool_prueba/fs1 20514816 24 20514668 1% /pool_prueba/fs1pool_prueba/fs2 20514816 24 20514668 1% /pool_prueba/fs2root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 148K 19.6G 27.5K /pool_pruebapool_prueba/fs1 24.5K 19.6G 24.5K /pool_prueba/fs1pool_prueba/fs2 24.5K 19.6G 24.5K /pool_prueba/fs2root #
Como podemos ver con el comando df y con zfs list, los nuevos FS se han creado y montado por defecto sobre el directorio /pool_prueba
Paso 3:Cambio del punto de montaje
Podemos cambiar los puntos de montaje de los nuevos sistemas de ficheros creados en el paso anterior, con el comando zfs set
root # zfs set mountpoint=/fs1 pool_prueba/fs1root #root # zfs set mountpoint=/fs2 pool_prueba/fs2root #Se cambia el punto de montaje del FS pool_prueba/fs1 para que sea el directorio /fs1, lo mismo hacemos con el FS pool_prueba/fs2
root # df -k | grep poolpool_prueba 30772224 24 30771987 1% /pool_pruebapool_prueba/fs2 30772224 24 30771987 1% /fs2pool_prueba/fs1 30772224 28 30771987 1% /fs1
Paso 4:Añadir discos al pool
Esta operación nos pemite añadir nuevos disco a nuestro pool. Utilizaremos el comando zpool add.
root # zpool add -f pool_prueba c2t500A098286584110d3root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 97.9M 29.3G 24.5K /pool_pruebapool_prueba/fs1 97.8M 29.3G 97.8M /fs1pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #
Paso 5:Atributos de un FS
Podemos ver los atributos definidos en un FS determinado, empleando el comando zfs get
root # zfs get all pool_prueba/fs1NAME PROPERTY VALUE SOURCEpool_prueba/fs1 type filesystem -pool_prueba/fs1 creation Wed Dec 10 18:38 2008 -pool_prueba/fs1 used 51K -pool_prueba/fs1 available 29.3G -pool_prueba/fs1 referenced 28.5K -pool_prueba/fs1 compressratio 1.00x -pool_prueba/fs1 mounted yes -pool_prueba/fs1 quota none defaultpool_prueba/fs1 reservation none defaultpool_prueba/fs1 recordsize 128K defaultpool_prueba/fs1 mountpoint /fs1 localpool_prueba/fs1 sharenfs off defaultpool_prueba/fs1 checksum on defaultpool_prueba/fs1 compression off defaultpool_prueba/fs1 atime on defaultpool_prueba/fs1 devices on defaultpool_prueba/fs1 exec on defaultpool_prueba/fs1 setuid on defaultpool_prueba/fs1 readonly off defaultpool_prueba/fs1 zoned off defaultpool_prueba/fs1 snapdir hidden defaultpool_prueba/fs1 aclmode groupmask defaultpool_prueba/fs1 aclinherit secure defaultpool_prueba/fs1 canmount on defaultpool_prueba/fs1 shareiscsi off defaultpool_prueba/fs1 xattr on defaultroot #
Paso 6:Estado del pool
Para chequear el estado de un pool, debemos utilizar el comando zpool status.
root # zpool statuspool: pool_pruebastate: ONLINEscrub: none requestedconfig:NAME STATE READ WRITE CKSUMpool_prueba ONLINE 0 0 0c2t500A098286584110d1 ONLINE 0 0 0c2t500A098196584110d2 ONLINE 0 0 0c2t500A098286584110d3 ONLINE 0 0 0errors: No known data errorsroot #
Paso 7: Crear Snapshots
Un snapshot es una imagen de un FS en un momento determinado, esta imagen de solamente de lectura y nos permite disponer de los datos de un FS en un momento concreto.
rroot # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 200K 29.3G 24.5K /pool_pruebapool_prueba/fs1 28.5K 29.3G 28.5K /fs1pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #
Para crear un snapshot debemos emplear el comando zfs snapshot y facilitar el nombre del FS del que queremos hacer el snapshot seguido por una @ y el nombre del snapshot que queremos crear. Para nuestro ejemplo se ha creado el snapshot pool_prueba/fs1@snap1
root # zfs snapshot pool_prueba/fs1@snap1root #root # cd /fs1root # ls -lisatotal 173 3 drwxr-xr-x 2 root sys 8 Dec 10 18:39 .3 2 drwxr-xr-x 31 root root 1024 Dec 10 18:42 ..4 2 -rw-r--r-- 1 root root 8 Dec 10 18:37 prueba15 2 -rw-r--r-- 1 root root 16 Dec 10 18:37 prueba26 2 -rw-r--r-- 1 root root 24 Dec 10 18:37 prueba37 2 -rw-r--r-- 1 root root 32 Dec 10 18:39 prueba48 2 -rw-r--r-- 1 root root 40 Dec 10 18:39 prueba59 2 -rw-r--r-- 1 root root 48 Dec 10 18:39 prueba6root #
En el FS, se ha creado un directorio oculto .zfs, el cual contiene un subdirectorio por cada snapshot que se cree en el FS.
root # cd .zfsroot # lssnapshotroot # ls snapshot/snap1root # lssnapshotroot # cd snapshot/snap1/root # lsprueba1 prueba2 prueba3 prueba4 prueba5 prueba6root # ls -lrttotal 12-rw-r--r-- 1 root root 8 Dec 10 18:37 prueba1-rw-r--r-- 1 root root 16 Dec 10 18:37 prueba2-rw-r--r-- 1 root root 24 Dec 10 18:37 prueba3-rw-r--r-- 1 root root 32 Dec 10 18:39 prueba4-rw-r--r-- 1 root root 40 Dec 10 18:39 prueba5-rw-r--r-- 1 root root 48 Dec 10 18:39 prueba6root # ls > prueba10
bash: prueba10: Read-only file systemPodemos comprobar que el snapshot es un FS de solo lectura.
root # pwd/fs1/.zfs/snapshot/snap1root # cd /root # ls -l /fs1/.zfs/snapshot/snap1total 12-rw-r--r-- 1 root root 8 Dec 10 18:37 prueba1-rw-r--r-- 1 root root 16 Dec 10 18:37 prueba2-rw-r--r-- 1 root root 24 Dec 10 18:37 prueba3-rw-r--r-- 1 root root 32 Dec 10 18:39 prueba4-rw-r--r-- 1 root root 40 Dec 10 18:39 prueba5-rw-r--r-- 1 root root 48 Dec 10 18:39 prueba6root # cd /fs1root # lsprueba1 prueba2 prueba3 prueba4 prueba5 prueba6root # ls > prueba10root # ls > prueba11root # ls > prueba12
Hemos modifcado el FS pool_prueba/fs1 y vamos a crear un nuevo snapshot
root # pwd/fs1root # cd ..root # zfs snapshot pool_prueba/fs1@snap2root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 240K 29.3G 24.5K /pool_pruebapool_prueba/fs1 54.5K 29.3G 31K /fs1pool_prueba/fs1@snap1 23.5K - 28.5K -pool_prueba/fs1@snap2 0 - 31K -pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #root # ls -l /fs1/.zfs/snapshot/snap*/fs1/.zfs/snapshot/snap1:total 12-rw-r–r– 1 root root 8 Dec 10 18:37 prueba1-rw-r–r– 1 root root 16 Dec 10 18:37 prueba2-rw-r–r– 1 root root 24 Dec 10 18:37 prueba3-rw-r–r– 1 root root 32 Dec 10 18:39 prueba4-rw-r–r– 1 root root 40 Dec 10 18:39 prueba5-rw-r–r– 1 root root 48 Dec 10 18:39 prueba6/fs1/.zfs/snapshot/snap2:total 18-rw-r–r– 1 root root 8 Dec 10 18:37 prueba1-rw-r–r– 1 root root 57 Dec 10 18:48 prueba10-rw-r–r– 1 root root 66 Dec 10 18:48 prueba11-rw-r–r– 1 root root 75 Dec 10 18:48 prueba12-rw-r–r– 1 root root 16 Dec 10 18:37 prueba2-rw-r–r– 1 root root 24 Dec 10 18:37 prueba3-rw-r–r– 1 root root 32 Dec 10 18:39 prueba4-rw-r–r– 1 root root 40 Dec 10 18:39 prueba5-rw-r–r– 1 root root 48 Dec 10 18:39 prueba6root #
Podemos ver como se ha creado un nuevo subdirectorio /fs1/.zfs/snapshot/snap2 con la imagen actual del FS pool_prueba/fs1.
Paso 8:Restaurar un Snapshot.
Hemos visto como podemos acceder al contenido de los distintos snapshot de un FS determinado. Existe una operación para restauran un snapshot determinado sobre su FS original.
root # lsprueba1 prueba10 prueba11 prueba12 prueba2 prueba3 prueba4 prueba5 prueba6root # rm prueba*
Borramos todos los ficheros del FS pool_prueba/fs1
root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 273K 29.3G 24.5K /pool_pruebapool_prueba/fs1 77K 29.3G 24.5K /fs1pool_prueba/fs1@snap1 23.5K - 28.5K -pool_prueba/fs1@snap2 26K - 31K -pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #
Con el comando zfs rollback vamos a restaurar el snapshot pool_prueba/fs1@snap1 sobre el FS pool_prueba/fs1
root # zfs rollback pool_prueba/fs1@snap1cannot rollback to 'pool_prueba/fs1@snap1': more recent snapshots existuse '-r' to force deletion of the following snapshots:pool_prueba/fs1@snap2root #root # zfs rollback -r pool_prueba/fs1@snap1root # ls /fs1prueba1 prueba2 prueba3 prueba4 prueba5 prueba6root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 237K 29.3G 24.5K /pool_pruebapool_prueba/fs1 51K 29.3G 28.5K /fs1pool_prueba/fs1@snap1 22.5K - 28.5K -pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #
De la salida del comando zfs list podemos ver que ha desaparecido el snapshot pool_prueba/fs1@snap2, esto se debe a que hemos restaurado la imagen de pool_prueba/fs1@snap1, en esta imagen no existía el snapshot snap2, por lo tanto la restauración lo ha eliminado. Debemos tener cuidado con las restauraciones de los snapshots, sobre todo cuando existen varios snapshots.
Paso 9:Crear un clone
Un clone es una imagen de un FS en un momento determinado, pero que puede ser modificada, al contrario de lo que ocurre con los snapshots que son únicamente de lectura.
root # zfs clone pool_prueba/fs1@snap1 pool_prueba/fs3Se crea un clone llamado pool_prueba/fs3 a partir del snapshot pool_prueba/fs1@snap1
root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 204K 29.3G 26.5K /pool_pruebapool_prueba/fs1 27K 29.3G 27K /fs1pool_prueba/fs1@snap1 0 - 27K -pool_prueba/fs2 24.5K 29.3G 24.5K /fs2pool_prueba/fs3 0 29.3G 27K /pool_prueba/fs3
Cambiamos el punto de montaje del nuevo clone.
root # zfs set mountpoint=/fs3 pool_prueba/fs3root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 208K 29.3G 24.5K /pool_pruebapool_prueba/fs1 27K 29.3G 27K /fs1pool_prueba/fs1@snap1 0 - 27K -pool_prueba/fs2 24.5K 29.3G 24.5K /fs2pool_prueba/fs3 0 29.3G 27K /fs3root # ls /fs3prueba1 prueba2 prueba3root #
Con el comando zfs destroy podemos eliminar los clones, los snapshots y los FS.
root # zfs destroy pool_prueba/fs1@snap1cannot destroy 'pool_prueba/fs1@snap1': snapshot has dependent clonesuse '-R' to destroy the following datasets:pool_prueba/fs3root #
Al intentar elminar el snapshot pool_prueba/fs1@snap1 obtenemos un error comunicando que existe un clone que depende del snapshot que queremos destruir.
Paso 10: Promote un clone
Podemos crea un FS a partir de un clone con el comando zfs promote.
root # zfs promote pool_prueba/fs3root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 242K 29.3G 24.5K /pool_pruebapool_prueba/fs1 0 29.3G 27K /fs1pool_prueba/fs2 24.5K 29.3G 24.5K /fs2pool_prueba/fs3 52K 29.3G 28.5K /fs3pool_prueba/fs3@snap1 23.5K - 27K -root # df -k | grep poolpool_prueba 30772224 24 30771982 1% /pool_pruebapool_prueba/fs1 30772224 27 30771982 1% /fs1pool_prueba/fs2 30772224 24 30771982 1% /fs2pool_prueba/fs3 30772224 28 30771982 1% /fs3root # ls /fs3prueba1 prueba2 prueba3 prueba4 prueba5 prueba6root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 242K 29.3G 24.5K /pool_pruebapool_prueba/fs1 0 29.3G 27K /fs1pool_prueba/fs2 24.5K 29.3G 24.5K /fs2pool_prueba/fs3 52K 29.3G 28.5K /fs3pool_prueba/fs3@snap1 23.5K - 27K -root #
Paso 11: Eliminar un FS
Ya hemos visto un ejemplo de como podemos destruir un snapshot utilizando el comando zfs destroy.
root # zfs destroy pool_prueba/fs3@snap1cannot destroy 'pool_prueba/fs3@snap1': snapshot has dependent clonesuse '-R' to destroy the following datasets:pool_prueba/fs1root #root # zfs destroy pool_prueba/fs1root # zfs destroy pool_prueba/fs3@snap1root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 198K 29.3G 24.5K /pool_pruebapool_prueba/fs2 24.5K 29.3G 24.5K /fs2pool_prueba/fs3 28.5K 29.3G 28.5K /fs3
Paso 12: Renombrar un FS
Otra operación útil, sobre todo cuando estamos restaurando snapshots y clones, es el poder renombrar los FS.
root #root # zfs rename pool_prueba/fs3 pool_prueba/fs1root #root # zfs listNAME USED AVAIL REFER MOUNTPOINTpool_prueba 198K 29.3G 24.5K /pool_pruebapool_prueba/fs1 28.5K 29.3G 28.5K /fs3pool_prueba/fs2 24.5K 29.3G 24.5K /fs2root #root # zfs set mountpoint=/fs1 pool_prueba/fs1root # ls /fs3root # ls /fs1prueba1 prueba2 prueba3 prueba4 prueba5 prueba6
Conclusión
Estos han sido 12 sencillos pasos con los que cualquiera se puede iniciar en ZFS, para profundizar más yo recomiendo:
No hay comentarios:
Publicar un comentario