Как обрабатывать неопределенные назначения жестких дисков?

Как обрабатывать неопределенные назначения жестких дисков?

Недавно я установил еще один жесткий диск в свой компьютер Arch Linux. Первый раз, когда я загрузился, все прошло нормально. В следующий раз, когда я перезагрузил компьютер, я увидел ошибку /dev/sda2 not found.

Видите ли, в основном иногда мой загрузочный жесткий диск — это sda, а иногда — sdb. Кажется, он совершенно случайный, и я не вижу никаких опций, чтобы сделать его неслучайным в BIOS. Как мне это исправить?

решение1

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

Имена устройств назначаютсяудев. Ваша проблема упомянута в Arch wiki, но решения там, похоже, нет.

Я не знаком с Arch, поэтому объясню, как эта проблема решается в Ubuntu; базовые функции предоставляются ядром Linux, которое является тем же самым, но могут быть параметры конфигурации, из-за которых эти функции работают по-другому в Arch.

Вместо использования /dev/sda2в качестве корневого устройства (параметра root=) в загрузчике можно использовать UUID или метку со следующим синтаксисом:

… /boot/vmlinuz root=UUID=01234567-89ab-cdef-0123-456789abcdef ro …
… /boot/vmlinuz root=LABEL=mylabel ro …

UUID однозначно идентифицирует файловую систему, поэтому вам нужен UUID файловой системы, которая находится на /dev/sda2. В Ubuntu /dev/disk/by-uuid/01234567-89ab-cdef-0123-456789abcdef— это символическая ссылка на /dev/sda2. Если у вашей файловой системы есть метка (устанавливается вручную, вы сами решаете, как обеспечить уникальность), то в /dev/disk/by-label. Метки и ссылки UUID генерируются следующими правилами udev:

ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"

решение2

Взгляни наПостоянное именование блочных устройств.

Лично я считаю, что метки — это лучший вариант, поскольку они обеспечивают уникальность UUID, но при этом понятны человеку.

В итоге у вас получится fstab примерно такого вида:

LABEL=boot /boot ext2 defaults 0 1
LABEL=swap swap swap defaults 0 0
LABEL=root / ext4 defaults 0 1

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