У меня есть файловый сервер FreeNAS 8.3 с ZFS выполнение четырех дисков на 3 ТБ в набегах.
camcontrol devlist:
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
состояние шпульки-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, возможно? Btw последний куст нашел другой снимок с поврежденными данными, тот же файл, очевидно:
vol1@auto-20140831.0102-6m:/home/.../some.pdf
I полагаю причина, по которой вы видите вещи типа
errors: Permanent errors have been detected in the following files:
<0x7c343>:<0x45b6bcd>
, в том, что данные все еще существуют в виде снимка, и только в виде снимка.
Помните, что снэпшот в ZFS - это всего лишь маркер точки во времени; на самом деле он не копирует никакие блоки, он просто сохраняет ссылки на старые блоки живыми, когда данные заменяются (используя обычное поведение ZFS при копировании на запись). Следовательно, если есть снэпшоты со ссылками на плохие блоки, то во время скрабов он будет продолжать отображаться как ошибка.
Ошибка влияет только на этот конкретный файл, а остальные данные не подвергаются дополнительному риску из-за этой ошибки.
Исправление заключается в том, чтобы уничтожить каждый снэпшот в свою очередь, который содержит файл, на который она повлияла. После уничтожения всех таких снэпшотов не останется ссылок на плохие блоки, и ZFS (будем надеяться) сообщит об отсутствии ошибок.
Кроме того, рекомендуемый способ замены неработающего, но все еще функционирующего (маржинального) устройства в ZFS-пуле - это использование zpool для замены пула old-dev new-dev
с подключением как old-dev, так и new-dev на протяжении всего процесса замены. Это позволяет ZFS использовать данные на периферийном устройстве там, где это возможно. Как только zpool replace
завершит процесс замены, старое устройство будет автоматически удалено из пула и может быть физически отключено. Очевидно, что для этого требуется наличие соответствующего количества дополнительных соединений на хосте.