Фон: маленький персональный сервер, электронная почта, сеть, оболочка, и т.д., для семейства и друзей. SunOS 5.11, snv_113 с ноября 2008. Сервер создается в 2009. Я полагаю, что это было или opensolaris или Солярисом ранний выпуск доступа. Процессор AMD 64 битов, поршень на 4 ГБ.
Корневая шпулька трехстороннее зеркало, первоначально состоявшее из трех вращающих дисков размера ноутбука 320 ГБ. После трех лет каждый из вращающих дисков вымер, один за другим; каждый замененный в соответствии с гарантией от производителя. За последние несколько месяцев другой диск пошел глупый снова. В настоящее время я решил просто выполнить два пути зеркало. На прошлой неделе систематическая ошибка неожиданно возникла с тремя перечисленными файлами. После куста те ошибки ушли за исключением одной ошибки метаданных. Поскольку второй диск начал давать сбой также, я добавил запасной настольный диск и повторно посеребрил к этому. Та же контрольная сумма и ошибка метаданных сохраняются. В отчаянии я купил несколько SSD (я приехал для реальной ненависти вращающих дисков). Я добавил тот к пулу как одна треть, и конечно во время пересеребра, я остаюсь со следующим:
root-klaatu /root% zpool status -v
pool: rpool
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
scrub: resilver in progress for 1h47m, 84.53% done, 0h19m to go
конфигурация:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 1
mirror ONLINE 0 0 6
c1d0s0 ONLINE 0 0 6
c1d1s0 ONLINE 0 0 6 55.0G resilvered
c0d1s0 ONLINE 0 0 6 55.3G resilvered
ошибки:
Permanent errors have been detected in the following files:
<metadata>:<0x172>
К тому времени, когда это заканчивается будет десять ошибок контрольной суммы на диск, о котором сообщают, и два на самом rpool. 'Шпулька, ясная', работает отлично для очистки ошибочного количества контрольной суммы, но файл метаданных с ошибками сохраняется, и каждое пересеребро/куст просто возвращает те же ошибки контрольной суммы. Обратите внимание, что я удалил все снимки, поскольку я считал, что иногда это - то, где данные с ошибками живут - но никакая радость.
У меня есть резервные копии - но они через CrashPlan, и в облаке - настолько восстанавливающий всю вещь занял бы дни по ограниченному соединению, которое я поддерживаю для сервера, что означает дни сервера, являющегося недоступным, который просто не надежен.
Таким образом - все, что сказало. Что является моей опцией для восстановления кроме восстановления от резервного копирования (так как метаданные 'файл' являются, очевидно, чем-то, что я не могу удалить).
Если я должен был создать новый пул zfs на новом диске - был бы, делая zfs отправить/получить 'ясный' ошибка? Или было бы лучше настроить новый пул, затем rsync старые данные пула к нему, затем переименовать новый пул назад к оригиналу, установить блоки начальной загрузки на зеркальных дисках, затем попытаться загрузиться от этого? Я считал, что существуют кэшируемые биты данных, связанных с фактическим именем пула, которое может вмешаться в фактическую начальную загрузку.
Я знаю, что 'логическая' вещь сделать состояла бы в том, чтобы просто создать новый, новый сервер на недавней ОС как OmniOS или OpenIndiana или этажерка - но со всем пользовательским скомпилированным кодом на этом сервере (который был первоначально Sparc 20 назад в начале 2000-х), я предполагаю, что rsyncing все не работало бы хорошо.
Спасибо за любую справку.
О - я должен добавить - сервер работает очень хорошо. Никакие катастрофические отказы, никакие тупики, ничто.
Я смог «оправиться» от этого инцидента с помощью zfs «отправки» и получения поврежденного пула в новый пул.
# создать новый однодисковый пул (или зеркало заранее, если хотите)
zpool create -f tpool c0d0s0
# сделать базовый снимок старого пула
zfs snapshot -r rpool @ now
# zfs отправляет его в новый пул
zfs send -vR rpool @ now | zfs receive -Fduv tpool
# обратите внимание, что это сбрасывает точку монтирования tpool на rpool - поэтому обязательно
обновить
zfs set mountpoint = / tpool tpool
# перейти на одного пользователя; насколько это зависит от вашей системы
# edit:
/rpool/boot/grub/menu.lst
# (Обратите внимание, что этот файл должен поддерживаться bootadm; в данных обстоятельствах я решил просто пойти напрямую)
# сначала дублировать bootset, отредактируйте копию, измените findroot с
findroot (pool_rpool, 0, a)
# на
findroot (pool_tpool, 0, a)
# сделайте второй снимок теперь, когда в single user
zfs snapshot -r rpool @ now2
# отправить инкрементный снимок в новый пул
zfs send -vR -i rpool @ now rpool @ now2 | zfs получает -Fduv tpool
# mount tpool - еще раз помните, что точку монтирования необходимо обновить
zfs mount = / tpool tpool
# rm файл 'bootsign' и замените его новым:
rm / tpool / boot / grub / bootsign / pool_rpool
touch / tpool / boot / grub / bootsign / pool_tpool
# формализует, откуда загружаться из
zpool set bootfs = tpool / ROOT / snv_113 tpool
# добавьте загрузочные блоки
installgrub / boot / grub / stage1 / boot / grub / stage2 / dev / rdsk / c0d0s0
# poweroff, отсоедините диски rpool - или оставьте их для дальнейшего изучения
# если собираетесь зеркалировать, физически прикрепите второй диск
# загрузка
# превратить tpool в зеркало
zpool attach tpool c0d0s0 c1d0s0
# done
Обратите внимание, что если все в порядке, вы можете отредактировать меню grub, чтобы либо переместить новую загрузочную запись tpool, чтобы она была первой, либо изменить объявление 'default', указывающее на то, что оно есть в списке (или, если других загрузочных объявлений нет, просто удалите одно для rpool).
Также - хотя я упомянул, вероятно, более сотни различных сайтов и веб-страниц, пытаясь решить эту проблему, вышеупомянутый «рецепт» в значительной степени заимствован из Как сжать зеркальный пул ZFS, написанного Джо Мокером .