Tabla de contenido
- 1 Ventajas de ZFS
- 2 Desventajas de ZFS
- 3 Comandos básicos de ZFS
- 3.1 Como crear un ZPool
- 3.2 Como crear un RAID1 o zpool mirror
- 3.3 Cómo crear un RAID10 en ZFS
- 3.4 Cómo crear un RAIDZ ZPOOL
- 3.5 Crear volúmenes
- 3.6 Ver el estado de los ZPOOLs
- 3.7 Añadir y quitar dispositivos al ZPool
- 3.8 Crear volúmenes emulados
- 3.9 Creando un zpool en una ruta alternativa
- 3.10 Comprobar la integridad de Zpool
- 3.11 Poner un dispositivo del ZPool offline/online
- 3.12 IOSTAT
- 3.13 Exportando un ZPool
- 3.14 Importando ZPools
- 3.15 Borrando volumenes / datasets
- 3.16 Renombrando datasets
- 3.17 Listando pools
- 3.18 Montando volúmenes
- 3.19 Haciendo backup y restaurandolo
- 3.20 Replicación remota de un ZFS
- 3.21 Snapshots
- 3.22 Clonando un ZFS
- 3.23 Destruyendo un clon ZFS
¡Hola! Hoy traemos unos cuantos comandos utiles de ZFS.
ZFS es un sistema de ficheros originalmente creado por Jeff Bonwick en Sun Microsystems para su sistema operativo Solaris. Este sistema de ficheros fue lanzado el 16 de noviembre de 2005 en la compilación 27 de OpenSolaris.
Ventajas de ZFS
ZFS destaca por su las siguientes características:
- Gran capacidad (256 Zettabytes como máximo, es decir 1000000PB o 1e+9TB)
- Herramientas de gestión y administración de volúmenes integradas
- Sistemas de archivos ligeros
- Administración de espacios de almacenamiento sencilla.
- Snapshots
- Cifrado
- RAID
- Integridad de datos
Desventajas de ZFS
- No hay forma de reducir la capacidad de un ZPool
- El resilver de un ZPool (recuperación del raid) tarda mucho tiempo.
Comandos básicos de ZFS
Estos son los comandos para ZFS que necesitará para manejarte con tu sistema de ficheros.
Como crear un ZPool
La primera tarea es crear los ZPools que necesitemos. Un ZPool es un volumen formado por un grupo de discos, en otros sistemas de ficheros es conocido como volume group. En este caso el comportamiento que tiene es el de un RAID0 o Striping.
Para crear un ZPool:
Sintaxis:
zpool create ZPOOL_NAME DISPOSITIVO
Ejemplo:
[root@local ~]# losetup -f /tmp/test0101 [root@local ~]# losetup -a /dev/loop0: [16897]:2883593 (/tmp/test0101) [root@local ~]# zpool create test0101 /dev/loop0 [root@local ~]# zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT test0101 1008M 65K 1008M - 0% 0% 1.00x ONLINE - [root@local ~]# zpool status test0101 pool: test0101 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM test0101 ONLINE 0 0 0 loop0 ONLINE 0 0 0 errors: No known data errors
Modificar punto de montaje
Crear un ZPOOL en un punto de montaje especifico
# zpool create -m /export/zfs home c1t0d0
Como crear un RAID1 o zpool mirror
Un zpool mirror o RAID1 es una forma de redundar datos haciendo que si un disco falla los datos sigan almacenados en el otro. A continuación vamos a ver como crear un zpool mirror.
Para crear un RAID1
Sintaxis:
zpool create NOMBRE_ZPOOL mirror DEV1 DEV2
Ejemplo:
[root@local ~]# zpool create mzpool mirror /dev/sdb /dev/sdc [root@local ~]# zpool list mzpool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT mzpool 89M 97K 88.9M 0% ONLINE -
Cómo crear un RAID10 en ZFS
El RAID10 es una combinación del RAID1 y RAID0. Aprovecha tanto la redundancia como la suma de capacidad, tendríamos por cada 2 discos la capacidad de 1.
Crear un RAID10 con ZFS
Sintaxis:
zpool create NOMBRE_ZPOOL mirror DEV1 DEV2 DEV3 DEV4
Ejemplo:
[root@local ~]# zpool create NOMBRE_ZPOOL mirror /dev/sdb /dev/sdc /dev/sdd /dev/sde [root@local ~]#
Cómo crear un RAIDZ ZPOOL
Un RAIDZ es una tipo de RAID5, es también llamado distribuido con paridad. Como mínimo se requieren 3 discos.
Creando un RAIDZ
Sintaxis:
# zpool create rzpool raidz DEV1 DEV2 DEV3
Ejemplo
[root@local ~]# zpool create rzpool raidz /dev/sdb /dev/sdc /dev/sdd [root@local ~]# zpool list rzpool NAME SIZE ALLOC FREE CAP HEALTH ALTROOT rzpool 266M 176K 266M 0% ONLINE -
Igual que el RAIDZ tenemos los RAIDs, donde el numero de después de la Z indica el número de discos de paridad:
- RAIDZ1: 1 disco de paridad, requiere al menos 3 discos
- RAIDZ2: 2 discos de paridad, requiere al menos 4 discos
- RAIDZ3: 3 discos de paridad, requiere al menos 5 discos
Un ejemplo de como añadiriamos un raidz2 sería:
# zpool create rzpool raidz2 DEV1 DEV2 DEV3 DEV4
Crear volúmenes
Después de crear un ZPOOL, para poder utilizar el espacio asignado al ZPOOL debemos crear volumenes. Para crear un volumen podemos ejecutar lo siguiente:
[root@local ~]# zfs create szpool/vol1 [root@local ~]# zfs list |grep szpool szpool 105K 56.9M 21K /szpool szpool/vol1 21K 56.9M 21K /szpool/vol1
Para asignar manualmente un punto de montaje puedes usar el siguiente comando:
[root@local ~]# zfs set mountpoint=/ora_vol1 szpool/vol1 [root@local ~]# zfs list |grep szpool szpool 115K 56.9M 22K /szpool szpool/vol1 21K 56.9M 21K /ora_vol1 [root@local ~]# df -h /ora_vol1 Filesystem size used avail capacity Mounted on szpool/vol1 57M 21K 57M 1% /ora_vol1
Para compartir el volumen por NFS se puede hacer como lo hariamos con cualquier punto de montaje en un linux creando un servidor NFS y usando el fichero /etc/exports o bien podemos compartir el dataset ZFS moficando el atributo ZFS:
[root@local ~]# zfs get sharenfs szpool/vol1 NAME PROPERTY VALUE SOURCE szpool/vol1 sharenfs off default [root@local ~]# zfs set sharenfs=on szpool/vol1 [root@local ~]# zfs get sharenfs szpool/vol1 NAME PROPERTY VALUE SOURCE szpool/vol1 sharenfs on local
ZFS tiene opción de compresión por defecto, podemos ver si tiene activada la compresión un volumen determinado con zfs get compression y activar o desactivarla con zfs set compression:
[root@local ~]# zfs get compression szpool/vol1 NAME PROPERTY VALUE SOURCE szpool/vol1 compression off default [root@local ~]# zfs set compression=on szpool/vol1 [root@local ~]# zfs get compression szpool/vol1 NAME PROPERTY VALUE SOURCE szpool/vol1 compression on local
También podemos añadir deduplicación con:
zfs set dedup=on tank/home
O desactivarla con:
zfs set dedup=off tank/home
Para crear un dataset bajo otro volumen podemos ejecutar lo siguiente:
[root@local ~]# zfs create szpool/vol1/oraarch [root@local ~]# zfs list |grep ora szpool/vol1 42K 56.9M 21K /ora_vol1 szpool/vol1/oraarch 21K 56.9M 21K /ora_vol1/oraarch
Crear volúmenes con cuotas y reservas
Establecer espacio de reserva en el volumen:
[root@local ~]# zfs set reservation=20M szpool/vol1/oraarch [root@local ~]# zfs get reservation szpool/vol1/oraarch NAME PROPERTY VALUE SOURCE szpool/vol1/oraarch reservation 20M local [root@local ~]# zfs list |grep ora szpool/vol1 20.0M 36.9M 23K /ora_vol1 szpool/vol1/oraarch 21K 56.9M 21K /ora_vol1/oraarch
Establecer cuota máxima para un volumen
[root@local ~]# zfs get quota szpool/vol1/oraarch NAME PROPERTY VALUE SOURCE szpool/vol1/oraarch quota none default [root@local ~]# zfs set quota=20M szpool/vol1/oraarch [root@local ~]# zfs get quota szpool/vol1/oraarch NAME PROPERTY VALUE SOURCE szpool/vol1/oraarch quota 20M local [root@local ~]# zfs list |grep ora szpool/vol1 20.0M 36.9M 23K /ora_vol1 szpool/vol1/oraarch 21K 20.0M 21K /ora_vol1/oraarch
Ver el estado de los ZPOOLs
Para visualizar el estado de los ZPOOLs podemos ejecutar el comando zfs status o zfs status ZPOOL_NOMBRE:
[root@local ~]# zpool status pool: szpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM szpool ONLINE 0 0 0 c1t3d0 ONLINE 0 0 0 errors: No known data errors pool: rzpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rzpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c1t8d0 ONLINE 0 0 0 errors: No known data errors pool: mzpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM mzpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t5d0 ONLINE 0 0 0 c1t6d0 ONLINE 0 0 0 errors: No known data errors
Añadir y quitar dispositivos al ZPool
En la primera linea podemos ver como añadimos dispositivos al ZPool, en la segunda quitamos uno de los dispositivos añadidos:
# zpool attach zeepool DEV1 DEV2 # zpool detach zeepool DEV2
Para reemplazar dispositivos ejecutando el resilver de forma automatica:
# zpool set autoreplace=on ZPOOL_NOMBRE
Para comprobar si la propiedad anterior está activa ejecutamos:
# zpool get autoreplace ZPOOL_NOMBRE NAME PROPERTY VALUE SOURCE ZPOOL_NOMBRE autoreplace on default
Crear volúmenes emulados
Crear volumenes emulados con espacio asignado
# zfs create -V 5gb datapool/vol
Activamos el volumen creado como volumen de swap
# swap -a /dev/zvol/dsk/datapool/vol
Creando un zpool en una ruta alternativa
Para crear el zpool en una ruta alternativa podemos hacerlo con la siguiente sintaxis:
# zpool create -R /mnt ALT_ZPOOL DEV1
Así podemos ver como se ha creado:
# zfs list alt_pool NAME USED AVAIL REFER MOUNTPOINT morpheus 32.5K 33.5G 8K /mnt/ALT_ZPOOL
Podemos importar un zpool en una ruta elternativa así:
# zpool import -R /mnt alt_pool # zpool list alt_pool NAME SIZE USED AVAIL CAP HEALTH ALTROOT morpheus 33.8G 68.0K 33.7G 0% ONLINE /mnt # zfs list alt_pool NAME USED AVAIL REFER MOUNTPOINT morpheus 32.5K 33.5G 8K /mnt/alt_pool
Comprobar la integridad de Zpool
Comprobando el zpool con la utilidad integrada (similar a fsck):
# zpool scrub datapool i.e pool name is datapool # zpool status -x all pools are healthy To check the pool with detailed errors # zpool status -v datapool
Poner un dispositivo del ZPool offline/online
Para reemplazar un dispositivo del zpool primero debemos poner offline el dispositivo:
# zpool offline datapool DEV1 bringing device ’DEV1’ offline # zpool online datapool DEV1 bringing device ’DEV1’ online
Para reemplazar un dispositivo:
# zpool replace datapool DEV1 DEV2
Reemplazamos el dispositivo DEV1, por el dispositivo DEV2
IOSTAT
# zpool iostat capacity operations bandwidth pool used avail read write read write ———- —– —– —– —– —– —– datapool 100G 20.0G 1.2M 102K 1.2M 3.45K dozer 12.3G 67.7G 132K 15.2K 32.1K 1.20K
Exportando un ZPool
Para exportar un zpool y que sea accesible:
# zpool export datapool cannot unmount ’/export/home/eschrock’: Device busy # zpool export -f datapool
Importando ZPools
Comprobando si hay zpools disponibles para importar
# zpool import pool: datapool id: 3824973938571987430916523081746329
Importando pools
# zpool import datapool
Borrando volumenes / datasets
# zfs destroy datapool/home
Renombrando datasets
# zfs rename datapool/home/kustarz datapool/home/user2
Listando pools
Listando volumenes bajo datapool/home/users
zfs list -r datapool/home/users NAME USED AVAIL REFER MOUNTPOINT datapool/home/users 26.0K 4.81G 10.0K /datapool/home/users datapool/home/users/user1 16K 4.81G 9.0K /datapool/home/users/user1 datapool/home/users/user2 8K 4.81G 8K /datapool/home/users/user2 datapool/home/users/user3 8K 4.81G 8K /datapool/home/users/user3
Montando volúmenes
Montando volúmenes como puntos de montaje tradicional
# zfs set mountpoint=legacy datapool/home/user1
Montandolo manualmente:
# mount -F zfs datapool/home/user1 /mnt
Montar todos los puntos de montaje contigurados, es como mount -a para ZFS
# zfs mount -a
Compartir o no los volúmenes en el sistema:
# zfs share -a # zfs unshare datapool/home/user1 # zfs unshare -a
Haciendo backup y restaurandolo
Ejemplo de backup y restauración:
# zfs backup datapool/web1@111505 > /dev/rmt/0 # zfs restore datapool/test2@today < /dev/rmt/0 # zfs rename datapool/test datapool/test.old # zfs rename datapool/test2 datapool/test # zfs rollback datapool/web1@111505 cannot rollback to ’datapool/web1@111505’: more recent snapshots exist use ’-r’ to force deletion of the following snapshots: datapool/web1@now # zfs rollback -r datapool/web1@111505 # zfs restore datapool/web1 < /dev/rmt/0
Durante el restore de una copia incremental, el filesistem estará desmontado y no será accesible.
Replicación remota de un ZFS
# zfs backup datapool/sphere1@today | ssh newsys zfs restore sandbox/restfs@today restoring backup of datapool/sphere1@today into sandbox/restfs@today … restored 17.8Kb backup in 1 seconds (17.8Kb/sec) # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I
ZFS Snapshots and Clones The following example creates a snapshot of datapool/home/ahrens that is named friday.
# zfs snapshot datapool/home/ahrens@friday # zfs destroy datapool/home/ahrens@friday # zfs rename datapool/home/sphere1s@111205 datapool/home/sphere1s@today
Snapshots
Mostrando y accediendo a los snapshots
# ls /home/ahrens/.zfs/snapshot tuesday wednesday thursday friday
También se pueden listar así:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home/ahrens@tuesday 13.3M – 2.13G – zfs send -Rv wrkpool@0311 > /net/remote-system/rpool/snaps/wrkpool.0311 sending from @ to wrkpool@0311 sending from @ to wrkpool/swap@0311 sending from @ to wrkpool/dump@0311 sending from @ to wrkpool/ROOT@0311 sending from @ to wrkpool/ROOT/zfsnv109BE@zfsnv1092BE sending from @zfsnv1092BE to wrkpool/ROOT/zfsnv109BE@0311 sending from @ to wrkpool/ROOT/zfsnv1092BE@0311
Clonando un ZFS
# zfs clone pool/ws/gate@yesterday pool/home/ahrens/bug123 The following example creates a cloned work space from the projects/newproject@today snapshot for a temporary user as projects/teamA/tempuser and then sets properties on the cloned work space. # zfs snapshot projects/newproject@today # zfs clone projects/newproject@today projects/teamA/tempuser # zfs set sharenfs=on projects/teamA/tempuser # zfs set quota=5G projects/teamA/tempuser
Destruyendo un clon ZFS
# zfs destroy pool/home/ahrens/bug123
Los clones se destruiran antes que los snapshots del padre se destruyan.