overlyfs
sudo mount -t overlay overlay -olowerdir=lower,upperdir=upper,workdir=work merged
将lower和upper“合并”,并挂载到merged目录
在merged目录创建h文件,可以看到出现在了upper目录下,可以看出它的创建规则,
测试一下copy_up操作:
- 修改文件a的meta信息
- 修改文件b的内容
测试a文件
root@jc:/home/work/merged# touch a
root@jc:/home/work# ls -l lower/
总用量 8
-rw-r--r-- 1 root root 0 10月 10 10:01 a
-rw-r--r-- 1 root root 0 10月 10 10:01 b
drwxr-xr-x 2 root root 4096 10月 10 10:01 dir
drwxr-xr-x 2 root root 4096 10月 10 10:01 test
root@jc:/home/work/merged# ls -l a
-rw-r--r-- 1 root root 0 10月 10 10:20 a
测试b文件
root@jc:/home/work/merged# echo test >> b
root@jc:/home/work/merged# cat b
test
root@jc:/home/work/lower# cat b
root@jc:/home/work/lower# ls
a b dir test
touch操作修改了文件a的atime信息,所以被copy_up了,文件b由于内容被修改,亦被copy_up
接下来,我们验证一下文件的删除和文件夹的删除,分为如下几步:
- 删除upper独有的文件e
- 删除test目录
- 删除共有的文件a,测试字符设备机制
root@jc:/home/work/merged# rm a e
root@jc:/home/work/merged# rm -rf test
root@jc:/home/work/merged# ls
b dir f h
root@jc:/home/work# ls -l lower/
总用量 8
-rw-r--r-- 1 root root 0 10月 10 10:01 a
-rw-r--r-- 1 root root 0 10月 10 10:01 b
drwxr-xr-x 2 root root 4096 10月 10 10:01 dir
drwxr-xr-x 2 root root 4096 10月 10 10:01 test
root@jc:/home/work# ls -l upper/
总用量 8
c--------- 1 root root 0, 0 10月 10 10:29 a
-rw-r--r-- 1 root root 5 10月 10 10:22 b
drwxr-xr-x 2 root root 4096 10月 10 10:02 dir
-rw-r--r-- 1 root root 0 10月 10 10:01 f
-rw-r--r-- 1 root root 0 10月 10 10:14 h
c--------- 1 root root 0, 0 10月 10 10:30 test
可以看到文件e删除后,没有任何字符设备生成,因为它是upper目录独有的,文件a和目录test被删除后,则是生成了字符设备,以表示文件已被删除,而lower目录中的文件a和目录test,并没有任何变化
测试opaque目录机制,具体的步骤是删除共有目录dir,然后再创建同名目录
root@jc:/home/work# rm -rf merged/dir
root@jc:/home/work# ls -l upper/
总用量 4
c--------- 1 root root 0, 0 10月 10 10:29 a
-rw-r--r-- 1 root root 5 10月 10 10:22 b
c--------- 1 root root 0, 0 10月 10 10:33 dir
-rw-r--r-- 1 root root 0 10月 10 10:01 f
-rw-r--r-- 1 root root 0 10月 10 10:14 h
c--------- 1 root root 0, 0 10月 10 10:30 test
root@jc:/home/work# ls -l lower/
总用量 8
-rw-r--r-- 1 root root 0 10月 10 10:01 a
-rw-r--r-- 1 root root 0 10月 10 10:01 b
drwxr-xr-x 2 root root 4096 10月 10 10:01 dir
drwxr-xr-x 2 root root 4096 10月 10 10:01 test
root@jc:/home/work# mkdir merged/dir
root@jc:/home/work# ls -l upper/
总用量 8
c--------- 1 root root 0, 0 10月 10 10:29 a
-rw-r--r-- 1 root root 5 10月 10 10:22 b
drwxr-xr-x 2 root root 4096 10月 10 10:34 dir
-rw-r--r-- 1 root root 0 10月 10 10:01 f
-rw-r--r-- 1 root root 0 10月 10 10:14 h
c--------- 1 root root 0, 0 10月 10 10:30 test
root@jc:/home/work# ls -l lower/
总用量 8
-rw-r--r-- 1 root root 0 10月 10 10:01 a
-rw-r--r-- 1 root root 0 10月 10 10:01 b
drwxr-xr-x 2 root root 4096 10月 10 10:01 dir
drwxr-xr-x 2 root root 4096 10月 10 10:01 test
root@jc:/home/work# ls merged/dir/
root@jc:/home/work#
可以看到,目录创建后,upper中的同名字符设备不见了,而其内部并没有文件c和文件d,也就是说该目录已经是一个opaque目录了。
device-mapper snapshots
base_dev.sh /dev/sdb base //生成 配置表dm-table 和/dev/mapper/base 注:生成snapshot后无法查看
#!/bin/sh
size=$(blockdev --getsize $1)
echo "0 $size linear $1 0" > dm-table
dmsetup create $2 dm-table
./base_dev.sh /dev/sdb base
snap_dev.sh //生成snap配置表snap_table 和dev/mapper/snap ---mount后使用
#!/bin/sh
mkfs.ext4 $2
size1=$(blockdev --getsize $1)
size2=$(blockdev --getsize $2)
echo "0 $size1 snapshot $3 $2 N 16" > snap_table
dmsetup create $4 snap_table
./snap_dev.sh /dev/sdb /dev/sdc /dev/mapper/base snap //参数 1:base 2:snap 3:base_dev 4:snap name