2

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

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

2 ответа2

2

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

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

Я не знаком с 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}"
1

Посмотрите на именование блочных устройств Persistant.

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

В итоге вы получите fstab что-то вроде этого:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .