从/ var / lib / docker / aufs / diff /中删除的文件

时间:2019-07-30 08:37:33

标签: docker filesystems

Docker docs状态:

  

警告:请勿直接操纵/var/lib/docker/中的任何文件或目录。这些文件和目录由Docker管理。

假设某人尚未阅读该提示,并从/var/lib/docker/aufs/diff删除了一些文件以释放一些磁盘空间。这些文件不存在于 Docker卷中,也不属于原始 Docker映像的一部分,而是在容器可写层中创建的。重新启动给定的容器可以释放磁盘空间,但是有任何已知的副作用吗?

下一次:是否通过容器docker exec .. rm ..从容器内删除了此类文件或目录会导致正确的删除,还是仅将它们标记为已删除?文档目前没有描述这种特殊情况。

1 个答案:

答案 0 :(得分:1)

  

重新启动给定的容器会释放磁盘空间,但是有任何已知的副作用吗?

如您在问题中所述,您不应“操纵/ var / lib / docker /中的任何文件或目录” ,因为可能会出现任何副作用,并且没有文档可以追踪到任何与此相关的内容:这是内部Docker管道,可能会极大地改变其他Docker版本,因此我们不应将其暴露给最终用户,也不要对其进行调和。您可以查看适用于您的Docker版本的Docker代码及其所有依赖项,以了解发生了什么,但这并不是很实际的:-)

  

有任何已知的副作用吗?

可能会有副作用-我坚持 may ,因为根据您的Docker版本和配置,可能会发生任何事情。即使它似乎可行,也可能会破坏某些功能。

众所周知的副作用是Docker安装损坏,它可能以各种方式出现:随机容器崩溃,数据丢失,无法解释的错误等。

  • 在最理想的情况下,您只是丢弃了容器中的一些数据,以后一切都会正常运行。
  • 情况不太好:您实际上在安装中破坏了某些东西并破坏了它,最好完全重新安装Docker。
  

从容器内删除此类文件或目录(通过docker exec .. rm ..)是否导致正确删除,还是仅将它们标记为已删除?

在容器中删除文件并不总是将其从系统中删除,这取决于您使用的驱动器。 Doc有一节介绍如何为所有文件编写文件:

  • AUFS-似乎暗示文件已删除,AUFS将从图像层复制文件并对其进行处理,然后应删除副本
      

    在容器内删除文件时,将在容器层中创建白化文件。图像层中文件的版本不会被删除[...]随后对同一文件的写入将对已经复制到容器中的文件副本进行操作。

  • BTRFS-已删除并回收了空间,doc非常清楚:
      

    如果容器创建文件然后将其删除,则此操作在Btrfs文件系统本身中执行,并回收空间。

  • devicemapper-根据配置可能无法删除:
      

    如果您使用的是direct-lvm,则释放块。如果您使用loop-lvm,则可能无法释放这些块

  • OverlayFS-似乎暗示文件已删除,但图像文件保留
      

    在容器中删除文件时,会在容器中创建白化文件(updir)。图片层(lowerdir)中的文件版本未删除

  • ZFS-删除:
      

    如果在容器的可写层中创建然后删除文件或目录,则zpool将回收这些块。

  • VFS使用的是上一层的副本,并直接在代表该层的目录中工作,容器中的删除可能会将其从主机上的相关目录中删除
  

文档目前没有描述这种特殊情况。

是的,可能不会;)