免责声明:我是新手,我需要一步一步的指导。谢谢!
我想首先安装没有操作系统的 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 不起作用,但有网络启动的示例。
答案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