Вопрос или проблема
Я собираюсь установить Gentoo Linux на старое оборудование, у которого материнская плата имеет как IDE, так и SATA жесткие диски. У меня подключены два IDE и один SATA жесткий диск, и я планирую сделать RAID на них.
Однако я заметил проблему: жесткий диск, отображаемый как /dev/sda, меняется при каждой загрузке!
Я искал ответы в Интернете и нашел, что постоянные имена устройств могут быть решением. Однако я беспокоюсь, возникнут ли проблемы совместимости по всей системе? Кроме того, это довольно неудобно (потому что имена довольно длинные), если я не могу использовать /dev/disk/by-label
. Но похоже, что by-label
не может ссылаться на /dev/sda
и /dev/sdb
– возможно только /dev/sda1
. Кроме того, для моего старого оборудования, использующего BIOS, я думаю, я могу использовать только MBR, но не GPT. Как изменить метки дисков в среде MBR?
С другой стороны, идеальным решением в моем понимании было бы, чтобы /dev/sda
всегда отображался на один и тот же жесткий диск при каждой загрузке. В воображении это можно достичь, сохранив файл с именем “bootmap” на жестком диске. И “/sda” записывается в файл “bootmap”. Во время загрузки системы, если она находит “/sda” внутри “bootmap”, диск отображается как /dev/sda
. Если она находит “/sdb”, он отображается как /dev/sdb
. И так далее. (Но я знаю, что это, вероятно, не так уж и идеально.)
Итак, как избежать изменения отображения /dev/sda
при каждой загрузке?
В качестве альтернативы, было бы неплохо иметь способ редактирования меток – при условии, что это не вызовет проблем совместимости.
(PS – в любом случае, в Интернете еще нет решения.)
Большинство файловых систем имеют уникальные UUID и метки, которые вы можете установить на отличительные значения. Это позволяет вам обращаться к тому объему, который содержит файловую систему, через /dev/disk/by-uuid
или /dev/disk/by-label
. Другие типы томов (RAID, LVM и т. д.) обычно также имеют имя. Томами RAID и LVM собираются на основе уникальных идентификаторов в физических томах, независимо от того, как том подключен. Поэтому обычно не требуется ссылаться на диск как таковой.
Если вам действительно нужно получить доступ к диску в зависимости от способа его подключения, вы можете использовать /dev/disk/by-id
. Записи там имеют вид BUS-SERIAL
или BUS-NAME-SERIAL
. Все подкаталоги /dev/disk/
поддерживаются udev, в частности, правилами постоянного хранения.
Другим решением является создание собственных символических ссылок в /dev
. Вы можете написать правила udev для этого. Добавьте файл /etc/udev/rules.d/50-local-persistent-disks.rules
, содержащий правила вида
SUBSYSTEM=="block", ATTRS{model}=="Yoyodine HD9001", \
ATTRS{serial}=="123-456-789", \
SYMLINK+="myfancyname"
Запустите udevadm info -a /dev/sda
, чтобы увидеть, какие …==…
шаблоны вы можете использовать. Если вы используете несколько шаблонов, они должны быть из одного блока вывода, вы не можете смешивать шаблоны из разных родительских устройств.
Я думаю, что вы можете смело использовать ссылки /dev/disk/by-id/, которые связаны только с типом/моделью диска:
lrwxrwxrwx 1 root root 9 Jul 14 15:13 ata-Hitachi_HDS123456789_PVC1234567890 -> ../../sda
Маловероятно, что /dev/disk/by-path может измениться с контроллером:
lrwxrwxrwx 1 root root 9 Jul 14 15:13 pci-0000:00:1f.2-ata-2 -> ../../sda
lrwxrwxrwx 1 root root 10 Jul 14 15:13 pci-0000:00:1f.2-ata-2-part1 -> ../../sda1
lrwxrwxrwx 1 root root 11 Jul 14 15:40 pci-0000:00:1f.2-ata-2-part10 -> ../../sda10
lrwxrwxrwx 1 root root 11 Jul 14 15:43 pci-0000:00:1f.2-ata-2-part11 -> ../../sda11
lrwxrwxrwx 1 root root 11 Jul 14 15:13 pci-0000:00:1f.2-ata-2-part12 -> ../../sda12
В моем случае я исправил это, смонтировав /dev/sdb (дополнительный жесткий диск) в своей домашней директории (например: /home/username/Data). Но если я смонтирую /dev/sdb в /mnt, то sda и sdb будут меняться местами каждый раз, когда я перезагружаю компьютер.
Стоит отметить, что вы не обязательно должны предотвращать изменения, если вы монтируете свои файловые системы по UUID в /etc/fstab
.
Ответ или решение
Для предотвращения изменения назначений /dev/sda и /dev/sdb между перезагрузками в системах на базе Linux, таких как Gentoo, можно использовать несколько подходов, которые обеспечивают стабильный доступ к вашим дискам независимо от порядка их инициализации на уровне системы. Рассмотрим эти методы более подробно.
1. Использование UUID и меток файловых систем
Каждая файловая система имеет уникальный идентификатор (UUID) и может иметь метку. Чтобы избежать проблем с изменениями имен устройств, рекомендуется использовать /dev/disk/by-uuid
или /dev/disk/by-label
в файле /etc/fstab
для монтирования файловых систем. Вы можете узнать UUID вашего диска с помощью команды:
blkid
Это выведет список устройств и их характеристики, включая UUID. Пример записи в /etc/fstab
для монтирования, основанного на UUID:
UUID=ваш-uuid /mnt/data ext4 defaults 0 2
2. Использование символических ссылок
Если вам необходимо использовать конкретные устройства (например, /dev/sda и /dev/sdb), вы можете создать собственные символические ссылки. Для этого вам нужно написать правила udev. Создайте файл:
/etc/udev/rules.d/50-local-persistent-disks.rules
Содержимое файла может быть следующим:
SUBSYSTEM=="block", ATTRS{model}=="МодельДиска", ATTRS{serial}=="СерийныйНомер", SYMLINK+="myfancyname"
Вы можете получить нужные атрибуты, выполнив команду:
udevadm info -a /dev/sda
3. Использование /dev/disk/by-id
Другой надежный способ – использовать /dev/disk/by-id
, где ссылки на устройства создаются на основе их физической идентификации, таких как серийный номер. Это позволяет избежать путаницы при назначении устройств. Команда ls -l /dev/disk/by-id
покажет вам доступные ссылки.
Пример записи в /etc/fstab
при использовании идентификаторов:
/dev/disk/by-id/ata-ВашЖесткийДиск /mnt/data ext4 defaults 0 2
4. Монтирование по UUID или метке
Вы упомянули использование /dev/disk/by-label
, что также является практичным решением. Убедитесь, что вы установили метки на своих файловых системах с помощью e2label
для ext файловых систем:
e2label /dev/sdb1 НазваниеМетки
И затем используйте:
LABEL=НазваниеМетки /mnt/data ext4 defaults 0 2
5. Обновление политики BIOS
На некоторых старых устройствах порядок инициализации дисков может зависеть от конфигурации в BIOS. Убедитесь, что порядок загрузки жестких дисков правильно настроен. Однако это не всегда решает проблему, так как система может все равно назначить /dev/sda и /dev/sdb по-разному.
Заключение
Все вышеперечисленные методы помогут вам стабилизировать доступ к вашим жестким дискам в Gentoo/Linux. В случае RAID, такой подход также обеспечивает более стабильное определение массивов, поскольку они могут быть собраны по уникальным идентификаторам устройств. Рекомендуется использовать UUID или идентификаторы, так как они более надежны, чем названия основанные на порядке подключения устройства.