对于大部分文件系统来说,在磁盘上创建好文件系统,然后再挂载到系统中去就完事了。但对于Btrfs来说,除了在格式化和挂载的时候指定不同的参数外,还支持很多其他的功能,比如管理多块硬盘,支持LVM和RAID等,具体的可以参考它的官方文档或者Linux下常见文件系统对比
Btrfs是Linux下大家公认的将会替代ext4的下一代文件系统,功能非常强大。本篇不会介绍Btrfs的原理,也不会介绍Btrfs的所有功能,只是挑了其中的subvolume和snapshot这两个特性来进行介绍
本篇所有例子都在ubuntu-server-x86_64 16.04下执行通过
准备环境
先创建一个虚拟的硬盘,然后将它格式化成Btrfs,最后将它挂载到目录/mnt/btrfs
#为了简单起见,这里只使用一块硬盘来做测试(Btrfs可以管理多块硬盘或分区)。
#新建一个文件,用来虚拟一块硬盘
dev@ubuntu:~$ fallocate -l 512M /tmp/btrfs.img
#在上面创建Btrfs文件系统
dev@ubuntu:~$ mkfs.btrfs /tmp/btrfs.img
btrfs-progs v4.4
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: fd5efcd3-adc2-406b-a684-e6c87dde99a1
Node size: 16384
Sector size: 4096
Filesystem size: 512.00MiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 40.00MiB
System: DUP 12.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 1
Devices:
ID SIZE PATH
1 512.00MiB /tmp/btrfs.img
#创建文件夹并挂载
dev@ubuntu:~$ sudo mkdir /mnt/btrfs
dev@ubuntu:~$ sudo mount /tmp/btrfs.img /mnt/btrfs
#修改权限,这样后面的部分操作就不再需要sudo
dev@ubuntu:~$ sudo chmod 777 /mnt/btrfs
subvolume
可以把subvolume理解为一个虚拟的设备,由Btrfs管理,创建好了之后就自动挂载到了Btrfs文件系统的一个目录上,所以我们在文件系统里面看到的subvolume就是一个目录,但它是一个特殊的目录,具有挂载点的一些属性。
新创建的Btrfs文件系统会创建一个路径为“/”的默认subvolume,即root subvolume,其ID为5(别名为0),这是一个ID和目录都预设好的subvolume。
#这里从mount的参数“subvolid=5,subvol=/”就可以看出来,
#默认的root