Docker 要使用 Btrfs 文件系统,我们先了解一下 Btrfs 的一些用法:

# mkfs.btrfs -f -L testbtrfs  /dev/sdd1 /dev/sdd2 /dev/sdd3

-f 是强行覆盖已有分区,上面命令建立了一个 testbtrfs 卷,是个3节点的磁盘阵列,其中 RAID0 保存数据, RAID1 保存 metadata 。注意,这个阵列的 RAID0 会把数据按序分配到所有节点上,而 RAID1 有点特别,metadata 会生成2份,按照 round-robin 的方式决定把两份数据到所有节点的某两个节点上。

# blkid  /dev/sdd* 
/dev/sdd: UUID="e9b11649" UUID_SUB="af7ce22c" TYPE="btrfs" 
/dev/sdd1: LABEL="testbtrfs" UUID="b6a05243" UUID_SUB="4770cbfb" TYPE="btrfs" 
/dev/sdd2: LABEL="testbtrfs" UUID="b6a05243" UUID_SUB="b4524e3d" TYPE="btrfs" 
/dev/sdd3: LABEL="testbtrfs" UUID="b6a05243" UUID_SUB="7e279107" TYPE="btrfs"

查看 blkid ,会发现三个分区的UUID是一样的,但是UUID_SUB不一样。

# mkdir /btrfs
# mount /dev/sdd3 /btrfs

# vi /etc/fstab
------
LABEL=testbtrfs  /btrfs  btrfs  defaults  0 0  
或者
UUID=b6a05243  /btrfs  btrfs  defaults  0 0  
------

两种挂载方式

# btrfs filesystem df /btrfs
Data, RAID0: total=3.00GB, used=0.00  
Data: total=8.00MB, used=0.00  
System, RAID1: total=8.00MB, used=4.00KB  
System: total=4.00MB, used=0.00  
Metadata, RAID1: total=1.00GB, used=24.00KB  
Metadata: total=8.00MB, used=0.00  

查看分区的空间

# btrfs filesystem show /dev/sdd1
failed to open /dev/sr0: No medium found  
Label: 'testbtrfs'  uuid: b6a05243  
        Total devices 3 FS bytes used 6.95GB
        devid    3 size 11.72GB used 4.01GB path /dev/sdd3
        devid    2 size 11.72GB used 3.01GB path /dev/sdd2
        devid    1 size 11.72GB used 4.02GB path /dev/sdd1

直接查看原始分区

# btrfs subvolume create /btrfs/sub1
# btrfs subvolume create /btrfs/sub2
# btrfs subvolume create /btrfs/sub2/sub3

建立子卷

建好后的结构如上图

# btrfs subvolume list /btrfs
ID 260 gen 22 top level 5 path sub1  
ID 261 gen 22 top level 5 path sub2  
ID 262 gen 22 top level 5 path sub2/sub3  

用btrfs命令查看

# umount /btrfs/
# mount -o subvolid=261 /dev/sdd1 /btrfs/

把sub2挂接成/btrfs

# btrfs subvolume set-default 261 /btrfs

设置缺省卷

LABEL=testbtrfs  /btrfs defaults,subvolid=269 0 0  

fstab挂接非缺省卷的方法

btrfs subvolume snapshot /btrfs/sub1 /btrfs/sub1/snapshot  

建立子卷快照

# mv /btrfs/snapshotname /btrfs/subvolumename

将快照回滚到正常的卷

comments powered by Disqus