首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

让 FreeBSD 和 Gentoo Linux 在 ZFS 存储卷上共存(2)

让 FreeBSD 和 Gentoo Linux 在 ZFS 存储卷上共存(2)

你也可以将其细分,以达到你期望,比如在 /usr/share 下创建更多的子目录。
对于 Gentoo,由于 Linux 更倾向于宽松的文件定位,你可以采取一个更简单的方案:
zfs create -o exec=on -o setuid=off -o compression=off data/gentoo/tmp
zfs create -o exec=on -o setuid=on -o compression=lz4 data/gentoo/usr
zfs create -o exec=off -o setuid=off -o compression=lz4 data/gentoo/var
在 Gentoo 系统下需要细分子目录的用户权限,类似于我在 FreeBSD 下的操作。
最后的任务是手动挂载所有的文件系统,命令模版如下:
mount -t zfs data/freebsd/<path> /mnt/<path>
这个命令模板十分必要,它适合所有传统的挂载方式。另外,因显示所有命令要占据较大空间,在此我将其省略。
安装和配置 FreeBSD 系统

输入 “exit”后会返回到 FreeBSD 安装程序,同时所有的东西都被挂载在了 /mnt/。  安装过程中的提示信息直接明了。为了最后两项配置任务,你还需要进入一个 shell 环境。
进入 shell,然后进入新的 FreeBSD 系统:
chroot /mnt
创建 fstab
因为我们已将大多数的 ZFS 数据集挂载到了每个 OS 各自不同的路径下,所以需要为他们创建一个 /etc/fstab 文件。下面的 fstab 会将所有的数据集挂载到正确的位置上:
data/freebsd/tmp /tmp zfs rw 0 0
data/freebsd/usr /usr zfs rw 0 0
data/freebsd/usr/include /usr/include zfs rw 0 0
...
data/gentoo/ /gentoo zfs rw 0 0
data/gentoo/tmp /gentoo/tmp zfs rw 0 0
...
proc /proc procfs rw 0 0
注意,此处我已将许多条目信息省略掉。你需要按照上述操作,将每一个数据集映射到与其对应的合适路径上。
安装 FreeBSD 原生引导程序

我们需要 FreeBSD 引导加载程序来执行首次进入系统的操作。执行如下几个步骤进行安装:
mount -t msdosfs /dev/ada0p1 /mnt
mkdir /mnt/efi
mkdir /mnt/efi/BOOT
cp /boot/boot1.efi /mnt/efi/BOOT/BOOTX64.EFI
然后设置 zpool 上的 bootfs 参数, 以便 FreeBSD 引导加载程序可以选到正确的数据集:
zpool set -o bootfs=data/freebsd data
你可能还需要为某些硬件设置 EFI 系统分区上的 bootme 标识:
gpart set -a bootme -i 1 ada0
现在你的系统可以直接进入 OS 了。
FreeBSD 主要操作系统

现在你可以直接引导进入 FreeBSD 了。你还需要连接到一个与 wpa_supplicant 配置相关的网络。
在进行其他事项之前,先获取到新的源代码,有利于对全局以及内核进行重新构建,这样做能确保系统处于最新状态。你可能也需要获取到端口的集合等。与此类相关的内容,你可自行查看资料。
安装 GRUB
grub-efi 端口会安装一个兼容 EFI 系统的 GRUB 版本。这个端口要比在 Gentoo 上进行同等的操作简单得多。端口的安装方法如下:
cd /usr/ports/sysutils/grub2-efi
make install clean
你需要使用 grub-mkconfig 命令创建一个 grub.cfg 文件,过程中可能需要对该命令进行编辑。你也可以直接使用下面这个文件 (make sure it’s at /boot/grub/grub.cfg):
insmod part_gpt
insmod zfs
menuentry 'FreeBSD' --class freebsd --class bsd --class os {
  search.fs_label data ZFS_PART
  echo "Loading FreeBSD Kernel..."
  kfreebsd ($ZFS_PART)/freebsd/@/boot/kernel/kernel
  kfreebsd_loadenv ($ZFS_PART)/freebsd/@/boot/device.hints
  kfreebsd_module_elf ($ZFS_PART)/freebsd/@/boot/kernel/opensolaris.ko
  kfreebsd_module_elf ($ZFS_PART)/freebsd/@/boot/kernel/acl_nfs4.ko
  kfreebsd_module_elf ($ZFS_PART)/freebsd/@/boot/kernel/zfs.ko
  set kFreeBSD.vfs.root.mountfrom=zfs:data/freebsd
  set kFreeBSD.vfs.root.mountfrom.options=rw}
menuentry 'Gentoo Linux' {
  search.fs_label data ZFS_PART
  linux ($ZFS_PART)/gentoo@/boot/kernel dozfs=force root=ZFS=data/gentoo
  initrd ($ZFS_PART)/gentoo@/boot/initramfs
}
注意,此处我们已为 Gentoo 创建了一项配置。最后,你需要挂载 EFI 系统分区然后安装 GRUB:
mount -t msdosfs /dev/ada0p1 /mnt
grub-install --efi-directory=/mnt --disk-module=efi
这样做会将 GRUB 引导程序安装到 EFI 系统分区的 /efi/grub/grub.efi,你需要将它拷贝到相应位置。在此之前,我建议你先对 FreeBSD 本地的引导加载程序进行备份:
cp /mnt/efi/BOOT/BOOTX64.EFI /mnt/efi/BOOT/BOOTX64.BAK
这样能省去在操作有误时的回退操作。现在拷贝 GRUB 引导加载程序:
cp /mnt/efi/grub/grub.efi /mnt/efi/BOOT/BOOTX64.EFI
之后需要对 GRUB 引导加载程序进行测试,以确保它能有效的对系统进行重新启动,并引导进入 FreeBSD。
继承事业,薪火相传
返回列表