Я выполняю Сервер Ubuntu 13,04 64-разрядных собственных компонентов использования ZFS. У меня есть шпулька, состоящая из 4 жестких дисков, из которых умер вчера и теперь не распознается ОС или BIOS больше.
К сожалению, я видел проблему только после следующей перезагрузки поэтому теперь, маркировка диска отсутствует, и я не могу заменить диск с помощью официальных инструкций здесь и здесь.
zpool status hermes -x
печать
root@zeus:~# 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
Я уже заменил диск новым (который получил маркировку /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
)
Любая из команд
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
сбои с
root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool
потому что маркировка диска, который перестал работать, больше не существует в системе. Я также попробовал команды выше исключения пути к маркировке диска напрасно.
Как я могу заменить "фантомный" диск?
После рытья бесконечно этой ночью я наконец нашел решение. Короткий ответ - то, что можно использовать GUID дисков (которые сохраняются даже после разъединения диска) с zpool
команда.
Длинный ответ: Я получил GUID диска с помощью zdb
команда, которая дала мне следующий вывод
root@zeus:/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:
GUID, который я искал, 15935140517898495532
который позволил мне сделать
root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/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
и затем
root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/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
После перепосеребрения был завершен, все работало хорошо снова. Было бы хорошо включать эту информацию, что можно использовать GUID диска, полученный через zdb
с zpool
команда, со страницей справочника шпульки.
Править
Как указано durval ниже zdb
команда ничего не может произвести. Затем можно попытаться использовать
zdb -l /dev/<name-of-device>
явно перечислять информацию об устройстве (даже если это уже отсутствует в системе).
Проблема заключается в том, что на диски ссылаются идентификаторы, а не устройства.
Вот обходной путь, который должен работать:
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
Редактировать: я опоздал на 30 секунд ...
У меня была похожая проблема:
Диск вышел из строя таким образом, что он больше не регистрировался в BIOS (полностью мертв). zpool status
указали, что это было UNAVAILABLE
.
Я вставил диск с аналогичной емкостью, и мне удалось выделить его как новый spare
, который был INUSE
и повторно скопировал диск. Но на самом деле это не была часть zpool, скорее в пуле была память о пропавшем диске, и он думал, что когда-нибудь он появится снова.
Решением было сначала удалить отсутствующий диск из zpool:
[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094
Затем удалить диск с пометкой spare-1 INUSE
: ] После того, как я это сделал, похоже, что FreeNAS понял, что мне не нужно выполнять команду replace
, однако, если ваша система сама этого не понимает, следующая команда должна заменить одно устройство другим:
zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}
Например:
zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
zpool status
. @Marcus: Спасибо за публикацию этого превосходного ответа на свой вопрос, он мне очень помог.
На днях я обнаружил поворот, который может вас заинтересовать (и любого другого, кто придет сюда в будущем): у меня было устройство кэширования, которое было удалено из пула (и помечено как «UNAVAIL») из-за та же самая ошибка (ZFS-8000-4J, «метка отсутствует или недействительна»), и попытка отключить / удалить / заменить ее не удалась с точно таким же сообщением «нет такого устройства в пуле».
НО, когда я пытался применить ваше решение, обычный «zdb» (без аргументов) не не перечислял устройство, тем более его GUID.
После некоторого копания я обнаружил, что «zdb -l / dev / DEVICENAME» перечисляет GUID (беря его непосредственно с устройства, а не из записей пула), и использование этого GUID позволило мне выполнить замена (на самом деле я сделал «zpool offline», затем «zpool remove», а затем «zpool add», который работал отлично).