根据上述代码修改解决方案

根据上述代码修改解决方案

我已经尝试安装 Ubuntu 12.10 一段时间了,一个个都遇到了问题。现在我的情况如下。

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

我尝试从 DVD 安装,但卡在“频率过高”错误。所以我不得不适应 USB 启动选项。但我的 PC 无法通过 USB 启动,所以解决方法是“Plop Boot Manager”。所以我的安装过程如下:

  1. 从安装了 plop 的 CD 驱动器启动。
  2. 在 plop 选项中选择 USB 启动。
  3. 启动从 USB 开始。
  4. 监视器最终给出“频率超出”错误
  5. Shift++Alt即可F1获取终端。
  6. 使用 打开 grub 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 硬盘,无操作系统,CRT 显示器 lg StudioWorks(7 年旧)。主板 Mercury P4 266a NDMx(相当于 865)。整个系统在 XP 下运行正常,但 USB 无法启动,其他所有设备运行正常。

下一步我应该做什么?

答案1

从 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

答案2

找到应该启动的驱动器

mount

或者

parted -l

或者

fdisk /dev/sda

并输入p列出分区,查找类型 83。

(如果你有 Fedora,你可能必须使用命令vgslvs,如果你有 mdraid,你可能必须cat /proc/mdstatmdadm -A --scaninsmod raid1insmod 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 中了,您可以使用 grub 命令进行启动,在重新启动并从 BIOS 设置中选择正确的启动驱动器后,或者通过按ESCF8或者F12取决于您的 BIOS 以及您是否足够快,然后在 Grub 提示符下 - 您可以使用制表符完成来找到它(如果不是(hd0,1)但是(hd1,3)或其他东西),但请注意,如果 grub 无法读取文件系统,制表符完成有时会挂起几秒钟。启动到 Grub 后,您可以尝试使用以下命令进行启动:

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

或者,希望您仍然有一个完整的grub.cfg文件......

ls
ls (hd0,1)/
ls (hd0,1)/boot
configfile (hd0,1)/boot/grub.cfg

Grub 1 允许您从 Grub 进行安装:

install (hd0,1)

从正确的驱动器启动后,您可以重试update-grubgrub-install如果仍然失败,您可以尝试:

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

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

在最坏的情况下,这可能是硬盘即将发生故障的征兆,而在最好的情况下,可能只是一个分区标志或启动文件被意外覆盖,或者是另一个操作系统故意或意外损坏的安装程序。

答案3

根据上述代码修改解决方案

上面的解决方案并非完全没有问题,因为它将启动分区挂载到文件系统的 /(根目录)。这当然会让 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 中查找启动文件。是时候再次进行 chrooting 了,这次有一些 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-grub2 /dev/sda

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

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

答案4

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

相关内容