
Estoy intentando limpiar un desastre en un sistema de servidor Ubuntu 12.04 LTS usando ZFS. Esto es lo que muestra el estado de zpool:
pool: TB2
state: UNAVAIL
status: One or more devices could not be used because the label is missing
or invalid. There are insufficient replicas for the pool to continue
functioning.
action: Destroy and re-create the pool from
a backup source.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
scan: none requested
config:
NAME STATE READ WRITE CKSUM
TB2 UNAVAIL 0 0 0 insufficient replicas
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
sdi ONLINE 0 0 0
sdj ONLINE 0 0 0
sds ONLINE 0 0 0
sdt UNAVAIL 0 0 0
pool: TB4
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb 6 09:27:46 2018
config:
NAME STATE READ WRITE CKSUM
TB4 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T ONLINE 0 0 0
spare-4 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG614MM UNAVAIL 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM ONLINE 0 0 0
spares
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV INUSE currently in use
errors: No known data errors
Quiero hacer dos cosas: 1. Reemplazar la unidad defectuosa en el grupo TB4. Esto lo sé hacer. 2. Destruya y vuelva a crear completamente el grupo TB2.
Normalmente, simplemente haría un zpool, destruiría TB2 y comenzaría de nuevo. Sin embargo, el administrador anterior usó nombres sd* para TB2 y ID de disco para TB4. Al observar /dev/disk/by-id, descubrí que dos de las unidades TB4 (...71M y ...EAV) están vinculadas simbólicamente a /dev/sdj y /dev/sds respectivamente. Pero estos sdj y sds figuran como parte del grupo TB2. Me temo que hacer un zpool destroy TB2 corromperá las unidades en el grupo TB4, ya que los documentos dicen que la destrucción escribe en los discos miembros. ¿Hay alguna manera de hacer que ZFS simplemente se olvide de TB2 sin tener que escribir?
Le pregunté al administrador anterior por qué usaba dos métodos diferentes (/dev/sd* y by-id). Dijo que la asignación de letras de unidad a discos duros específicos no parecía repetible de un arranque a otro, por lo que cuando creó TB4, usó by-id. Supongo que este entrelazamiento de TB2 y TB4 es el resultado de eso.
Mi pensamiento actual es hacer esto:
- apagar la máquina
- tire de todas las unidades.
- Reiniciar.
- zpool destruir -f TB2
- apague y reinstale las unidades TB4
- reformatear las unidades TB2 en otra máquina
- Reinstale las unidades TB2 y cree un nuevo grupo utilizando la identificación del disco (no sd*)
¿Parece esto razonable? hay una manera mas facil?
Gracias a quien pueda ayudarme a salir de este lío.
Miguel
Respuesta1
El método propuesto parece funcionar. Sin embargo, también es innecesariamente complejo. En cambio, sugeriría:
zpool export TB2
. Esto desmontará todos los recursos asociados con el grupo y su sistema no intentará volver a montarlos (y posiblemente escribir en ellos) a menos que lo ejecutezpool import
primero.- Reparar TB4. (O puedes hacerlo más tarde).
zpool create <new pool> ...
(haciendo referencia a los discos por id para evitar superposiciones nuevamente). Es posible que tengas que forzar la creación, ya que es posible que notes que esos discos estaban en uso en un grupo no importado.
Si desea realizar un ensayo del procedimiento, creo que puede crear algunos volúmenes en TB4 ( zfs create -V 5gb TB4/volume1
) y crear dos "grupos anidados" a partir de ellos ( zpool create testpool1 ...
) con un volumen superpuesto. Todo lo demás debería funcionar igual que arriba.