systemd-nspawn
跳转到导航
跳转到搜索
例子
获取登录 shell
sudo zfs clone -o mountpoint=/tmp/root arch/root@2018-01-15-auto arch/root-clone
sudo systemd-nspawn -M hostname -D /tmp/root --as-pid2 /bin/agetty -a root console
临时容器
使用 --ephemeral / -x 选项即可获得一份临时的 rootfs。注意:不要在非 btrfs 上使用(会复制),也不要使用 userns(会调整 rootfs 中文件的权限)。该操作会包含所有指定目录树下的 btrfs 快照。
sudo systemd-nspawn -xD /
另外可以考虑使用 --volatile=yes 或者 --volatile=overlay(不支持在 / 上使用)。
sudo systemd-nspawn --volatile=yes -D / --bind-ro /root:/root /bin/zsh
sudo systemd-nspawn --volatile=overlay -D /run/ssd/snapshots/-/2025-08-13-09-auto /bin/zsh
全权限运行
这样可以跑 Docker。
sudo SYSTEMD_SECCOMP=0 systemd-nspawn --capability=all --network-bridge=br0 --boot -D rootfs
VAAPI
sudo systemd-nspawn -D /run/ssd/archkde-rootfs --bind=/dev/dri --property='DeviceAllow=char-drm rwm' zsh
用户命名空间
-U
使用时,在被支持的情况下,一段子id会被选取、rootfs会被idmap。此时若需要--bind目录,需要指定idmap选项以保持同样的id映射。如:
sudo systemd-nspawn -U -D /run/ssd/archkde-rootfs --bind=/var/cache/pacman/pkg:/var/cache/pacman/pkg:idmap zsh -l
owneridmap 挂载选项
比如在postgresuid不一致的时候在容器里跑数据库。挂载目标目录需要提前创建并且chown给相应的uid。
sudo systemd-nspawn -D rootfs --bind datadir:/var/lib/postgres:owneridmap --bind /run/postgresql:/var/tmp/postgresql:owneridmap