如果我fstrim
在docker容器中运行,我会得到关于主机挂载(?)文件的错误not a directory
。
$ docker run -ti -v tmp:/tmp2 ubuntu:16.04 /sbin/fstrim --all
fstrim: /etc/hosts: not a directory
fstrim: /etc/hostname: not a directory
fstrim: /etc/resolv.conf: not a directory
fstrim: /tmp2: FITRIM ioctl failed: Operation not permitted
我猜这是因为容器不是特权. (至少是FITRIM ioctl failed
错误)
我通过cron
在一个新ubuntu:16.04
容器上安装发现了这一点(我知道它违反了“一个过程”的理念 - 这是另一个讨论)/etc/cron.weekly/fstrim
但是一旦您安装了 cron,默认图像fstrim
就会开始每周运行,并且 cron 会通过电子邮件向我发送错误。
fstrim
我应该在容器中运行吗?
我仍在思考aufs
,我发现的所有页面都fstrim
讨论 SSD 和可用空间恢复。
这些是否适用于容器? 主机的 fstrim cron 作业不会处理所有事情吗?我应该从容器中删除 cron 作业吗?还是 docker 中存在错误?
编辑:系统信息:
$ uname -sri; docker --version
Linux 4.4.0-53-generic x86_64
Docker version 1.12.3, build 6b644ec
答案1
fstrim
在容器内绝对没有意义。
目的fstrim
是取消映射备用存储上未使用的存储,无论是本地 SSD 还是通过 iSCSI、光纤通道或其他方式安装的精简配置 SAN 存储。这样的过程需要在主机上运行,而不是在容器内运行。
您看到的特定错误是因为fstrim
尝试在每个挂载点上调用 FITRIM ioctl,并且容器内的挂载点与主机正在使用的实际块设备不对应。即使容器具有特权,通常也是如此。
Ubuntu 为什么要放入fstrim
容器镜像完全是个谜。如果你被 Ubuntu 容器困住了,我建议禁用该 cron 作业。