Gestionando discos con ZFS

En este artículo definiremos una estructura de discos utilizando el sistema de ficheros ZFS.

Este ejemplo lo realizaremos en un servidor Sun V440 con 4 discos de 70GB cada uno.

Estructura

Crearemos 3 pools: rpool (pool de sistema), logs_pool (pool donde guardaremos los logs) y data_pool (pool donde guardaremos todas nuestros ficheros).

ZFS Partitions

  • rpool: c1t0d0s0 + c1t1d0s0 (mirror)
  • logs_pool: c1t0d0s1 + c1t1d0s1 (mirror)
  • data_pool: c1t0d0s3 + c1t1d0s3 + c1t2d0s3 + c1t3d0s3 (RAIDZ)

 

Particiones

Las particiones las realizaremos con el comando "format" de Solaris. A continuación se describen las particiones que tendrá cada disco.

c1t0d0

Part      Tag    Flag     Cylinders         Size            Blocks
0 root wm 0 - 6717 32.60GB (6718/0/0) 68362368
1 unassigned wu 6718 - 9809 15.00GB (3092/0/0) 31464192
2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312
3 unassigned wu 9810 - 14085 20.75GB (4276/0/0) 43512576
4 unassigned wu 0 0 (0/0/0) 0
5 unassigned wu 0 0 (0/0/0) 0
6 unassigned wu 0 0 (0/0/0) 0
7 unassigned wu 0 0 (0/0/0) 0

 

c1t1d0

Part      Tag    Flag     Cylinders         Size            Blocks
0 root wm 0 - 6717 32.60GB (6718/0/0) 68362368
1 unassigned wu 6718 - 9809 15.00GB (3092/0/0) 31464192
2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312
3 unassigned wu 9810 - 14085 20.75GB (4276/0/0) 43512576
4 unassigned wu 0 0 (0/0/0) 0
5 unassigned wu 0 0 (0/0/0) 0
6 unassigned wu 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0

 

c1t2d0

Part      Tag    Flag     Cylinders         Size            Blocks
0 unassigned wm 0 0 (0/0/0) 0
1 unassigned wu 0 0 (0/0/0) 0
2 backup wu 0 - 14086 68.35GB (14087/0/0) 143349312
3 unassigned wm 0 - 14086 68.35GB (14087/0/0) 143349312
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0

 

c1t3d0

Part      Tag    Flag     Cylinders         Size            Blocks
0 unassigned wu 0 0 (0/0/0) 0
1 unassigned wu 0 0 (0/0/0) 0
2 backup wu 0 - 14086 68.35GB (14087/0/0) 143349312
3 unassigned wm 0 - 14086 68.35GB (14087/0/0) 143349312
4 unassigned wu 0 0 (0/0/0) 0
5 unassigned wu 0 0 (0/0/0) 0
6 unassigned wu 0 0 (0/0/0) 0
7 unassigned wu 0 0 (0/0/0) 0

 

Creando los pools

1.- Creamos el mirror en el pool "rpool":

zpool attach -f rpool c1t0d0s0 c1t1d0s0 

 

2.- Instalamos el boot en el nuevo disco:

installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0 

En este caso el servidor es SPARC por lo que instalamos el boot con el comando anterior. Si el servidor fuera un x86 ejecutaríamos:

installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0

 

3.- Creamos el pool "logs_pool":

zpool create -f logs_pool mirror c1t0d0s1 c1t1d0s1

 

4.- Creamos el pool "data_pool":

zpool create -f data_pool raidz c1t1d0s3 c1t2d0s3 c1t3d0s3 

 

5.- Para comprobar la integridad de los datos hacemos un scrubbing de los pools:

zpool scrub rpool
zpool scrub logs_pool
zpool scrub data_pool

 

6.- Comprobamos que todos los pools se han creado correctamente:

zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
data_pool 82.5G 33.8G 48.7G 41% ONLINE -
logs_pool 14.9G 247K 14.9G 0% ONLINE -
rpool 32.5G 8.51G 24.0G 26% ONLINE -
zpool status
pool: data_pool
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Wed Mar 11 17:56:13 2009
config:

NAME STATE READ WRITE CKSUM
data_pool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c1t0d0s3 ONLINE 0 0 0
c1t1d0s3 ONLINE 0 0 0
c1t2d0s3 ONLINE 0 0 0
c1t3d0s3 ONLINE 0 0 0

errors: No known data errors

pool: logs_pool
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Wed Mar 11 17:02:23 2009
config:

NAME STATE READ WRITE CKSUM
logs_pool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t0d0s1 ONLINE 0 0 0
c1t1d0s1 ONLINE 0 0 0

errors: No known data errors

pool: rpool
state: ONLINE
scrub: scrub completed after 0h3m with 0 errors on Wed Mar 11 17:22:19 2009
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t0d0s0 ONLINE 0 0 0
c1t1d0s0 ONLINE 0 0 0

errors: No known data errors