Назад | Перейти на главную страницу

FreeNAS zfs zraid два отказавших диска

У меня есть файловый сервер 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 завершается, старое устройство будет автоматически удалено из пула и может быть физически отключено. Очевидно, для этого необходимо, чтобы на хосте было соответствующее количество дополнительных межсоединений.