zpool недоступен после добавления нового диска на сервер (точка монтирования изменена)

zpool недоступен после добавления нового диска на сервер (точка монтирования изменена)

У меня есть домашний сервер, на котором запущен Proxmox с двумя zpools. Я хочу заменить существующий пул с меньшими жесткими дисками на новый. Но когда я подключаю один из двух новых жестких дисков SATA, мой zpools не работает. В журналах указано, что отсутствует важный диск. Когда я отправляю новый диск, все работает нормально.

Я узнал, что мойновыйдиск смонтирован в sda. Но один из старых дисков в существующем zpool также смонтирован, sdaкогда новый не подключен. Что можно сделать, чтобы избежать этого конфликта? Мне нужно указать linux, что sdaзарезервировано для старого диска из zpool, и он должен использовать sdgдля нового.

Я сбит с толку, что такое поведение вообще может происходить. В результате Linux, похоже, не привязывает точки монтирования к дискам, как буквы дисков в Windows. Я думаю, что было ошибкой использовать точку монтирования, и мне следует использовать какой-то уникальный идентификатор (UUID?) в zpool. Но как это сделать? У меня есть существующие пулы zfs, в которых я использовал точки монтирования.

решение1

Некоторые общие знания по проблеме

После небольшого исследования и попыток я выяснил, что zfs использует точки монтирования. Так что моя теория оказалась верной: точки монтирования не статичны, как буквы дисков в Windows. Вместо этого Linux назначает их в порядке обнаружения во время загрузки. Добавление или удаление дисков может смешивать точки монтирования.

Простой пример:

sda -> Drive #1
sdb -> Drive #2
sdc -> Drive #3

Теперь добавляем новый диск № 4. Его можно вставить так:

sda -> Drive #1
sdb -> Drive #4
sdc -> Drive #2
sde -> Drive #3

Если мы зависим от точки монтирования, то у нас сейчас проблемы: наша система ожидает диск № 2 в sdb, но получила совершенно другой (диск № 4). Согласно Arch Wiki, это может произойти даже во время обычной загрузки,безлюбые изменения на жестких дисках.

Что мы можем сделать?

Ну, использование этих точек монтирования кажется плохой идеей. Мы должны использоватьпостоянное именование блочных устройстввместо этого, которые доступны с помощью udev. Он должен быть доступен в любом современном дистрибутиве Linux. Persistent block names не использует нейтральные имена, такие как sdaили sdb. Вместо этого он создает своего рода имена, которые постоянно привязаны к диску. Они сопоставимы с буквами дисков в Windows (да, имейте в виду, что буквы дисков привязаны к разделам, где имена блоков идентифицируют диск, но оба они являются постоянными!).

by-idи by-uuidкажется наиболее подходящим для решения этой проблемы, но есть и другие. Вы можете прочитать более подробное объяснение на связанной странице вики от Arch. Это общая статья, которая может применяться и к другим дистрибутивам. Для этой проблемы важно знать, что это uuidsсвоего рода сгенерированный уникальный идентификатор. И мы можем использовать idsкак более читаемую альтернативу, потому что они используют специфичную для жесткого диска информацию, такую ​​как производитель, модель и серийный номер.

ЗФС

Какописано здесь, требовалось экспортировать все пулы, а затем повторно импортировать их, но с переключателем -d. Он сообщает zpool, где искать устройства:

zpool export <poolname>
zpool import -d /dev/disk/by-id <poolname>

Используя zpool statusэто можно проверить: Перед экспортом/импортом вы должны увидеть точки монтирования, как /dev/sdaдля устройств. Это должно измениться на идентификаторы дисков после этой процедуры.

Регулярные тома (по желанию)

Для меня этого было недостаточно: у меня есть дополнительный жесткий диск под названиембуфердля таких вещей, как образы ISO. Никаких важных данных, только для разгрузки моего SSD. Так что это был классический том ext3. Это отбивает желание загружать мой сервер, так как здесь происходит точно такая же проблема: точка монтирования изменилась из-за новых дисков, что привело к сбою монтирования.

Я решил эту проблему, просто удалив этот диск. В любом случае, это была моя идея, поскольку новые жесткие диски достаточно большие, и я мог бы сэкономить немного энергии, установив меньше дисков. Чтобы сделать это, нам нужно удалить хранилище из proxmox с помощью /etc/pve/storage.cfgфайла. В моем случае соответствующая часть выглядит так:

dir: buffer
path /buffer
content iso

После его удаления нам нужно взглянуть на /etc/fstab. Этот файл монтирует наш /bufferтом, где и возникает основная причина:

/dev/sdf /buffer ext3 rw 0 0

Как видите, точка монтирования /dev/sdfздесь присутствует.Если вы не хотите отклонять диск, как я, просто используйте здесь уникальную точку монтирования! Например, /dev/disk/by-id. Это пример постоянных имен блочных устройств. Они генерируются на основе данных, зависящих от устройства. by-idНапример, использует серийный номер оборудования. Таким образом, мы можем даже присвоить устройству два одинаковых диска. Подробнее об этом читайте в первом абзаце для получения справочной информации.

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

Связанный контент