У меня возникли проблемы после попытки добавить больше дисков к моему серверу Ubuntu. Будучи полным новичком, я выключил сервер, добавил еще два диска и перезапустил систему только для того, чтобы найти один из дисков в существующем зеркале "FAULTED".
matsojala@amatson:~$ zpool status -v
pool: tank
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 0B in 21h20m with 0 errors on Fri Feb 8 14:15:04 2019
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
sdb ONLINE 0 0 0
12086301109920570165 FAULTED 0 0 0 was /dev/sdb1
errors: No known data errors
Я пытался экспортировать и импортировать на основе этого ответа (Пул ZFS ухудшился при перезагрузке), но экспорт не удается
matsojala@amatson:~$ sudo zpool export -f tank
umount: /tank: target is busy.
cannot unmount '/tank': umount failed
Я не уверен, каким образом мне попытаться заменить диск, поскольку диск в системе является «частью активного пула».
matsojala@amatson:~$ sudo zpool replace -f tank 12086301109920570165 sdc1
invalid vdev specification
the following errors must be manually repaired:
/dev/sdc1 is part of active pool 'tank'
Это тоже пробовал.
matsojala@amatson:~$ sudo zpool replace tank sdb
/dev/sdb is in use and contains a unknown filesystem.
Любая помощь? Перед выключением диск полностью работал, он находится в системе с именем / dev / sdc1 с идентификатором «12086301109920570165». Что я должен делать?
Спасибо.
Похоже, вы использовали такие имена, как /dev/sda
ссылаться на диски. Обычно это не очень хорошая идея, потому что если вашим дискам будут присвоены разные имена после перезагрузки или цикла отключения-повторного подключения, ZFS может запутаться. Вместо этого вы должны создать свой пул, используя файлы устройства в /dev/disk/by-id/
, .../by-uuid/
, или .../by-label/
.
В вашем случае я не совсем уверен, но похоже, что /dev/sdb1
был переименован в /dev/sdc1
после перезагрузки, поэтому /dev/sdc1
похоже, что это часть пула, хотя его нет в zpool status
. Вы можете попытаться исправить это, отключив дополнительные диски, которые вы добавили - это, вероятно, позволит меткам вернуться к исходному состоянию, а затем выполнить export
с последующим zpool import -d /dev/disk/by-id tank
, чтобы заставить ZFS изменить метку пула на основе by-id
имена дисков.
Если экспорт не работает из-за занятости, убедитесь, что ни один процесс не обращается к файлам в пуле, и повторите попытку. Я не являюсь пользователем Linux, но, похоже, есть также файл конфигурации, который вы можете использовать, чтобы помочь вам сделать это во время перезагрузки: этот пост на Github предлагает установить USE_DISK_BY_ID='yes'
в /etc/default/zfs
принудительно во время перезагрузки. В худшем случае вы можете установить это и перезагрузить - при перезагрузке автоматически запускается экспорт / импорт.
Тем не менее, если вы все равно захотите заменить диск, Документы Oracle достаточно хорошо объяснить вариант использования «заменить один неисправный диск зеркала». (Просто игнорируйте инструкции для Solaris по отключению диска с помощью cfgadm
.) Я думаю, что основные шаги, которые вы пропустили, были бегом zpool offline tank <faulted disk>
перед запуском zpool replace tank <new disk>
.