Backup doméstico seguro con Linux, cifrado y ZFS (V)
Antes de continuar, lee:
- Backup doméstico seguro con Linux, cifrado y ZFS (IV): Equipo nuevo.
- Backup doméstico seguro con Linux, cifrado y ZFS (IV): Elección de sistema operativo y configuración.
- Backup doméstico seguro con Linux, cifrado y ZFS (IV): Traspaso del sistema operativo a una microSD de 4GB.
- Backup doméstico seguro con Linux, cifrado y ZFS (IV): Redimensionamiento LVM e identificación de discos duros.
En esos artículo explico la migración de mi sistema de backup de una máquina virtual a un servidor físico. Proporciona el contexto para este documento.
Por supuesto es conveniente curiosear un poco la historia y la motivación de la tecnología:
- Backup doméstico seguro con Linux, cifrado y ZFS (III).
- Backup doméstico seguro con Linux, cifrado y ZFS (II).
- Backup doméstico seguro con Linux, cifrado y ZFS.
El primer cambio de disco con el nuevo sistema se produjo en verano de 2015. Veamos los pasos:
- Añadimos el segundo disco duro y sincronizamos el mirror.
- Revisamos la integridad del ZPOOL.
- Verificamos el S.M.A.R.T. de los discos duros.
- Desenchufamos el disco duro viejo.
Añadimos el segundo disco duro y sincronizamos el mirror
-
Conectamos el segundo disco duro y arrancamos el sistema.
-
Entramos en la máquina por SSH.
-
Modificamos el script z-mount:
El contenido inicial era:
zpool export datos #cryptsetup luksOpen --key-file /mnt/z-clave_ZFS-CSI /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-32_WD-WCAZAJ224496-part1 segundodisco && \ cryptsetup luksOpen --key-file /mnt/z-clave_ZFS-CSI /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-00_WD-WCAZAK648702-part1 primerdisco && \ zpool import datos && \ echo "Disco ZFS montado OK!!" #dd if=/dev/urandom of=/mnt/z-clave_ZFS-CSI bs=65536 count=2048 vars=`ssh-agent` eval "$vars" ssh-add /datos/backups/scripts/id_rsa
Lo cambiamos a:
zpool export datos cryptsetup luksOpen --key-file /mnt/z-clave_ZFS-CSI /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-32_WD-WCAZAJ224496-part1 segundodisco && \ cryptsetup luksOpen --key-file /mnt/z-clave_ZFS-CSI /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-00_WD-WCAZAK648702-part1 primerdisco && \ zpool import datos && \ echo "Disco ZFS montado OK!!" #dd if=/dev/urandom of=/mnt/z-clave_ZFS-CSI bs=65536 count=2048 vars=`ssh-agent` eval "$vars" ssh-add /datos/backups/scripts/id_rsa
-
Modificamos el script z-umount:
El contenido inicial era:
ssh-add -D && \ zpool export datos && \ #cryptsetup luksClose /dev/mapper/segundodisco && \ cryptsetup luksClose /dev/mapper/primerdisco && \ echo "DONE!"
Lo cambiamos a:
ssh-add -D && \ zpool export datos && \ cryptsetup luksClose /dev/mapper/segundodisco && \ cryptsetup luksClose /dev/mapper/primerdisco && \ echo "DONE!"
Con estos cambios el servidor debería descifrar y activar los dos discos duros.
-
Desde mi portátil lanzo el script ./z-activar-disco-csi.
Esto activa el zpool.
-
Entro por SSH y veo cual es la situación actual:
root@csi:~# zpool status pool: datos state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: scrub repaired 0 in 17h2m with 0 errors on Mon Jan 5 21:16:27 2015 config: NAME STATE READ WRITE CKSUM datos DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 primerdisco ONLINE 0 0 0 10256769708510827902 OFFLINE 0 0 0 was /dev/mapper/segundodisco errors: No known data errors
Indicamos a ZFS que puede utilizar el disco duro que acabamos de conectar a la máquina:
zpool online datos /dev/mapper/segundodisco
Veamos qué opina ZFS del asunto:
zpool status pool: datos state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sun Jul 19 15:08:54 2015 21.3M scanned out of 1.57T at 910K/s, 515h58m to go 20.7M resilvered, 0.00% done config: NAME STATE READ WRITE CKSUM datos ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 primerdisco ONLINE 0 0 0 segundodisco ONLINE 0 0 0 (resilvering) errors: No known data errors
ZFS activa el segundo disco y empieza a sincronizar los cambios que se han producido desde navidad.
-
Ahora es cuestión de esperar a que termine. Si la máquina se reinicia por cualquier motivo, ZFS continuará la sincronización en el mismo punto donde se hubiera quedado.
-
Cuando la sincronización se complete veremos algo así:
root@csi:~# zpool status pool: datos state: ONLINE scan: resilvered 56.1G in 4h20m with 0 errors on Sun Jul 19 19:29:48 2015 config: NAME STATE READ WRITE CKSUM datos ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 primerdisco ONLINE 0 0 0 segundodisco ONLINE 0 0 0 errors: No known data errors
Aquí vemos que hemos añadido 56GBytes desde navidades y que la sincronización ha supuesto 4 horas y 20 minutos de tiempo.
El zpool se puede usar con normalidad durante el resilvering, aunque la latencia aumenta.
Revisamos la integridad del ZPOOL
El resilvering de ZFS resincroniza los discos copiando los cambios al disco que acabamos de enchufar. Antes de desenchufar el disco duro viejo es buena idea revisar la integridad completa del zpool ZFS haciendo un scrubbing:
root@csi:~# zpool scrub datos
Es cuestión de esperar a que acabe. Como con el resilvering, si la máquina se reinicia, el scrubbing continuará en el punto donde se hubiese quedado.
El proceso es bastante lento, proporcional al volumen de datos totales del zpool. El zpool se puede usar con normalidad, aunque con algo más de latencia. En caso necesario el scrubbing se puede cancelar con un zpool scrub -s datos.
Cuando termine veremos algo así:
root@csi:~# zpool status pool: datos state: ONLINE scan: scrub repaired 0 in 17h34m with 0 errors on Mon Jul 20 18:05:11 2015 config: NAME STATE READ WRITE CKSUM datos ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 primerdisco ONLINE 0 0 0 segundodisco ONLINE 0 0 0 errors: No known data errors
La revisión total de 4 terabytes de datos ha necesitado 17 horas y media. Durante el proceso no se han encontrado errores. Bien.
Si hubiera habido algún tipo de problema, se hubiera corregido el error de un disco duro con el contenido del otro, automáticamente. En este caso no ha hecho falta.
Verificamos el S.M.A.R.T. de los discos duros
Una vez que hemos comprobado la integridad completa del zpool ZFS, echamos un vistazo a sus valores S.M.A.R.T.:
root@csi:~# smartctl -a /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-32_WD-WCAZAJ224496 [...] SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 1 3 Spin_Up_Time 0x0027 188 167 021 Pre-fail Always - 5558 4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1389 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 097 097 000 Old_age Always - 2586 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1348 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 159 193 Load_Cycle_Count 0x0032 197 197 000 Old_age Always - 9570 194 Temperature_Celsius 0x0022 114 107 000 Old_age Always - 36 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 0 [...] root@csi:~# smartctl -a /dev/disk/by-id/scsi-SATA_WDC_WD20EARX-00_WD-WCAZAK648702 [...] SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 167 164 021 Pre-fail Always - 6625 4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1198 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 097 097 000 Old_age Always - 2275 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1175 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 23 193 Load_Cycle_Count 0x0032 198 198 000 Old_age Always - 8792 194 Temperature_Celsius 0x0022 116 109 000 Old_age Always - 34 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 0 [...]
Vemos que ambos discos gozan de una salud excelente, al menos según S.M.A.R.T..
Desenchufamos el disco duro viejo
Tras una semana con los dos discos funcionando simultáneamente, llega el momento de extraer el disco duro "viejo" y dejar solo el "nuevo".
-
Primero vemos cómo va todo:
root@csi:~# zpool status pool: datos state: ONLINE scan: scrub repaired 0 in 17h34m with 0 errors on Mon Jul 20 18:05:11 2015 config: NAME STATE READ WRITE CKSUM datos ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 primerdisco ONLINE 0 0 0 segundodisco ONLINE 0 0 0 errors: No known data errors
Todo parece OK.
-
Pedimos a ZFS que deje de utilizar el disco duro viejo:
root@csi:~# zpool offline datos primerdisco root@csi:~# zpool status pool: datos state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: scrub repaired 0 in 17h34m with 0 errors on Mon Jul 20 18:05:11 2015 config: NAME STATE READ WRITE CKSUM datos DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 primerdisco OFFLINE 0 0 0 segundodisco ONLINE 0 0 0 errors: No known data errors
-
Desmontamos el zpool ZFS con ./z-umount.
-
Actualizamos los scripts z-mount y z-umount para que ignoren el disco duro viejo que ya no está conectado al servidor.
-
Apago el servidor y desenchufo el disco duro viejo.
-
Aprovecho para cambiar del bahía el disco duro nuevo para probar las cuatro que tiene el servidor.
-
Tras reiniciar:
root@csi:~# zpool status pool: datos state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: scrub repaired 0 in 17h34m with 0 errors on Mon Jul 20 18:05:11 2015 config: NAME STATE READ WRITE CKSUM datos DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 primerdisco OFFLINE 0 0 0 segundodisco ONLINE 0 0 0 errors: No known data errors
Todo está bien.
Empaquetamos el disco duro viejo y lo guardamos a buen recaudo en la casa de un amigo de confianza.