Два запутанных пула ZFS?

327
Michael

Я пытаюсь навести порядок в серверной системе Ubuntu 12.04 LTS с использованием ZFS. Вот что показывает статус zpool:

 pool: TB2 state: UNAVAIL status: One or more devices could not be used because the label is missing or invalid. There are insufficient replicas for the pool to continue functioning. action: Destroy and re-create the pool from a backup source. see: http://zfsonlinux.org/msg/ZFS-8000-5E scan: none requested config:  NAME STATE READ WRITE CKSUM TB2 UNAVAIL 0 0 0 insufficient replicas sdd ONLINE 0 0 0 sde ONLINE 0 0 0 sdf ONLINE 0 0 0 sdg ONLINE 0 0 0 sdh ONLINE 0 0 0 sdi ONLINE 0 0 0 sdj ONLINE 0 0 0 sds ONLINE 0 0 0 sdt UNAVAIL 0 0 0  pool: TB4 state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: http://zfsonlinux.org/msg/ZFS-8000-4J scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb 6 09:27:46 2018 config:  NAME STATE READ WRITE CKSUM TB4 DEGRADED 0 0 0 raidz2-0 DEGRADED 0 0 0 ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T ONLINE 0 0 0 spare-4 DEGRADED 0 0 0 ata-Hitachi_HDS724040ALE640_PK2311PAG614MM UNAVAIL 0 0 0 ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V ONLINE 0 0 0 ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM ONLINE 0 0 0 spares ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV INUSE currently in use  errors: No known data errors 

Я хочу сделать две вещи: 1. Заменить неисправный диск в пуле TB4. Это я умею делать. 2. Полностью уничтожить и воссоздать бассейн TB2.

Обычно я просто делаю zpool, уничтожаю TB2 и начинаю заново. Однако предыдущий администратор использовал имена sd * для TB2 и идентификаторы дисков для TB4. Просматривая / dev / disk / by-id, я обнаружил, что два из дисков TB4 (... 71M и ... EAV) связаны с / dev / sdj и / dev / sds соответственно. Но эти sdj и sds оба перечислены как часть пула TB2. Я боюсь, что уничтожение zpool TB2 повредит диски в пуле TB4, поскольку в документах говорится, что destroy записывает данные на диски участников. Есть ли способ заставить ZFS просто забыть о TB2 без фактической записи?

Я спросил предыдущего администратора, почему он использовал два разных метода (/ dev / sd * и by-id). Он сказал, что присвоение букв дисков определенным жестким дискам, похоже, не повторяется от загрузки к загрузке, поэтому при создании TB4 он использовал by-id. Я думаю, что это запутывание TB2 и TB4 является результатом этого.

Моя текущая мысль состоит в том, чтобы сделать это:

  1. выключить машину
  2. тянуть все диски.
  3. Перезагружать.
  4. zpool уничтожить -f TB2
  5. выключите и переустановите диски TB4
  6. переформатировать диски TB2 на другой машине
  7. Переустановите диски TB2 и создайте новый пул, используя идентификаторы дисков (не sd *)

Это кажется разумным? Есть ли более простой способ?

Спасибо всем, кто может помочь мне выйти из этого беспорядка.

Майкл

1
Почему бы просто не «экспортировать» TB2, а затем создать его правильно? Пулы экспортируются в любом случае, когда вы выключаете. В пуле, который в данный момент «недоступен», это не должно вызывать никаких изменений на диске. Daniel B 6 лет назад 0

1 ответ на вопрос

0
Dan

Ваш предложенный метод, похоже, будет работать. Однако это также излишне сложно. Вместо этого я бы предложил:

  1. zpool export TB2, Это размонтирует все ресурсы, связанные с пулом, и ваша система не будет пытаться перемонтировать их (и, возможно, записать в них), если вы не запустите zpool importсначала.
  2. Ремонт ТБ4. (Или вы можете сделать это позже.)
  3. zpool create <new pool> ...(ссылки на диски по id, чтобы избежать повторного наложения). Возможно, вам придется принудительно создать, так как он может заметить, что эти диски использовались не импортированным пулом.

Если вы хотите выполнить пробную процедуру, я думаю, вы можете создать несколько томов в TB4 ( zfs create -V 5gb TB4/volume1) и сделать из них два «вложенных пула» zpool create testpool1 ...с перекрывающимся томом. Все остальное должно работать так же, как указано выше.

Похожие вопросы