联合文件系统介绍
联合文件系统一个可堆叠统一的文件系统,该系统可以合并多个目录(分支)的内容,同时保持其物理内容独立。
对于联合文件系统有很多不同的实现:
- aufs
- overlay
overlay原理介绍
OverlayFS 处理内容层 :一个或多个下层( lowerdir)和一个上层(upperdir)。下层被视为只读,上层被视为读写。OverlayFS 通过联合挂载(merged)提供这些层的统一视图。
- lowerdir:只读层,包含基础文件,不可修改。
- upperdir:可写层,允许写操作,所有修改都保存在这里。
- merged:显示 lowerdir 和 upperdir 合并后的统一视图。
文件变更操作
新增文件
在上层(upperdir)新创建一个文件
删除文件
上层创建一个具有相同名称的特殊字符设备,上层的字符设备表示该文件或文件夹应从统一视图中隐藏。
修改文件
- 修改上层的文件,不会有任何特殊变化。
- 修改下层的文件,则该文件首先会被
复制到上层
,然后才会对副本
进行更改。
OverlayFS演示
挂载一个overlay文件系统,通过mount -t overlay -o overlay 来实现
overlay的options有如下:
lowerdir=<dir>:指定用户需要挂载的lower层目录,lower层支持多个目录,用“:”间隔,优先级依次降低。
upperdir=<dir>:指定用户需要挂载的upper层目录,upper层优先级高于所有的lower层目录。
workdir=<dir>:一个临时工作目录,用于支持文件系统的内部操作,特别是处理文件的删除和元数据管理。
初始环境
mkdir demo
cd demo
mkdir lower upper merged work
echo "File1 in lower layer" > lower/f1
echo "File2 in lower layer" > lower/f2
echo "File3 in lower layer" > lower/f3
echo "File3 in upper layer" > upper/f3
echo "File4 in upper layer" > upper/f4
cd ..
显示目录结构
tree demo
demo
├── lower
│ ├── f1
│ ├── f2
│ └── f3
├── merged
├── upper
│ ├── f3
│ └── f4
└── work
不要在merged目录或者work目录创建任何文件
挂载overlay文件系统到merged,在merged提供lower和upper目录的统一视图。
mount overlay -t overlay -o lowerdir=demo/lower,upperdir=demo/upper,workdir=demo/work demo/merged
显示挂载后的内容
tree demo
└── demo
├── lower
│ ├── f1
│ ├── f2
│ └── f3
├── merged
│ ├── f1
│ ├── f2
│ ├── f3
│ └── f4
├── upper
│ ├── f3
│ └── f4
└── work
└── work
添加文件
echo "Add file5 in merged view" > demo/merged/f5
tree demo
demo
├── lower
│ ├── f1
│ ├── f2
│ └── f3
├── merged
│ ├── f1
│ ├── f2
│ ├── f3
│ ├── f4
│ └── f5
├── upper
│ ├── f3
│ ├── f4
│ └── f5
└── work
└── work
upper中新增了f5文件,lower中没有f5文件
cat demo/upper/f5
Add file5 in merged view
删除文件
rm demo/merged/f2
tree demo
demo
├── lower
│ ├── f1
│ ├── f2
│ └── f3
├── merged
│ ├── f1
│ ├── f3
│ ├── f4
│ └── f5
├── upper
│ ├── f2
│ ├── f3
│ ├── f4
│ └── f5
└── work
└── work
└── #775a4af
ls -l demo/upper/
total 12
c--------- 2 root root 0, 0 Dec 23 11:03 f2
-rw-r--r-- 1 root root 21 Dec 23 11:03 f3
-rw-r--r-- 1 root root 21 Dec 23 11:03 f4
-rw-r--r-- 1 root root 25 Dec 23 11:03 f5
删除文件 f2 会导致upper中出现特殊字符文件f2,但lower目录保持不变。
修改文件
当修改文件时,根据文件所在的位置(upper或lower),将发生向上复制操作。例如,如果lower的 f1,则 f1 将被复制到upper并在upper进行修改。
cat demo/merged/f1
File1 in lower layer
echo "adding some random content" >> demo/merged/f1
cat demo/merged/f1
File1 in lower layer
adding some random content
cat demo/upper/f1
File1 in lower layer
adding some random content
cat demo/lower/f1
File1 in lower layer
如上所示,下层的文件 f1 保持不变。上层中存在 f1 的副本,并对其进行了修改以添加新行