ulk*_*CST 55 live-usb grub2 usb usb-creator
我尝试安装 Ubuntu 12.10 已经有一段时间了,并且一一通过了障碍。现在我的情况如下。
我有一台 PC 和 10 GB 硬盘,它们将完全专用于 Ubuntu,因此没有五笔和双启动选项。
我试图从 DVD 安装,但它卡在“超出频率”错误中。所以我不得不适应 USB 启动选项。但是我的 PC 是 USB 不可启动的,所以解决方法是“Plop Boot Manager”。所以我正在做如下安装过程:
sudo nano /etc/default/grub.打开 grub 。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)
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)
现在您可以安全地重新启动并看到众所周知的启动菜单再次出现。
从物理服务器迁移到虚拟机后,此解决方案是唯一对我有用的解决方案。我希望有人觉得这很有用!