我正在尝试做的事情:
- 制作一个具有两个分区的可启动 USB(用于数据的可启动 FAT32 和 NTFS)。(完成)
- 将 GRUB2 安装到 FAT32 分区。(完成)
- 使 FAT32 分区具有多重引导功能,并持久安装 Ubuntu。
最后一个应该不是那么难,但现在我的头快要爆炸了……我找不到任何地方关于如何在一个分区而不是在根目录中(例如在 ubuntu12.04 文件夹中)永久安装 Ubuntu 的分步说明。目前,我从互联网上收集了信息,以下是我所做的:
- 将 Ubuntu 12.04 LiveCD ISO 解压到
/ubuntu12.04
目录中。 - 使用它创建
/ubuntu12.04/casper-rw
文件。dd
mkfs.ext2
添加
menuentry
到grub.cfg
:menuentry "Run Ubuntu 12.04.2 Live" { linux /ubuntu12.04/casper/vmlinuz file=/ubuntu12.04/preseed/ubuntu.seed boot=casper persistent rw quiet splash -- initrd /ubuntu12.04/casper/initrd.lz }
但结果总是一样的:
(initramfs): Unable to find a medium containing a live file system.
我应该把casper-rw
文件放在哪里才能让 initramfs 找到它?或者放在哪里都可以,只要能得到我需要的东西。
答案1
对于 Ubuntu 12.04.2,内核是/casper/vmlinuz.efi
。请注意,.efi
是最近添加的。
另外,您不需要提取 CD 文件,您可以直接从 启动.iso
。这是我用于 USB 多重启动的模板:
menuentry "YOUR TITLE" {
insmod ntfs
insmod iso9660
loopback loop /distros/FILENAME.ISO
linux (loop)/casper/vmlinuz.efi persistent boot=casper iso-scan/filename="/distros/FILENAME.ISO" noeject noprompt splash toram --
initrd (loop)/casper/initrd.lz
}
这样,我可以将所有发行版/版本作为原始 .iso 文件保存在/distros
NTFS 数据分区内的目录中。Grub2 安装到 MBR,其/boot
文件(包括上面的手写文件/boot/grub/grub.cfg
)也安装在数据分区中。Grub2 安装为:
sudo grub-install --no-floppy --root-directory="/PATH/TO/MOUNTED/USB" "/dev/sdX"
答案2
根据我的经验,使用 grub 手动创建启动盘非常脆弱。如果在 efi 系统上创建,则无法在 bios 系统上运行,并会出现错误
error:invalid arch independent ELF magic.
grub rescue>
在仅 efi 的系统上,bios bootoaders可能不行。最好同时使用 grub-efi 和 syslinux,就像自动创建的 live CD 一样。
你可能想这样做
a) 防止大量的文件夹和文件弄乱你的 U 盘,导致 U 盘无法用于其他用途
b)多重引导
我使用的技巧如下:将 grub 放入:
sudo grub-install --removable --root-directory=/path/to/mount /dev/sdx
似乎--removable
是需要的,否则它会在某些带有 efi 的计算机上产生有趣的安装错误
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
这将创建一个boot
和一个efi
文件夹。在文件夹内安装 syslinux boot
(与标准 live cd 不同):
cd /path/to/mount
sudo syslinux --directory boot/syslinux --install /dev/sdx
将 ubuntu iso 解压到文件夹 ubuntu ( /path/to/mount/ubuntu
) 编辑/path/to/mount/boot/grub/grub.cfg
以包含:
menuentry "Ubuntu" {
set gfxpayload=keep
linux /ubuntu/casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash live-media-path=/ubuntu/casper --
initrd /ubuntu/casper/initrd.lz
}
然后设置 syslinux:vesamenu.c32
从 iso 中的 isolinux 目录复制以/path/to/mount/boot/syslinux/vesamenu.c32
创建/path/to/mount/boot/syslinux/slax.cfg
包含以下内容:
PROMPT 0
TIMEOUT 90
DEFAULT /boot/syslinux/vesamenu.c32
LABEL Ubuntu
MENU LABEL Ubuntu
kernel /ubuntu/casper/vmlinuz.efi
append initrd=/ubuntu/casper/initrd.lz boot=casper live-media-path=/ubuntu/casper quiet splash --