我应该在容器中运行 fstrim 吗?

我应该在容器中运行 fstrim 吗?

如果我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 作业。

相关内容