overlayfs 中如何表示文件删除

众所周知,overlayfs 引入了 lower 和 upper 两层,再加一个 merge 层展示,低层的文件只读不写,上层的文件可以发生读写,对于增加文件和修改文件都很容易理解,如果是删除文件或者对文件重命名,overlayfs 又是如何解决?

初始化

$ pwd
/root/go/mydocker/merged

$ ls bin/
diff           i2cget       mkfifo  resume         tcpsvd         zcat
dirname        i2cset       mkfs.ext2   rev        tee        zcip
dmesg          i2ctransfer  mkfs.minix  rm         telnet
dnsd           id       mkfs.vfat   rmdir          telnetd
dnsdomainname  ifconfig     mknod   rmmod          test

shell 1 处于 merged 层中可以查看 bin 下有很多文件

$ pwd
/root/go/mydocker/upper

$ ls

shell 2 处于 upper 层中可以看到文件夹下是空的

文件删除

$ rm -rf bin/test
$ ls -la bin/
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 who
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 whoami
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 whois
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xargs
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xxd
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xz
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xzcat
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 yes
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 zcat
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 zcip

shell 1 中删除其中一个文件

$ ls -la bin/
c--------- 1 root root 0, 0 Feb 21 17:27 test

shell 2 中可以看到这个文件的第一个 flag 打上了一个 c 标签,这在最终 merge 时就会被隐藏掉

文件重命名

$ mv bin/zcip bin/zcip2 
$ ls -la bin/
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 which
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 who
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 whoami
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 whois
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xargs
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xxd
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xz
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 xzcat
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 yes
-rwxr-xr-x 404 root root 1021496 Jan 18 05:58 zcat
-rwxr-xr-x   1 root root 1021496 Jan 18 05:58 zcip2

shell 1 中将 zcip 文件修改为 zcip2

$ ls -la bin/
c--------- 1 root root    0, 0 Feb 21 17:27 test
c--------- 1 root root    0, 0 Feb 21 17:31 zcip
-rwxr-xr-x 1 root root 1021496 Jan 18 05:58 zcip2

shell 2 中可以看到 zcip 被打上了一个 c flag,并且将 zcip 复制了一份为 zcip2

总结

删除是通过同名文件并且打上一个 c flag 表示的,重命名是通过复制+删除实现的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容