在Linux Jail中使用XFS文件系统
在构建 使用 Rocky-Container-base tgz 包部署Linux Jail Rocky 之后,我尝试将 FreeBSD使用Linux XFS文件系统 用于 LFS分区(和FreeBSD一起Dualboot) ,目标是在FreeBSD的Jail容器中模拟一个Linux系统来构建 LFS(Linux from scratch) 。
Jail容器不是Linux虚拟机,实际上依然是FreeBSD系统,无法直接使用 XFS文件系统 ,需要通过 nullfs 来挂载Host主机已经通过FUSE挂载的XFS分区。所以修订 /etc/jail.conf.d/lrdev.conf ,进一步添加自动挂载和写在Nullfs的配置命令:
调整
/etc/jail.conf.d/lrdev.conf 增加Nullfs绑定 XFS fuse挂载目录lrdev {
# thin jail devfs_ruleset 5 和Linux Jail的4不同
devfs_ruleset=4;
# HOSTNAME/PATH - Snapshot
path = "/zdata/jails/containers/${name}";
# NETWORKS/INTERFACES
$id = "253";
$ip = "192.168.7.${id}/24";
# MOUNT
mount += "devfs $path/compat/rocky/dev devfs rw 0 0";
mount += "tmpfs $path/compat/rocky/dev/shm tmpfs rw,size=1g,mode=1777 0 0";
mount += "fdescfs $path/compat/rocky/dev/fd fdescfs rw,linrdlnk 0 0";
mount += "linprocfs $path/compat/rocky/proc linprocfs rw 0 0";
mount += "linsysfs $path/compat/rocky/sys linsysfs rw 0 0";
mount += "/tmp $path/compat/rocky/tmp nullfs rw 0 0";
mount += "/home $path/compat/rocky/home nullfs rw 0 0";
# MOUNT XFS
exec.poststart += "mount -t nullfs /lfs $path/compat/rocky/xfs_lfs";
exec.poststop += "umount $path/compat/rocky/xfs_lfs";
}
上述容器启动和停止时XFS目录挂载和卸载也可以改写成
而公共配置部分不需要调整,保留 /etc/jail.conf 不变:
混合多种jail的公共
/etc/jail.conf# STARTUP/LOGGING
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_console_${name}.log";
# PERMISSIONS
allow.raw_sockets;
exec.clean;
mount.devfs;
allow.mount;
allow.mount.devfs;
enforce_statfs = 1;
# HOSTNAME
host.hostname = "${name}";
# NETWORK - VNET/VIMAGE
#ip4 = inherit;
interface = igc0bridge;
vnet;
vnet.interface = "${epair}b";
# common NETWORK config
$gateway = "192.168.7.221";
$bridge = "igc0bridge";
$epair = "epair${id}";
# ADD TO bridge INTERFACE
exec.prestart += "ifconfig ${epair} create up";
exec.prestart += "ifconfig ${epair}a up descr jail:${name}";
exec.prestart += "ifconfig ${bridge} addm ${epair}a up";
exec.start += "ifconfig ${epair}b ${ip} up";
exec.start += "route add default ${gateway}";
exec.poststop = "ifconfig ${bridge} deletem ${epair}a";
exec.poststop += "ifconfig ${epair}a destroy";
.include "/etc/jail.conf.d/*.conf";
在启动 lrdev 之前,需要确保Linux compact chroot 目录下存在 /zdata/jails/containers/${name}/compat/rocky/xfs_lfs 目录:
创建目录
# 按照 /etc/jail.conf.d/lrdev.conf 配置创建目录
name=lrdev
path="/zdata/jails/containers/${name}"
mount_dir="$path/compat/rocky/xfs_lfs"
mkdir $mount_dir
启动容器 lrdev :
启动
lrdev Linux Jailservice jail start lrdev
进入
lrdev的Linux环境:
进入
lrdev 的Linux环境jexec lrdev chroot /compat/rocky /bin/bash
此时在容器内部就可以访问Host主机挂载的 FreeBSD使用Linux XFS文件系统