如何从 ubuntu liveCD 将 grub 安装到空磁盘

如何从 ubuntu liveCD 将 grub 安装到空磁盘

免责声明:我是新手,我需要一步一步的指导。谢谢!

我想首先安装没有操作系统的 grub,因为它将从本地网络存储的 ISO 文件启动。我已启动到 liveCD(我无法安装它,因为我需要一个不稳定的系统)我已经陷入了第一阶段。我尝试过grub-install /dev/sda,但收到错误消息grub-install: error: cannot open directory '/boot/grub/i386-pc': No such file or directory.

所以我创建并复制了它grub-install需要的所有文件,现在它说 grub-install: error: failed to get canonical path of 'aufs'.

我搜索了网络,发现大多数答案都要求我在安装了系统时使用 chroot(尽管可能会被破坏),但我没有将 Ubuntu 安装到任何驱动器上,我的目标是将 grub 从 liveCD 安装到空驱动器

我想从一个空的引导加载程序开始。

我该怎么做呢?

再次提前致谢。

答案1

如果只是启动 ISO,则不需要完整的 Linux 文件结构。我已将各种格式的 grub 安装到闪存驱动器,并在同一个闪存驱动器上启动 ISO。不确定网络启动所需的确切 grub 启动节。

我有一个旧的 USB2 闪存驱动器,我对其进行了重新格式化。我首先将其设置为 gpt,因为与已有 40 年历史的 MBR 分区相比,我更喜欢它。您可以使用我通常使用的 gparted 。在开始之前,在设备下选择 gpt,在 msdos(MBR) 默认分区上高级。或使用parted或gdisk。注意:这会完全擦除驱动器。 sdX 是您的闪存驱动器。

sudo parted /dev/sdX mklabel gpt

然后我使用 gparted 在大型 FAT32 分区上创建。我必须重新启动才能正确看到它,并且文件浏览器不会自动挂载 ESP 分区,因此使用磁盘或手动挂载。

Model: Kingston DataTraveler 2.0 (scsi)
Disk /dev/sdc: 1998MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  1998MB  1996MB  fat32        esp2  msftdata

然后我用磁盘安装它,然后它位于 /media/fred 中:

/dev/sdc1 on /media/fred/FC87-F75C type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

然后安装grub。我的驱动器被视为 sdc。与旧的 USB2 闪存驱动器相比有点慢。

sudo grub-install --root-directory=/media/fred/FC87-F75C /dev/sdc

它创建了结构和正常的 /EFI/ubuntu/grub.cfg,这是 /boot/grub/grub.cfg 中完整 grub 的 3 行配置文件。但没有创建任何 /boot/grub/grub.cfg 引导文件。我通常使用这些参考资料和我的旧笔记手动创建一个来启动本地 ISO。您必须创建一个 grub.cfg 但包含路径和安装?到网络。

ISO 启动和示例链接

https://help.ubuntu.com/community/Grub2/ISOBoot

更多例子

https://help.ubuntu.com/community/Grub2/ISOBoot/Examples

我使用 google 找到的网络 grub 信息。 nfs 不起作用,但有网络启动的示例。

为 GRUB PXE 设置 nfsroot

如何通过 GRUB2 控制台从网络启动 Linux 内核?

答案2

您不需要安装系统。首先你必须安装磁盘,从现在开始我们将使用作为示例sda。作为挂载点示例/media/usr/DISK

在终端中,使用以下代码:

dirs=(etc bin usr proc sys lib lib64 dev sbin)

for dir in ${dirs[@]}; do
  mkdir /media/usr/DISK/$dir
  sudo mount --bind /$dir /media/usr/DISK/$dir
done

sudo chroot /media/usr/DISK/ grub-install --target=i386-pc --boot-directory=/ /dev/sda

for dir in ${dirs[@]}; do
  sudo umount /media/usr/DISK/$dir
  rm -r /media/usr/DISK/$dir
done

相关内容