无法获得/ cow的规范路径


42

我试图安装Ubuntu 12.10已有相当长的一段时间,并且一一克服障碍。现在,我处于以下情况。

我有一台PC和10 GB的HDD,它们将完全专用于Ubuntu,因此没有Wubi和双启动选项。

我试图从DVD安装,但是由于“超出频率”错误而卡住了。因此,我不得不适应USB引导选项。但是我的PC无法启动USB,因此解决方法是“ Plop Boot Manager”。因此,我正在按照以下步骤进行安装:

  1. 从安装了光驱的CD驱动器开始。
  2. 在plop选项中选择USB引导。
  3. 从USB启动。
  4. 监视器最终给出“超出频率”错误
  5. Shift+ Alt+ F1获取终端。
  6. 用打开rub sudo nano /etc/default/grub
  7. 进行必要的更改。
  8. sudo update-grub

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

/usr/sbin/grub-probe:error:failed to get canonical path of /cow.

我的系统是

P4 3.06 GHz,1 GB内存,10 GB HDD(不带操作系统),显示器CRT lg StudioWorks(已使用7年)。Mobo Mercury P4 266a NDMx(相当于865)。整个系统在XP下可以完美地工作,但是它是USB不可启动的,所有其他设备都可以正常工作。

接下来我该怎么办?


您的计算机是否具有建议的最低系统要求才能运行Ubuntu?我在将RAM小于1GB的计算机上安装12.04时遇到问题。
CSCameron

是的,现在我已经添加了我的系统规范。
ulkaNCST


5
首先安装硬盘到某个文件夹,说/mnt,然后chroot/mnt
绿色的

Answers:


29

从Ubuntu Live CD引导(尝试14.04和16.04)后,我可以通过将update-grub chroot'ed运行到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
update-grub2  # inside chroot

2
尝试运行mount会给我错误:,NTFS signature is missing.这很奇怪,因为它应该是Ext4,而不是NTFS ...
Cerin 2015年

@Cerin,我强调/ dev / sda1是适合我的分区,但如果该卷是NTFS,显然不是适合您的分区。
内森·基德

您的解决方案令人困惑。您是否需要从第一部分的chroot中运行第一部分和第二部分?还是您放弃了在第一部分中所做的一切而只运行第二部分?为什么同时挂载/ dev / sda和/ dev / sda1?
塞林2015年

2
我按照您的指示进行操作,最后我的引导驱动器上/usr/sbin/grub-probe: error: failed to get canonical path of '/boot'.只有我的/boot分区,其余的都在其他地方。
2015年

1
不得不做一个额外的grub-install /dev/sda之前update-grub,然后它的工作!
kiw

10

查找应该引导的驱动器

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 

(或您的根目录所在的/ dev驱动器,以及其安装路径)

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

(如果不喜欢您的分区,请强制执行。)

现在它应该启动进入grub,在重新启动并从BIOS设置中选择正确的启动驱动器之后,或者通过按ESC或F12(取决于您的BIOS以及您是否足够快),可以使用grub命令启动。 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

1
它不喜欢我的分区,但是-f没有用。我不得不使用--force
RM

要从GRUB引导,在我的系统上,我必须像上面这样更改:( linux /vmlinuz root=/dev/sda1 即根文件夹)initrd /boot/initrd.img (即add .img
Warner

5

根据上述代码修订的解决方案

上面的解决方案不会完全正常工作,因为它将引导分区安装到文件系统的/(根)中。当然,这使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 live boot 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内部查找启动文件。是时候再次进行chroot了,这一次已经有了一些grub所需的文件夹,这些文件夹已经由您的Ubuntu live光盘生成了:

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

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

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


0

我知道,这是一个老问题,但是今天我在实际版本的mint-linux(基于ubuntu)上遇到了同样的麻烦。我找到了一个非常简单的解决方案!:-)在首次安装过程中断开Internet连接。这将停止加载不兼容的grub2。安装完成后进行所有更新。


0

得到了同样的错误。唯一的问题是/ cow仍安装在/上。

一点sudo umount / cow就可以了。


-6

这是update-grub命令,当从实时CD使用它时,它将给您错误。我在进行抢救时也遇到了类似的情况。您遇到的问题是update-grub和grub-install命令不能直接在live cd下工作(我不知道为什么)。因此,您必须转到命令所在的/ usr / sbin并从那里执行命令(即./update-grub)。


不,您必须安装硬盘并将chroot插入其中,就像@ green7所说的那样。
psusi 2014年

我的方法也行。试试吧。它更简单
aveemashfaq 2014年

1
你没有办法。/ usr / sbin已经在路径上,因此无需在此处进行cd。您不能直接从实时CD运行grub-install和update-grub(如您所述),因为它会尝试设置grub来引导当前系统,即实时CD,而不是安装在硬盘上的os。驾驶。
psusi 2014年

当然,这是行不通的。您收到“无法获取/ cow的规范路径”错误。还有关于将CD刻录到/ usr / sbin的内容。
dan3

尝试一下的人。它一直对我
有用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.