Некоторые базовые знания по проблеме
После небольшого исследования и попыток я обнаружил, что 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). Согласно архивной вики, это может произойти даже во время обычной загрузки без каких-либо изменений в hdds.
Что мы можем сделать?
Что ж, использование этих точек монтирования кажется плохой идеей. Вместо этого мы должны использовать постоянные именования блочных устройств , которые доступны с помощью udev. Он должен быть доступен в любом современном дистрибутиве Linux. В именах постоянных блоков не используются нейтральные имена, такие как sda
или sdb
. Вместо этого он создает какие-то имена, которые постоянно связаны с диском. Они сопоставимы с буквами дисков в Windows (да, имейте в виду, что буквы дисков связаны с разделами, где имена блоков идентифицируют диск, но оба они являются постоянными!).
by-id
и by-uuid
кажется, наиболее актуальны для решения этой проблемы, но есть и другие. Вы можете прочитать более подробное объяснение на связанной вики-странице от Arch. Это общая статья, которая может применяться и к другим дистрибутивам. Для этой проблемы важно знать, что uuids
- это своего рода уникальный идентификатор. И мы можем использовать ids
как лучшую читаемую альтернативу, потому что они используют специфическую для жесткого диска информацию, такую как производитель, модель и серийный номер.
ZFS
Как описано здесь, необходимо было экспортировать все пулы, а затем повторно импортировать их, но с ключом -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 монтировать мой жесткий диск. Если у вас есть больше томов, необходимо повторить эти шаги для каждого из них, чтобы избежать перезагрузки после каких-либо проблем.