在移动硬盘上使用btrfs文件系统
前言
对于移动硬盘,在空间和便携性上取舍是个比较麻烦的问题,即想要便携又要大的存储空间时怎么办?这时就要考虑带有透明压缩的文件系统,btrfs就是个很好的选择,在拥有诸多现代文件系统特性的基础上增加了透明压缩功能,压缩率能达到50%以上,让移动硬盘能塞下更多文件
但同时btrfs也是有缺陷的,就是主流的操作系统支持性并不好,Windows和Macos需要安装驱动,Linux4.14后的版本才可支持zstd压缩算法。
介绍
Btrfs
(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在Linux操作系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单个文件的大小,总文件系统大小或文件检查和加入ext3未支持的功能,像是可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs也宣称专注在“容错、修复及易于管理
”。
btrfs特性
- 联机碎片整理
- 联机卷生长和收缩
- 联机块设备增加和删除
- 联机负载均衡(块设备间的对象移动以达到平衡)
- 文件系统级的镜像(类RAID-1)、条带(类RAID-0)
- 子卷(一个或多个单独可挂载基于每个物流分区)
- 透明压缩(目前支持zlib、LZO和ZSTD (从 4.14 开始支持))
- 快照(只读和可写,写复制,子卷复制)
- 文件克隆
- 数据和元数据的校验和(目前是CRC-32C)
- 就地转换(带回滚)ext3/4
- 文件系统种子
- 用户定义的事务
- 块丢弃支持
分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
fdisk /dev/sdb
>Command (m for help): n
>Command action #这里可以选择是作为扩展分区还是主分区。这里作为主分区,则选择p
e extended
p primary partition (1-4)
p
>Partition number (1-4): 1 #做第一块主分区
>First cylinder (1-130, default 1):
Using default value 1
>Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +500M #分区大小为K,M,G。制作分区的大小,这里选择第一块分区大小为500M
>Command (m for help): p #输入p可以查看刚才分区的情况
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x06194404
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 522081 83 Linux
>Command (m for help): w # 最好输入w 保存我们刚才从sdb分区出来的sdb1
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
格式化
使用mkfs.btrfs
命令格式化分区:
1
mkfs.btrfs /dev/sdb1
挂载
获取UUID:
1
lsblk -f
修改/etc/fstab:
1
UUID=f4f459e9-48df-445e-94f1-96c98a68e78e /mnt/btrfs btrfs defaults,noauto,nofail,noatime,compress-force=zstd:1 0 0
- noatime已经包含了nodiratime,不用同时指定
- zstd:1表示使用level1的zstd压缩算法,较为快速,不同level压缩率差距很小,详见BTRFS ZSTD level compression benchmark
使用mount
命令挂载:
1
mount /mnt/btrfs
compress-force与compress
- 使用compress-force可以带来更高的压缩比,但会影响性能
- compress的采样算法在4.15有优化,但没有实质变化
- 经过实测,19092520KB的原始数据在两种策略下的压缩率实际表现如下:
raw | compress | compress-force |
---|---|---|
19092520 | 11827572 | 11532752 |
压缩算法
Btrfs文件系统目前支持ZLIB
、LZO
、ZSTD
(从 4.14 开始支持)算法,ZSTD是目前btrfs最好的压缩策略
固态硬盘
在挂载参数中添加 ssd
即可启用固态硬盘优化
参考
本文由作者按照 CC BY 4.0 进行授权