
Недавно я установил еще один жесткий диск в свой компьютер 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