Как добавить пункт меню GRUB2 для загрузки установленной Ubuntu на USB-накопитель?

23

Я не спрашиваю, как загрузить LiveCD с USB.

У меня есть 2 установки Ubuntu, одна на внутренний жесткий диск моего компьютера, а другая на USB-накопитель.

Есть ли способ добавить пункт меню GRUB2 (в GRUB на моем внутреннем жестком диске), чтобы загрузить ОС Ubuntu, которую я установил на флэш-накопитель USB, и этот же пункт меню все еще работает после того, как я обновил ядро ​​Linux по установке USB?

харакири
источник

Ответы:

33

Каждый раз, когда вы обновляете ядро ​​на внешнем устройстве, вы можете запускать его, чтобы обновить загрузочный раздел в grub на внутреннем диске.

sudo update-grub

Но вы также можете добавить загрузочную строфу к 40_custom grub2, которая загружает раздел, а не конкретное ядро. Ubuntu устанавливает ссылки в / (root) для загрузки самой последней установки. При необходимости приведите приведенный ниже пример для вашего диска и раздела. Загрузочный диск с grub всегда имеет значение hd0, но в этом случае другие диски находятся в указанном BIOS порядке, который может отличаться.

Изменить с помощью:

gksudo gedit /etc/grub.d/40_custom

затем добавьте:

menuentry "Install on sdb1" {
    set root=(hd1,1)
    linux /vmlinuz root=/dev/sdb1 ro quiet splash
    initrd /initrd.img
}

Хотя вышеуказанное работает, я считаю, что диск может измениться при подключении флэш-накопителя или любого другого USB-устройства. Поэтому я перехожу на использование ярлыков.

menuentry "Cosmic 18.10 on sdb12 test" {
    search --set=root --label cosmic_b --hint hd2,gpt12
    configfile /boot/grub/grub.cfg 
}
oldfred
источник
1
Есть ли способ использовать UUID раздела, а не /dev/sdb1?
Кири
sudo update-grub работал отлично, спасибо!
Сергей Мигдальский
2
как вы должны понять, что должно быть вместо (hd1,1)? откуда вы берете эти цифры, чтобы они подходили? Я , возможно , это нужно для установки прямо другая проблема: askubuntu.com/questions/573502/...
матовый
4
Первый номер - это диск, сообщаемый BIOS. Но загрузочный диск всегда hd0, поэтому порядок дисков может измениться. Тогда второе число - номер раздела. Где sda3 - hd0,3, если вы загружаетесь с диска sda. Но если вы загрузитесь с SDB, то это может быть HD1,3. Иногда вам просто нужно экспериментировать.
oldfred
sudo update-grub также работает с добавлением записей Windows
superl2
9

Я узнал, как использовать UUID диска, полезно, если у вас есть несколько дисков, подключенных во время загрузки. Кредиты Олдфреду за его записку о /vmlinuxи/initrd.img символические ссылки.

Добавьте это в файл /etc/grub.d/40_custom, заменив UUID=XXXX-YYYYего UUID раздела (получите UUID с помощью команды blkid)

menuentry "Boot from USB Drive" {
    set root=UUID=XXXX-YYYY
    linux /vmlinuz root=UUID=XXXX-YYYY ro quiet splash
    initrd /initrd.img
}
харакири
источник
8
Это определенно не ответ на вопрос выше. Вы должны были принять ответ Олдфреда.
Демис Пальма ツ
1
@kiri: считается плохой практикой копировать чужой ответ и отдавать ему должное. Да, даже если вы добавили часть UUID.
Леннарт Роллан
2

Для загрузки из Ubuntu Live USB пункт меню /etc/grub.d/40_customдолжен выглядеть следующим образом ( замените DRIVE_UUIDна uuid вашего раздела ):

menuentry "Boot from LIVE USB Drive" {
   search --set=root --fs-uuid DRIVE_UUID
   linux ($root)/casper/vmlinuz boot=casper quiet splash --
   initrd ($root)/casper/initrd.lz
}

Чтобы применить изменения, выполните:

sudo update-grub
wiktor.2200
источник