У меня есть домашний сервер, на котором запущен 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 монтировать мой жесткий диск. Если у вас больше томов, необходимо повторить эти шаги для каждого из них, чтобы убедиться, что не возникнут проблемы после перезагрузки.