У меня есть файловый сервер FreeNAS 8.3 с ZFS с четырьмя дисками по 3 ТБ в raidz.
camcontrol список разработчиков:
at scbus0 target 0 lun 0 (pass0,ada0) at scbus1 target 0 lun 0 (pass1,ada1) at scbus2 target 0 lun 0 (pass2,ada2) at scbus3 target 0 lun 0 (pass3,ada3) at scbus6 target 0 lun 0 (pass4,da0)
На прошлой неделе я заметил, что два диска из четырех начали выходить из строя:
freenas smartd[2241]: Device: /dev/ada0, 24 Currently unreadable (pending) sectors freenas smartd[2241]: Device: /dev/ada0, 24 Offline uncorrectable sectors freenas smartd[2241]: Device: /dev/ada2, 24 Currently unreadable (pending) sectors freenas smartd[2241]: Device: /dev/ada2, 24 Offline uncorrectable sectors
Однако zpool status -v не показала мне никаких ошибок. Я не совсем знаком с ZFS, и это было настроено другим администратором. Почему-то у меня создалось впечатление, что можно просто заменить вышедшие из строя диски один за другим. Что я и сделал.
2014-10-13.17:41:29 zpool offline vol1 gptid/24726389-df9e-11e1-9963-c860009da3f8 2014-10-13.18:19:24 zpool replace vol1 15380758640793782293 gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 2014-10-13.18:21:28 zpool detach vol1 15380758640793782293
Когда процесс перенастройки завершился, я получил сообщение об ошибке о повреждении данных в одном снимке. Система настроена на создание моментальных снимков один раз в час, которые сохраняются в течение двух недель, и один раз в день в течение шести месяцев.
[root@freenas] ~# zpool status -v pool: vol1 state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scan: resilvered 2.25T in 27h51m with 1 errors on Tue Oct 14 22:10:59 2014 config: NAME STATE READ WRITE CKSUM vol1 ONLINE 0 0 1 raidz1-0 ONLINE 0 0 2 gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 ONLINE 0 0 0 gptid/24f91374-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 gptid/25865cb9-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 gptid/260cd97a-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 errors: Permanent errors have been detected in the following files: vol1@auto-20140830.0102-6m:/home/.../some.pdf
Теперь этот файл был удален давным-давно, и поэтому меня это вообще не волнует, я решил, что могу просто удалить снимок, но это усугубило ситуацию:
[root@freenas]~# zfs destroy vol1@auto-20140830.0102-6m [root@freenas] ~# zpool status -v pool: vol1 state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scan: resilvered 2.25T in 27h51m with 1 errors on Tue Oct 14 22:10:59 2014 config: NAME STATE READ WRITE CKSUM vol1 ONLINE 0 0 1 raidz1-0 ONLINE 0 0 2 gptid/f1a3e8b8-5326-11e4-966d-c860009da3f8 ONLINE 0 0 0 gptid/24f91374-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 gptid/25865cb9-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 gptid/260cd97a-df9e-11e1-9963-c860009da3f8 ONLINE 0 0 0 errors: Permanent errors have been detected in the following files: <0x7c343>:<0x45b6bcd>
Поэтому я решил продолжить расследование, прочитал документацию Oracle и обнаружил следующее: «если два диска в четырехстороннем виртуальном устройстве RAID-Z (raidz1) вышли из строя, то ни один из дисков не может быть заменен, поскольку существует недостаточно реплик, с которых можно получить данные. . "ada2 все еще выдает ошибки, и похоже, что я не могу заменить его в существующем пуле, так как это сделает данные недоступными?
Означает ли это, что единственный способ восстановления - это сделать резервную копию существующих данных, уничтожить пул, заменить ada2, создать новый пул и восстановить данные в новом пуле? Или есть другой способ сделать это, возможно, удалить все снимки до 20140830? Кстати, последний скраб нашел еще один снимок с поврежденными данными, очевидно, тот же файл:
vol1@auto-20140831.0102-6m:/home/.../some.pdf
я верить причина, по которой вы видите такие вещи, как
errors: Permanent errors have been detected in the following files:
<0x7c343>:<0x45b6bcd>
потому что данные все еще существуют в моментальном снимке, и только в моментальном снимке.
Помните, что снимок в ZFS - это только маркер на определенный момент времени; на самом деле он не копирует никакие блоки, он просто сохраняет ссылки на старые блоки живыми при замене данных (используя обычное поведение ZFS при копировании при записи). Следовательно, если есть какие-либо снимки, которые ссылаются на плохие блоки, они будут отображаться во время очистки как ошибка.
Ошибка влияет только на этот конкретный файл, и другие ваши данные не подвергаются дополнительному риску из-за этой ошибки.
«Исправление» заключается в по очереди уничтожить каждый снимок, содержащий затронутый файл. После того, как все такие снимки будут уничтожены, никаких ссылок на плохие блоки не останется, и ZFS (надеюсь) сообщит, что ошибок нет.
Кроме того, рекомендуемый способ заменить неисправное, но все еще работающее (маргинальное) устройство в пуле ZFS - использовать zpool replace pool old-dev new-dev
при этом в процессе замены подключены как old-dev, так и new-dev. Это позволяет ZFS использовать данные на крайнем устройстве там, где это возможно. однажды zpool replace
завершается, старое устройство будет автоматически удалено из пула и может быть физически отключено. Очевидно, для этого необходимо, чтобы на хосте было соответствующее количество дополнительных межсоединений.