销毁Jail
销毁一个jail并不是简单的停止jail和删除jiail目录以及对应配置那么简单:
FreeBSD的一些文件标志的特定文件即使root用户也无法删除,需要通过
chflags
命令移除标志才能清理
销毁jail的步骤
停止需要销毁的jail
停止jail
# 停止名为dev的jail
service jail stop dev
使用
chflags
命令移除文件标志:
使用
chflags
命令移除文件标志chflags -R 0 /usr/local/jails/containers/dev
然后删除jail所在目录,或者zfs销毁卷:
删除zfs卷
zfs destroy zroot/jails/containers/dev
清除
/etc/jail.conf
或/etc/jail.conf.d/
目录下配置
无法销毁zfs问题排查
我遇到一个问题,销毁 dev-1
和 dev-2
的两个zfs卷正常,但是尝试删除 dev
卷:
删除zfs卷
zfs destroy zroot/jails/containers/dev
删除zfs卷报错
cannot unmount '/usr/local/jails/containers/dev': pool or dataset is busy
我确定已经停止了jail( jls
已经无输出),甚至重启了操作系统,但是报错依旧。
执行 lsof | grep containers
看到如下输出:
lsof
输出确实显示有访问存在gvfsd-tra 1766 admin 22r VDIR 2943269321,419618350 3 34 /usr/local/jails/containers (zroot/jails/containers)
gvfsd-tra 1766 admin 23r VDIR 2943269321,419618350 3 34 /usr/local/jails/containers (zroot/jails/containers)
gvfsd-tra 1766 admin 24r VDIR 1197231863,1485889153 23 34 /usr/local/jails/containers/dev (zroot/jails/containers/dev)
gvfsd-tra 1766 admin 25r VDIR 1197231863,1485889153 23 34 /usr/local/jails/containers/dev (zroot/jails/containers/dev)
lsof: WARNING: /root/.lsof_xcloud was updated.
可以看到十一个 1766
进程在使用中,这个 1766
进程如下:
仍然在使用zroot中容器目录的进程
admin 1766 0.0 0.1 46772 11748 - S 13:33 0:00.08 /usr/local/libexec/gvfsd-trash --spawner :1.2 /org/gtk/gvfs/exec_spaw/0
这个问题在 Bug 254024 - devel/gvfs: gvfsd-trash latches to zfs volumes 已经有报告bug,看起来是Trash服务监控zfs卷存在问题(glibc问题?),例如xfce的垃圾箱回收就使用 gvfsd-trash
。
可以先临时杀掉 gvfsd-trash
进程来解决 zfs destroy
卡住问