系统相关 Linux 文件系统
Linux 文件系统
看下服务器的文件系统
1. df -T -h
[root@VM-16-11-centos ~]# df -T -h
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 24K 1.9G 1% /dev/shm
tmpfs tmpfs 1.9G 832K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 ext4 59G 9.0G 48G 16% /
overlay overlay 59G 9.0G 48G 16% /var/lib/docker/overlay2/c71d4aaa1ad56fcd6cddb3194a01d7b2321048c96ae7173d3d6818d3cc98b18d/merged
overlay overlay 59G 9.0G 48G 16% /var/lib/docker/overlay2/a84f2916e02a2ed5c3346f34a870c63a969e9dc68bc2d1b7ca4be142af86644a/merged
tmpfs tmpfs 378M 0 378M 0% /run/user/0
overlay overlay 59G 9.0G 48G 16% /var/lib/docker/overlay2/cce7e3b27ad5ce15c4ffef20201afbc0357614a5165d1c17b58a03690f1c9086/merged
overlay overlay 59G 9.0G 48G 16% /var/lib/docker/overlay2/ba85761fc7985418aac3c4478d300cfcd8e5c0e0d4dc794692a2a0e33255bb2a/merged
overlay overlay 59G 9.0G 48G 16% /var/lib/docker/overlay2/f88f5ce04eb347929e7c57e883614bc8d3ed260530bc49026c1a353a4874b399/merged
2. cat /etc/fstab
[root@VM-16-11-centos ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Nov 26 02:11:36 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=659e6f89-71fa-463d-842e-ccdf2c06e0fe / ext4 defaults 1 1
内存文件系统 tmpfs
- tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统。 tmpfs 可以使用您的内存 或 swap 分区来存储文件。在 Redhat/CentOS 等 linux 发行版中默认大小为物理内存的一半。
- tmpfs 既可以使用物理内存,也可以使用交换分区,因为 tmpfs 使用的是“虚拟内存”。 Linux 内核的虚拟内存同时来源于物理内存和交换分区,主要由内核中的 VM 子系统进行调度,进行内存页和 SWAP 的换入和换出操作,tmpfs 自己并不知道这些页面是在交换分区还是在物理内存中。
- 如果你想使用 tmpfs ,那么最简单的办法就是直接将文件存放在 /dev/shm 下,虽然这并不是推荐的方案,因为 /dev/shm 是给共享内存分配的,共享内存是进程间通信的一种方式。
堆叠文件系统 overlay
目前 docker 默认的文件系统为 overlay2
可以通过
docker info | grep "Storage Driver"
查看
启动一个容器看看
以 Docker 私有仓库 registry 镜像为例
docker search registry
每运行一个 docker 容器,就会对应一个 overlay
docker run -d -p 5000:5000 --name registry registry
如上图,registry 启动后的容器
bfb72e399ad50db625cea381e56dd4550cf15173e7360bb135d4539a11285fe7
使用 mount 查看已挂载的文件系统
$ mount |grep overlay2
overlay on /var/lib/docker/overlay2/bfb72e399ad50db625cea381e56dd4550cf15173e7360bb135d4539a11285fe7/merged
type overlay (rw,relatime,
lowerdir=/var/lib/docker/overlay2/l/QBDC3JTO6OJCKBGECABICLCGQA:/var/lib/docker/overlay2/l/YPDPWIL42CORMMVBBPDPSWLEF4:/var/lib/docker/overlay2/l/TRWDRE65Z2R7EZ6RZMDZYXXWAV:/var/lib/docker/overla2/l/LFP3RV3DQMHSDYUIQZO6XI6GUA:/var/lib/docker/overlay2/l/CTA7FIGTQQGU6AFA2HS665N47Y:/var/lib/docker/overlay2/l/2UREITCJ5P36FBPLQQTCLY6Z55,
upperdir=/var/lib/dockeroverlay2/bfb72e399ad50db625cea381e56dd4550cf15173e7360bb135d4539a11285fe7/diff,workdir=/var/lib/docker/overlay2/bfb72e399ad50db625cea381e56dd4550cf15173e7360bb135d4539a11285fe7/work)
文件系统分析
1.两个的关键词:lowerdir、upperdir
- 堆叠文件系统,顾名思义,有层次地堆叠在意思
- 在merged目录下,用户会无感知地看到 upperdir、lowerdir…(可能含多个)目录下的内容
- merged = upperdir + lowerdir… (同名文件选高层次文件)
- 当 upperdir、lowerdir…目录文件有冲突时,会根据层次关系选择性屏蔽,当然lowerdir也有层次关系
2.一探究竟
cd /var/lib/docker/overlay2/bfb72e399ad50db625cea381e56dd4550cf15173e7360bb135d4539a11285fe7/
- lower:用来存储只读的信息,为了节省空间,用硬链接实现
- 软链接:
lrwxrwxrwx
“ l ” 开头,类似快捷方式 - 硬链接:
-rw-r--r--
“ - ” 开头,类似复制,但又能保持和源文件同步
- 软链接:
- diff:用来记录删除和修改的文件,而 merged 里能看到所有文件
- merged:容器运行时存在, 能看到容器中所有的文件