systemd-nspawn

来自百合仙子's Wiki
跳转到导航 跳转到搜索

例子

获取登录 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

参见

外部链接