![GRUB 无法启动持久性 - “未找到 hd0,4”](https://linux22.com/image/1202307/GRUB%20%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8%E6%8C%81%E4%B9%85%E6%80%A7%20-%20%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%20hd0%2C4%E2%80%9D.png)
我正在尝试使用 mkusb (dus) 制作 Ubuntu 17.04 的持久 USB 闪存驱动器。我明确遵循了 mkusb 网站上的说明,并尝试了我能想到的大多数变体,但都无济于事。当我在 BIOS 中选择持久 USB 时,grub 从中启动;我选择 Ubuntu 持久;未找到带有 hd0,4 的 grub 对象。我已经在网上搜索解决方案好几天了。
我尝试过的一些事情: - 从实时 USB 闪存驱动器启动时在第二个闪存驱动器上创建持久驱动器; - 启用和禁用 BIOS 传统模式和安全启动的所有组合; - 目标驱动器上的 msdos 和 gpt 分区表; - 不同的闪存驱动器; - 不同数量的持久内存; - 等等。
如有任何建议,我们将不胜感激。
我的系统:HP 笔记本电脑,配备 AMD64 四核处理器、16GB 内存,通常以 UEFI 安全模式启动。BIOS 是最新的。安装的操作系统是 Ubuntu 17.04。
谢谢!-沃伦
编辑#1以添加:
进一步研究发现,grub 似乎以 hd2 而非 hd0 的形式从闪存驱动器加载。这可能是因为 BIOS 首先发现两个内部硬盘驱动器,并将其识别为 hd0 和 hd1。如何让持久闪存驱动器上的 grub 识别出它是从 hd2 而非 hd0 加载的,目前还超出了我的能力范围。
编辑#2以添加:
@sudodus- 谢谢你的帮助。请求的一些信息:
mkusb 和 dus 组件均从 ppa 加载,版本为 12.0.9。BIOS 已禁用传统模式并启用安全启动。我尝试编辑 grub 命令(“e”)并将 hd0 更改为 hd2。成功了!持久闪存驱动器按预期启动。(想知道为什么 grub 不将 root 设置为加载它的磁盘……?)
命令输出--
warren@warren-laptop:~$ sudo lsblk -fm
NAME FSTYPE LABEL UUID MOUNTPOINT NAME SIZE OWNER GROUP MODE
sda sda 953.9G root disk brw-rw----
├─sda1 vfat 1168-7BED /boot/efi ├─sda1 256M root disk brw-rw----
├─sda2 ext4 182d8f07-567e-4514-9f99-49b78767f195 / ├─sda2 921.6G root disk brw-rw----
└─sda3 swap 8187044e-0939-4868-b81a-b5bc64bd9e7c [SWAP] └─sda3 32G root disk brw-rw----
sdb sdb 698.7G root disk brw-rw----
└─sdb1 ext4 devel 27a0c109-82be-4ceb-b572-dedbeb412744 /home/warren/devel └─sdb1 698.6G root disk brw-rw----
sdc sdc 14.5G root disk brw-rw----
├─sdc1 ntfs usbdata 134E2DAF76E6A9A4 /media/warren/usbdata ├─sdc1 3.2G root disk brw-rw----
├─sdc2 ├─sdc2 1M root disk brw-rw----
├─sdc3 vfat usbboot 2EA6-44A9 ├─sdc3 122M root disk brw-rw----
├─sdc4 iso9660 Ubuntu 17.04 amd64 2017-04-12-03-44-04-00 /media/warren/Ubuntu 17.04 amd64 ├─sdc4 1.5G root disk brw-rw----
└─sdc5 ext4 casper-rw 8a27c645-3e5c-4e7f-bf92-eb51dc0bd19f /media/warren/casper-rw └─sdc5 9.6G root disk brw-rw----
warren@warren-laptop:~$ sudo parted -ls
Model: ATA SanDisk SD8SB8U1 (scsi)
Disk /dev/sda: 1024GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 269MB 268MB fat32 efi boot, esp
2 269MB 990GB 990GB ext4
3 990GB 1024GB 34.4GB linux-swap(v1)
Model: ATA ST750LX003-1AC15 (scsi)
Disk /dev/sdb: 750GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 16.8MB 750GB 750GB ext4 devel
Model: Patriot Memory (scsi)
Disk /dev/sdc: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 1049kB 2097kB 1049kB primary bios_grub
3 2097kB 130MB 128MB fat32 primary boot, esp
4 130MB 1759MB 1629MB primary
5 1759MB 12.1GB 10.3GB ext2 primary
1 12.1GB 15.5GB 3436MB ntfs primary msftdata
warren@warren-laptop:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 7776108 0 7776108 0% /dev
tmpfs 1559788 10204 1549584 1% /run
/dev/sda2 951092244 187079792 715676736 21% /
tmpfs 7798928 12 7798916 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 7798928 0 7798928 0% /sys/fs/cgroup
/dev/sda1 258095 3496 254599 2% /boot/efi
/dev/sdb1 720011344 242201684 441165412 36% /home/warren/devel
tmpfs 1559784 168 1559616 1% /run/user/1000
/dev/sdc4 1571328 1571328 0 100% /media/warren/Ubuntu 17.04 amd64
/dev/sdc1 3355644 17388 3338256 1% /media/warren/usbdata
/dev/sdc5 9909328 36912 9352660 1% /media/warren/casper-rw
warren@warren-laptop:~$
谢谢!!
答案1
尝试找到一个通用的错误修复
通常情况下,计算机会将启动驱动器识别为hd0
,但您的计算机并非如此。我会尝试找到一种方法来解决这个问题。我在我的电脑上用 Lubuntu 17.04 进行了测试东芝笔记本电脑在 UEFI 模式下,无法重现该错误。所以我需要你的帮助来测试我能找到的任何错误修复。
编辑:我修改了mkusb的shellscript dus-persistent
,并上传了新版本 12.1.1不稳定的 PPA。主要改进解决了 Ubuntu 17.04 启动结构的变化以及您的计算机无法从 hd0 启动的事实。主要区别在于如何使用 iso 文件中的映像(iso9660 文件系统)识别分区 #4,
search --set=root --fs-uuid <the-UUID-of-partition-no-4>
并且它由 mkusb-dus 自动完成。请测试是否能解决问题!你可以通过此链接获取新版本,
help.ubuntu.com/community/mkusb/gui#from_the_unstable_PPA
不稳定版本仍在开发和调试中。可ppa:mkusb/unstable
通过以下命令行获取:
sudo add-apt-repository universe # this line only for standard Ubuntu
sudo add-apt-repository ppa:mkusb/unstable
sudo apt-get update
sudo apt-get install mkusb # install
# sudo apt-get dist-upgrade # upgrade to current version (with all other upgrades), only for installed systems
sudo apt-get install mkusb guidus dus mkusb-common
# upgrade all mkusb basic components including dus
# for persistent live drives that work in UEFI and BIOS mode with 32-bit iso files, add
sudo apt-get install usb-pack-efi
解决方法-修复您的错误
感谢您的反馈(您已将其编辑到原始问题中)。这让我们更容易提供帮助。
“我尝试编辑 grub 命令(“e”)并将其更改
hd0
为hd2
。成功了!持久闪存驱动器按预期启动。(想知道为什么 grub 不将 root 设置为加载它的磁盘......?)”
我建议编辑grub.cfg
“USB 驱动器要持久化”分区 #3 中的文件(“usbboot”分区)。这应该会使错误修复程序在您的 USB 闪存驱动器中持久化。但它不会在其他计算机上工作,因为这些计算机的行为与我的计算机类似。
$ ls -l /media/lubuntu/usbboot/boot/grub/grub.cfg
-rw-r--r-- 1 lubuntu lubuntu 1312 Apr 29 06:31 /media/lubuntu/usbboot/boot/grub/grub.cfg
grub.cfg
有以下内容,请将其修改hd0,4
为hd2,4
。(您也可以将其修改hd0,3
为hd2,3
,但 Memtest86+ 无论如何都无法在 UEFI 模式下工作。)
在您的情况下,您可以预期“Ubuntu”而不是“Lubuntu”,但除此之外它看起来是一样的。
set timeout=10
set default=0
menuentry "Lubuntu-17.04-desktop-amd64.iso - persistent live" {
set root=(hd0,4)
linux ($root)/casper/vmlinuz.efi boot=casper quiet splash persistent --
initrd ($root)/casper/initrd.lz
}
menuentry "Lubuntu-17.04-desktop-amd64.iso - persistent live to RAM" {
set root=(hd0,4)
linux ($root)/casper/vmlinuz.efi boot=casper quiet splash toram persistent --
initrd ($root)/casper/initrd.lz
}
menuentry "Lubuntu-17.04-desktop-amd64.iso - live" {
set root=(hd0,4)
linux ($root)/casper/vmlinuz.efi boot=casper quiet splash --
initrd ($root)/casper/initrd.lz
}
menuentry "Lubuntu-17.04-desktop-amd64.iso - recovery mode" {
set root=(hd0,4)
linux ($root)/casper/vmlinuz.efi boot=casper ro recovery nomodeset
initrd ($root)/casper/initrd.lz
}
submenu "Memory test" {
menuentry "Memtest86+ works in BIOS alias CSM mode, but not in efi (UEFI) mode"{
echo "${grub_platform} mode; (memtest86+ does not work with efi (UEFI) mode)"
}
menuentry "Memtest86+ 4.20" {
set root=(hd0,3)
echo "${grub_platform} mode; (memtest86+ does not work with efi (UEFI) mode)"
linux16 /boot/memtest/memtest.bin
}
menuentry "Memtest86+-5.01" {
set root=(hd0,3)
echo "${grub_platform} mode; (memtest86+ does not work with efi (UEFI) mode)"
linux16 /boot/memtest/memtest86+-5.01.bin
}
}
选择
另一种方法是复制菜单项grub.cfg
并修改其中一个,以便有两个替代方案,使 USB 闪存驱动器在不同的计算机上轻松启动。
...
menuentry "Ubuntu-17.04-desktop-amd64.iso - persistent live (hd2,4)" {
set root=(hd2,4)
linux ($root)/casper/vmlinuz.efi boot=casper quiet splash persistent --
initrd ($root)/casper/initrd.lz
}
menuentry "Ubuntu-17.04-desktop-amd64.iso - persistent live (hd0,4)" {
set root=(hd0,4)
linux ($root)/casper/vmlinuz.efi boot=casper quiet splash persistent --
initrd ($root)/casper/initrd.lz
}
...
答案2
假设您使用 grub(UEFI 模式)而不是 syslinux(传统模式)进行启动,您只需在 grub 菜单屏幕中输入“e”来编辑 grub 命令,然后使用箭头键移动到 hd0 并将其更改为 hd2。grub 屏幕底部的说明,然后按控制 X 或 F10 进行启动。
如果更改有效,请尝试将其编辑到 grub.cfg 文件中。Sudodus 是对的,在这种情况下 update-grub 将不起作用。
我将把 mkusb 讨论留给 sudodus,看到一个由旧版本创建的非常旧的 USB 记忆棒,我感到很困惑。