当前位置: 首页>>技术教程>>正文


无法获得/cow的规范路径

, , , ,

问题描述

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

我有一台PC和10 GB硬盘驱动器,它将完全专用于Ubuntu,所以没有Wubi和双启动选项。

我试图从DVD安装,但它被卡在“超出频率”错误。所以我不得不适应USB启动选项。但我的电脑是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.

我的系统是

P4 3.06 GHz,1 GB RAM,10 GB硬盘没有操作系统,监视CRT lg StudioWorks(7岁)。 Mobo Mercury P4 266a NDMx(相当于865)。整个系统完全处于XP下的工作状态,但是USB不可启动,所有其他设备都能正常工作。

接下来我该怎么办?

最佳解决思路

从Ubuntu live CD(尝试14.04和16.04)启动后,我能够通过运行update-grub chroot到grub分区来解决这个问题。 (在下面用您安装grub的任何分区替换/dev/sda1。所有命令都是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
update-grub2  # inside chroot

次佳解决思路

找到你应该启动的驱动器

mount

要么

parted -l

要么

fdisk /dev/sda

并键入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

这是你的车吗?凉!

grub-install --recheck --root-directory=/mnt /dev/sda 

(或者以你的root为基础的/dev驱动器,使用它的挂载路径)

grub-install --recheck --root-directory=/mnt /dev/sda --force

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

现在它应该启动进入grub,你可以使用grub命令启动,重新启动并从BIOS Setup中选择正确的启动驱动器,或者按ESC或F12取决于你的BIOS以及你是否足够快,然后在Grub提示 – 如果它不是(hd0,1)而是(hd1,3)或其他东西,你可以使用制表符完成找到它,但要注意,如果grub无法读取驱动器,则制表符完成有时会挂起几秒钟。

insmod linux
ls
root=(hd0,1)
linux /boot/vmlinuz root=/dev/sda1
initrd /boot/initrd
boot

或者,希望你仍然有一个完整的grub.cfg文件…或者这可能会工作:

grub-mkconfig -o /mnt/boot/grub/grub.cfg

第三种解决思路

基于上述代码的修订解决方案

上面的解决方案不会完全没有问题,因为它将启动分区安装到文件系统的/(根)中。这让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

如你所见,我也删除了换行符,以便更容易为每个人执行。

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

如果您在使其工作时遇到问题,则应该将/boot分区复制到/(根)分区。为此启动您的系统与Ubuntu实时启动DVD并打开终端。里面输入:

sudo su
fdisk -l

找出您拥有的分区。在我的情况下,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/

设置数据分区的可引导标志,并将其删除以用于引导分区:

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

您的计算机现在将在sda5中查找引导文件。是时候再次进行chrooting,这次需要一些grub所需的文件夹,这些文件夹已经由你的Ubuntu live disc生成了:

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

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

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

update-grub2 /dev/sda

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2155.html,未经允许,请勿转载。