Estou executando o Ubuntu Server 13.04 de 64 bits usando o ZFS nativo. Eu tenho um zpool composto por 4 discos rígidos, dos quais um morreu ontem e agora é não sendo reconhecido pelo sistema operacional ou o BIOS mais.
Infelizmente eu vi o problema somente após a próxima reinicialização, então agora a etiqueta da unidade está faltando e não consigo substituir o disco usando as instruções oficiais aqui e aqui .
zpool status hermes -x
impressões
[email protected]:~# zpool status hermes -x
pool: hermes
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: scrub repaired 0 in 2h4m with 0 errors on Sun Jun 9 00:28:24 2013
config:
NAME STATE READ WRITE CKSUM
hermes DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ata-ST3300620A_5QF0MJFP ONLINE 0 0 0
ata-ST3300831A_5NF0552X UNAVAIL 0 0 0
ata-ST3200822A_5LJ1CHMS ONLINE 0 0 0
ata-ST3200822A_3LJ0189C ONLINE 0 0 0
errors: No known data errors
Eu já substituí a unidade por uma nova (que recebeu o rótulo /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
)
Qualquer um dos comandos
zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
falha com
[email protected]:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool
porque o rótulo da unidade que morreu não existe no sistema mais.Eu também tentei os comandos acima omitindo caminho para a etiqueta da unidade sem sucesso.
Como posso substituir o disco "fantasma"?
Depois de cavar eternamente esta noite, finalmente encontrei a solução. A resposta curta é que você pode usar os GUIDs dos discos (que persistem mesmo depois de desconectar uma unidade) com o comando zpool
.
Resposta longa: recebi o GUIDdo disco usando o comando zdb
que me deu a seguinte saída
[email protected]:/dev# zdb
hermes:
version: 28
name: 'hermes'
state: 0
txg: 162804
pool_guid: 14829240649900366534
hostname: 'zeus'
vdev_children: 1
vdev_tree:
type: 'root'
id: 0
guid: 14829240649900366534
children[0]:
type: 'raidz'
id: 0
guid: 5355850150368902284
nparity: 1
metaslab_array: 31
metaslab_shift: 32
ashift: 9
asize: 791588896768
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 11426107064765252810
path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
whole_disk: 1
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 15935140517898495532
path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
whole_disk: 1
create_txg: 4
children[2]:
type: 'disk'
id: 2
guid: 7183706725091321492
path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
whole_disk: 1
create_txg: 4
children[3]:
type: 'disk'
id: 3
guid: 17196042497722925662
path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
whole_disk: 1
create_txg: 4
features_for_read:
O GUID eu estava procurando é 15935140517898495532
que me permitiu fazer
[email protected]:/dev# zpool offline hermes 15935140517898495532
[email protected]:/dev# zpool status
pool: hermes
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 2h4m with 0 errors on Sun Jun 9 00:28:24 2013
config:
NAME STATE READ WRITE CKSUM
hermes DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ata-ST3300620A_5QF0MJFP ONLINE 0 0 0
ata-ST3300831A_5NF0552X OFFLINE 0 0 0
ata-ST3200822A_5LJ1CHMS ONLINE 0 0 0
ata-ST3200822A_3LJ0189C ONLINE 0 0 0
errors: No known data errors
e depois
[email protected]:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
[email protected]:/dev# zpool status
pool: hermes
state: DEGRADED
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 Jun 9 01:44:36 2013
408M scanned out of 419G at 20,4M/s, 5h50m to go
101M resilvered, 0,10% done
config:
NAME STATE READ WRITE CKSUM
hermes DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ata-ST3300620A_5QF0MJFP ONLINE 0 0 0
replacing-1 OFFLINE 0 0 0
ata-ST3300831A_5NF0552X OFFLINE 0 0 0
ata-ST3500320AS_9QM03ATQ ONLINE 0 0 0 (resilvering)
ata-ST3200822A_5LJ1CHMS ONLINE 0 0 0
ata-ST3200822A_3LJ0189C ONLINE 0 0 0
errors: No known data errors
Depois que o resilvering foi concluído, tudo funcionou bem novamente. Teria sido bom incluir essa informação, que você pode usar o GUIDdo disco _ obtido através de zdb
com o comando zpool
, com a página de man do zpool.
Editar
Como apontado por durval abaixo, o comando zdb
pode não produzir nada. Então você pode tentar usar
zdb -l /dev/<name-of-device>
para listar explicitamente informações sobre o dispositivo (mesmo que ele já esteja faltando no sistema).
O problema é que os discos são referenciados por IDs e não por dispositivo.
Aqui está uma solução alternativa que deve funcionar:
ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
Edit: Eu estava atrasado 30 segundos ...
@Marcus: Obrigado por postar essa excelente resposta à sua própria pergunta, isso me ajudou muito.
No outro dia eu encontrei uma reviravolta que pode interessar a você (e qualquer outra pessoa que vem aqui a-googling no futuro): Eu tinha um dispositivo de cache que foi retirado do pool (e marcado como "UNAVAIL") devido a este mesmo erro (ZFS-8000-4J, "rótulo ausente ou inválido"), e tentar offline/remover/substituir falhou exatamente com a mesma mensagem "nenhum dispositivo no pool".
MAS, quando tentei aplicar sua solução, o "zdb" simples (sem argumentos) fez não listar o dispositivo, muito menos seu GUID.
Depois de algumas escavações, descobri que "zdb -l/dev/DEVICENAME" listava o GUID (tirando-o diretamente do dispositivo e não dos registros do conjunto) e usando esse GUID me permitiu fazer a substituição (na verdade eu fiz um "zpool offline" seguido por um "zpool remove" e depois um "zpool add", que funcionou perfeitamente).
Eu tive uma questão semelhante:
A unidade falhou de tal forma que não foi mais registrada na BIOS (totalmente inoperante). O zpool status
indicou que era UNAVAILABLE
.
Eu coloquei uma unidade de capacidade semelhante, e eu consegui alocá-lo como um novo spare
que era INUSE
e resilvered a unidade. Mas, na verdade, não era parte do zpool, mas a piscina tinha uma memória da unidade perdida, achando que um dia voltaria a aparecer.
A solução foi primeiro soltar a unidade ausente do zpool:
[[email protected] ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094
Em seguida, solte a unidade marcada como spare-1 INUSE
também:
[[email protected] ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094
Uma vez que fiz isso, parece que o FreeNAS descobriu isso sem que eu precisasse fazer um comando replace
, no entanto, se o seu sistema não descobrir sozinho, o seguinte comando deve substituir um dispositivo pelo outro:
zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}
Por exemplo:
zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
zpool status
.