пару раз у меня были внезапные потери питания, которые сделали пул ZFS непригодным для использования до полной перезагрузки системы. Я планирую получить ИБП, чтобы избежать будущих проблем, но, похоже, должен быть способ исправить такую простую проблему без полного выключения системы.
воспроизвести проблему очень просто: мой пул ZFS работает с двумя жесткими дисками, которые подключены через USB. Это состояние при правильной работе пула:
$ sudo zpool status
pool: tank
state: ONLINE
scan: scrub repaired 0 in 1h36m with 0 errors on Sun Dec 11 02:00:22 2016
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
usb-ST4000DM_000-1F2168_000000000000-0:0-part1 ONLINE 0 0 0
usb-ST3000DM_001-1E6166_000000000000-0:1-part1 ONLINE 0 0 0
Если я отключаю питание USB-накопители без остановки ZFS, а затем снова включите питание через несколько секунд возникают следующие проблемы:
Если я попытаюсь LS внутри точки монтирования ZFS, он будет висеть бесконечно, требуя, чтобы я закрыл терминал. (Процесс ls останется как зомби). Любые компьютеры, подключенные к серверу nfs через samba, также зависнут, если они попытаются получить доступ к общему каталогу.
статус теперь будет выглядеть так:
$ sudo zpool status
pool: tank
state: UNAVAIL
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: http://zfsonlinux.org/msg/ZFS-8000-HC
scan: scrub repaired 0 in 1h36m with 0 errors on Sun Dec 11 02:00:22 2016
config:
NAME STATE READ WRITE CKSUM
tank UNAVAIL 0 0 0 insufficient replicas
mirror-0 UNAVAIL 0 0 0 insufficient replicas
usb-ST4000DM_000-1F2168_000000000000-0:0-part1 UNAVAIL 0 0 0
usb-ST3000DM_001-1E6166_000000000000-0:1-part1 UNAVAIL 0 0 0
несмотря на то, что USB-накопители были снова включены.
Я попытался следующие команды, чтобы решить эту проблему.
$ sudo zpool clear tank
cannot clear errors for tank: I/O error
$ sudo zfs unmount tank
cannot open 'tank': pool I/O is currently suspended
# Note: Because other computers were trying to access the zfs share via samba, there are zombie processes, which is why an export won't work.
$ sudo zpool export tank
umount: /tank: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
cannot unmount '/tank': umount failed
$ sudo zpool export -f tank
umount: /tank: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
cannot unmount '/tank': umount failed
# Tried this just for kicks, and got the expected result.
$ sudo zpool import -nfF tank
cannot import 'tank': a pool with that name already exists
use the form 'zpool import <pool | id> <newpool>' to give it a new name
Я провел несколько часов, читая похожие сообщения от людей, но ни один из них, похоже,
решите именно эту проблему. Если перезагрузить компьютер под управлением ZFS все ошибки
исчезнет, мертвые процессы очистятся, и все вернется в норму.
но должен быть более чистый способ решить эту проблему. Есть предложения?
изменить:
Наверное, мне стоит уточнить. Сервер, к которому подключены накопители, является перепрофилированным ноутбуком, поэтому он имеет внутренний источник питания. Таким образом, при нормальной работе, если есть отключение питания, это возможно для USB-накопителей, чтобы потерять власть, а затем прийти снова без сервера/ноутбука когда-либо происходит перезагрузка.