Заставить zpool использовать / dev / disk / by-id в Ubuntu Xenial


16

Я даю попробовать в комплекте OpenZFS на Ubuntu 16.04 Xenial.

При создании пулов я всегда ссылаюсь на диски по их серийным номерам /dev/disk/by-id/(или /dev/disk/gptво FreeBSD) для обеспечения отказоустойчивости. Диски не всегда находятся в одном и том же порядке /devпри перезагрузке машины, и если в машине есть другие диски, пул может не смонтироваться правильно.

Например, при запуске zpool statusна 14.04 я получаю это:

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0

Но когда я создаю новый пул 16.04 с этим (сокращенно):

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]

Я получаю это с zpool status:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
  raidz1-0  ONLINE       0     0     0
    sdf     ONLINE       0     0     0
    sde     ONLINE       0     0     0
    sdd     ONLINE       0     0     0
    sda     ONLINE       0     0     0

Похоже, что zpool следовал по символическим ссылкам, а не ссылался на них.

Есть ли способ заставить zpool 16.04 уважать ссылки на мои диски при создании пула? Или, наоборот, мои опасения по поводу того, что здесь происходит, неуместны?

Обновление: Обходной путь

Я нашел ветку для zfsonlinux на Github, которая предлагает обходной путь. /dev/sdXСначала создайте zpool с устройствами, а затем сделайте следующее:

$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id -aN

Я все же предпочел бы иметь возможность сделать это с начальной, zpool createхотя, если это возможно.


Неважно, как вы их создаете. Если он возвращается к / dev / sd? имена устройств, zfs exportи zfs import -dвсе равно будет работать. Кстати, если вам не нужен каждый байт пространства, используйте две зеркальные пары, а не raidz. производительность raidz лучше, чем raid-5, но все же намного хуже, чем у raid-10 или зеркальных пар zfs. Кроме того, проще расширить пул, состоящий из зеркальных пар, просто добавьте два диска за раз ... с помощью raidz вам придется заменить каждый из дисков на более крупные, и только после замены их все будет у бассейна есть больше свободного места.
Cas

У меня все еще есть несколько пулов raid-z, и я сожалею, что сделал их. Когда я смогу купить запасные диски, я создам новые пулы с зеркальными парами и буду использовать их zfs sendдля копирования своих данных в новые пулы. На самом деле, raid-z подходит для моей коробки mythtv, где производительность не критична, если я не выполняю 6 или 8 заданий на перекодирование одновременно. Переход на зеркальные пары будет очень заметен в пуле, где /home живет мой каталог.
Cas

2
Зеркальное отображение ZIL позволяет избежать использования обычных дешевых твердотельных накопителей, а не дорогих с большими конденсаторами для защиты от потери мощности. IMO, зеркалирование ZIL не является обязательным, независимо от того, какие у вас есть твердотельные накопители - если ваш ZIL умирает, вы потеряете все данные, которые еще предстоит записать, и потенциально повредите ваш пул. Что касается L2ARC, я специально сказал НЕ отражать их ... зеркальное отображение кэша L2ARC - это пустая трата времени, денег и хорошего места на SSD (и ничего не сделало бы, чтобы предотвратить потерю кэша - откуда вы взяли эту идею?)
Cas

1
:) Кстати, мой мозг не работал правильно, когда я объяснил причину зеркального отражения ЗИЛа. Это не защита от потери власти, это полная чушь, и я никогда не должен был этого говорить. Это для защиты от отказа привода ЗИЛ. т.е. рейд-1 зеркало для ЗИЛ. Два SSD по разумной цене, как правило, лучше, чем один чрезвычайно дорогой (если только более дорогой SSD не имеет намного более быстрого интерфейса, как PCI-e против SATA). ИБП имеет важное значение ... дешевая защита от потери питания.
cas

1
@cas Mirrored ZIL защищает от сбоя устройства SLOG одновременно с неожиданным отключением. При обычных операциях ZIL доступен только для записи, а запись в постоянное хранилище осуществляется из ОЗУ (ARC). Если система неожиданно завершает работу, журнал намерений (ZIL, SLOG) используется для завершения записей, которые были прерваны. Только если неожиданное отключение совпадает с отказом устройства SLOG, вам потребуется избыточный SLOG для восстановления прерванных записей. Для большинства несерверных (и многих серверных) рабочих нагрузок SLOG является излишним, поскольку ZIL действительно вступает в игру только с синхронными записями.
CVn

Ответы:


1

Время от времени zpool import -d /dev/disk/by-idне работает.

Я заметил это в более чем одной среде. У меня есть скрипт импорта, который помимо выполнения некоторой магической логики и отображения физически подключенных устройств ZFS, также делает в основном это:

zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL

Второй раз, даже без -dпереключателя, импорт по идентификатору устройства, даже если это не первый раз с явной командой.

Возможно, это произошло из-за ошибки ZFS в течение нескольких недель или месяцев (год или два назад), и в этом больше нет необходимости. Я полагаю, я должен был подать отчет об ошибке, но это было тривиально обойти.


1

Я знаю, что эта ветка устарела, но ответ есть. Вам необходимо обновить файл кэша после импорта. В этом примере показано расположение по умолчанию для файла кэша.

$> sudo zpool export POOL
$> sudo zpool import -d /dev/disk/by-id POOL
$> sudo zpool import -c /etc/zfs/zpool.cache
$> sudo zpool status POOL
NAME                                  STATE     READ WRITE CKSUM
POOL                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.