Вопрос или проблема
Я пытаюсь загрузить версию ядра Linux 3.2.0 с флеш-накопителя USB.
Я отформатировал флеш-накопитель USB с разделом ext4. Я установил GRUB на него и скопировал два файла, vmlinuz-3.2.0-29-generic
и initrd.img-3.2.0-29-generic
, из папки /boot
моего ноутбука в папку boot на флеш-накопителе.
Затем я смонтировал флеш-накопитель USB в /mnt
и запустил grub-mkconfig -o /mnt/boot/grub/grub.cfg
, чтобы создать файл grub.cfg
в нем.
Затем я попытался добавить детали моего ядра в файл grub.cfg
следующим образом:
menuentry "my kernel" --class gnu-linux --class gnu --class os
recordfail
insmod gzio
insmod part_msdos
insmod ext4
set root="(hd0)"
echo "Загрузка моего ядра"
linux /boot/vmlinuz-3.2.0-29-generic root=UUID=db2687dc-8c42-485e-a152-ef821590b113 ro quiet splash
echo 'Загрузка начального ramdisk ...'
initrd /boot/initrd.img-3.2.0-29-generic
Однако в списке GRUB не отображается мое ядро, а только перечисляются те же списки ОС, когда я загружаю GRUB с жесткого диска моего ноутбука. Является ли ядро действительно на (hd0)? Как добавить запись ядра в меню GRUB флеш-накопителя USB?
Также, правильно ли это делать, чтобы загрузить ядро с флеш-накопителя USB? Является ли файл initrd.img
, который находится в моей папке /boot
, все еще действительным, когда я скопировал ядро на флеш-накопитель? Если нет, как сгенерировать новый файл initrd.img
для ядра на USB?
Однажды у меня была проблема с этим.
Это было связано с тем, что загрузка с моего жесткого диска и добавление флеш-накопителя USB позже, а не загрузка с флеш-накопителя USB, привело к тому, что устройства нумеровались по-разному.
Я исправил это, вручную назначив порядок загрузки устройства в BIOS.
Я думаю, что:
set root="(hd0)"
Не обязательно — (“set root” ссылается на диск, на котором находится grub — я думаю, что grub предполагает это по умолчанию) и может запутать grub при загрузке.
Попробуйте без этого.
Ответ или решение
Чтобы загрузить ядро Linux версии 3.2.0 с USB-накопителя, необходимо выполнить несколько шагов, начиная с правильного форматирования устройства и заканчивая настройкой конфигурационного файла GRUB. Давайте шаг за шагом разберем весь процесс.
1. Форматирование USB-накопителя
Первоначально USB-накопитель должен быть отформатирован в файловую систему, которая поддерживает Linux, в вашем случае это ext4. Чтобы сделать это, выполните следующую команду в терминале:
sudo mkfs.ext4 /dev/sdX1
Замените /dev/sdX1
на правильный путь к вашему USB-накопителю.
2. Установка GRUB на USB-накопителе
После форматирования необходимо установить загрузчик GRUB на USB. Для этого выполните следующие команды:
sudo mount /dev/sdX1 /mnt
sudo grub-install --boot-directory=/mnt/boot /dev/sdX
Необходимо использовать /dev/sdX
, а не /dev/sdX1
, чтобы установить GRUB на весь диск, а не только на раздел.
3. Копирование файлов ядра и initrd
Скопируйте ваши файлы ядра и initrd в правильный каталог на USB:
sudo cp /boot/vmlinuz-3.2.0-29-generic /mnt/boot/
sudo cp /boot/initrd.img-3.2.0-29-generic /mnt/boot/
4. Генерация конфигурационного файла GRUB
Теперь, когда у вас есть Grub и необходимые файлы на USB, создайте конфигурационный файл GRUB:
sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg
5. Редактирование файла grub.cfg
Чтобы добавить ваше ядро в меню загрузки, вам нужно будет вручную отредактировать файл grub.cfg
. Как вы указали, запись может выглядеть следующим образом:
menuentry "Мое ядро" --class gnu-linux --class gnu --class os {
insmod gzio
insmod part_msdos
insmod ext4
echo "Загрузка моего ядра..."
linux /boot/vmlinuz-3.2.0-29-generic root=/dev/sdX1 ro quiet splash
echo "Загрузка начального образа ramdisk..."
initrd /boot/initrd.img-3.2.0-29-generic
}
Обратите внимание, что set root
может не понадобиться и стоит использовать root=/dev/sdX1
вместо UUID
, чтобы избежать путаницы с идентификаторами.
6. Проверка порядкового номера загрузочных устройств
Проблемы с отображением вашего ядра могут возникнуть из-за того, что устройства могут перечисляться иначе. Убедитесь, что BIOS или UEFI вашего компьютера настроены так, чтобы загрузка из USB-накопителя была в приоритете. Часто помогает установить порядок загрузки устройств именно в BIOS.
7. Обновление initrd
Если вы хотите быть уверенными, что ваш initrd.img
актуален, вы можете сгенерировать новый образ initrd
следующим образом:
- Загрузитесь в вашу текущую систему (на жестком диске).
- Обновите
initrd
:
sudo update-initramfs -u -k 3.2.0-29-generic
- Затем скопируйте новый
initrd.img
обратно на USB.
Заключение
Следуя вышеописанным шагам, вы сможете успешно загрузить ядро Linux с USB-накопителя. Убедитесь, что у вас корректно настроены пути и идентификаторы устройств. Если у вас возникнут проблемы, возможно, стоит перепроверить настройки вашей системы и порядок загрузки в BIOS.