无法获得 /cow 的规范路径

ulk*_*CST 55 live-usb grub2 usb usb-creator

我尝试安装 Ubuntu 12.10 已经有一段时间了,并且一一通过了障碍。现在我的情况如下。

我有一台 PC 和 10 GB 硬盘,它们将完全专用于 Ubuntu,因此没有五笔和双启动选项。

我试图从 DVD 安装,但它卡在“超出频率”错误中。所以我不得不适应 USB 启动选项。但是我的 PC 是 USB 不可启动的,所以解决方法是“Plop Boot Manager”。所以我正在做如下安装过程:

  1. 从安装了 plop 的 CD 驱动器开始。
  2. 在 plop 选项中选择 USB 启动。
  3. 从 USB 启动。
  4. 监视器最终给出“频率过高”错误
  5. Shift+ Alt+ F1,以获得终端。
  6. sudo nano /etc/default/grub.打开 grub 。
  7. 做必要的改变。
  8. sudo update-grub.

现在在这里我收到如下错误:

/usr/sbin/grub-probe:error:failed to get canonical path of /cow.
Run Code Online (Sandbox Code Playgroud)

我的系统是

P4 3.06 GHz,1 GB 内存,10 GB 硬盘,不带操作系统,显示器 CRT lg StudioWorks(7 岁)。Mobo Mercury P4 266a NDMx(865 等效)。整个系统在XP下完美运行,但USB不可启动,其他设备运行正常。

我接下来该怎么做?

Nat*_*idd 41

从 Ubuntu live CD(尝试 14.04 和 16.04)启动后,我能够通过运行 update-grub chroot 到 grub 分区来解决这个问题。(/dev/sda1用您安装 grub 的任何分区替换下面的所有命令。所有命令都以 root 身份。)

mkdir /mnt/chrootdir
mount /dev/sda1 /mnt/chrootdir
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do
    mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir
done
chroot /mnt/chrootdir
grub-install /dev/sda # May not be required
update-grub2
Run Code Online (Sandbox Code Playgroud)

  • 我按照您的指示进行操作,最终得到了 `/usr/sbin/grub-probe: error: failed to get canonical path of '/boot'.` 我的引导驱动器上只有我的 `/boot` 分区,其余的在其他地方. (3认同)
  • 尝试运行 mount 给了我错误:,`NTFS 签名丢失。` 这很奇怪,因为它应该是 Ext4,而不是 NTFS... (2认同)

Dag*_*elf 23

找到您应该使用的驱动器

mount
Run Code Online (Sandbox Code Playgroud)

或者

parted -l
Run Code Online (Sandbox Code Playgroud)

或者

fdisk /dev/sda
Run Code Online (Sandbox Code Playgroud)

然后键入 p 列出分区,查找类型 83。

(如果你有 Fedora,你可能需要使用命令“vgs”和“lvs”,如果你有 mdraid,你可能需要“cat /proc/mdstat”或 mdadm -A --scan 或 insmod raid1 或insmod raid5 然后是 mdadm -A --scan),你将使用 /dev/md0 或 /dev/mapper/my-vg 而不是 /dev/sda

然后尝试挂载

mkdir /mnt
mount /dev/sda1 /mnt
cd /mnt
ls -l
Run Code Online (Sandbox Code Playgroud)

这是你的驱动器吗?凉爽的!

grub-install --recheck --root-directory=/mnt /dev/sda 
Run Code Online (Sandbox Code Playgroud)

(或者你的根目录是哪个 /dev 驱动器,它的安装路径)

grub-install --recheck --root-directory=/mnt /dev/sda --force
Run Code Online (Sandbox Code Playgroud)

(如果它不喜欢你的分区,就强制它。)

现在它应该启动到 grub,您可以使用 grub 命令启动,在重新启动并从 BIOS 设置中选择正确的启动驱动器后,或者根据您的 BIOS 以及您是否足够快,按 ESC 或 F12,然后在Grub 提示 - 如果不是 (hd0,1) 而是 (hd1,3) 或其他内容,您可以使用制表符完成来查找它,但请注意,如果 grub 无法读取驱动器,制表符完成有时会挂起几秒钟.

insmod linux
ls
root=(hd0,1)
linux /boot/vmlinuz root=/dev/sda1
initrd /boot/initrd
boot
Run Code Online (Sandbox Code Playgroud)

或者,希望你还有一个完整的 grub.cfg 文件......

ls
ls (hd0,1)/
ls (hd0,1)/boot
configfile (hd0,1)/boot/grub.cfg
Run Code Online (Sandbox Code Playgroud)

或者这可能会起作用:

grub-mkconfig -o /mnt/boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

当然,您的路径可能会有所不同,因此只需使用这些命令,直到您可以看到发生了什么事情。

在最坏的情况下,这可能是硬盘驱动器即将发生故障的迹象,或者在最好的情况下可能只是意外覆盖的分区标志或引导文件。


Tim*_* B. 12

根据上面的代码修改了解决方案

上面的解决方案不会完全没有问题,因为它将引导分区安装到文件系统的 /(根)中。当然,这让 grub 抱怨 /boot 不存在。这将解决该问题:

mkdir /mnt/chrootdir
mkdir /mnt/chrootdir/boot
mount /dev/sda1 /mnt/chrootdir/boot
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir ; done
chroot /mnt/chrootdir
update-grub2  # inside chroot
Run Code Online (Sandbox Code Playgroud)

如您所见,我还删除了换行符,以便每个人都更容易执行。

另一个(更简单的)解决方案

如果您在让它工作时遇到问题,您应该考虑将 /boot 分区复制到 /(根)分区。为此,使用 Ubuntu live boot dvd 启动您的系统并打开终端。在里面输入:

sudo su
fdisk -l
Run Code Online (Sandbox Code Playgroud)

找出你有哪些分区。在我的情况下,sda1 是我的 /boot 分区,它大约 250MB,而 sda5 大约是 500GB。我在以下命令中使用这些值:

mkdir /mnt/boot/
mount /dev/sda1 /mnt/boot/

mkdir /mnt/root/
mount /dev/sda5 /mnt/root/

cp -R /mnt/boot/ /mnt/root/boot/
Run Code Online (Sandbox Code Playgroud)

为数据分区设置可引导标志并为引导分区删除它:

fdisk /dev/sda
b -> 1 (unset the bootable flag for the first partition)
b -> 5 (set the bootable flag for the fifth partition)
w -> write changes to the MBR
Run Code Online (Sandbox Code Playgroud)

您的计算机现在将在 sda5 中查找引导文件。是时候再次进行 chrooting,这次使用 grub 所需的一些必需文件夹,这些文件夹已经由您的 Ubuntu 实时光盘生成:

mkdir /mnt/chrootdir/
mkdir /mnt/chrootdir/dev/
mkdir /mnt/chrootdir/proc/
mkdir /mnt/chrootdir/sys/

mount /dev/sda5 /mnt/chrootdir/
mount --bind /dev/ /mnt/chrootdir/dev/
mount --bind /proc/ /mnt/chrootdir/proc/
mount --bind /sys/ /mnt/chrootdir/sys/

chroot /mnt/chrootdir/

grub-install /dev/sda
Run Code Online (Sandbox Code Playgroud)

安装完成。没有报告错误。

如果您没有看到生成 grub.cnf 文件的消息,则还运行更新命令:

update-grub2 /dev/sda
Run Code Online (Sandbox Code Playgroud)

现在您可以安全地重新启动并看到众所周知的启动菜单再次出现。

从物理服务器迁移到虚拟机后,此解决方案是唯一对我有用的解决方案。我希望有人觉得这很有用!


ave*_*faq -7

从 Live CD 使用该命令时,该update-grub命令会给您带来错误。我在进行 GRUB 救援时遇到了类似的情况。由于某种原因也不grub-install在我的路径中,所以我必须使用/usr/sbin/grub-install.

grub-install接受一个--boot-directory选项,将 GRUB 设置为引导到与当前正在运行的系统不同的系统。这是相关的手册页。