记录btrfs文件系统的常用操作
sudo mkfs.btrfs /dev/sdc1
通过 -O
选项可以设置btrfs文件系统的fature,这些feature可以通过下面命令看到
mkfs.btrfs -O list-all 2>&1
Filesystem features available:
mixed-bg - mixed data and metadata block groups (0x4, compat=2.6.37, safe=2.6.37)
extref - increased hardlink limit per file to 65536 (0x40, compat=3.7, safe=3.12, default=3.12)
raid56 - raid56 extended format (0x80, compat=3.9)
skinny-metadata - reduced-size metadata extent refs (0x100, compat=3.10, safe=3.18, default=3.18)
no-holes - no explicit hole extents for files (0x200, compat=3.14, safe=4.0)
sudo mount -t btrds -o rw /dev/sdc1 /mnt
btrfs还有许多feature,可以通过 -o
来指定。比较特别的选项有:
- ssd
- btrfs 针对ssd硬盘进行过特殊的优化,尽可能的将写入的数据分散到磁盘的各个位置,防止出现单个位置过多次的写入导致
- compress=lzo
- 启用自动压缩,压缩算法为lzo。其他可选压缩算法有zlib,zstd,或者no
sudo mount -t btrds -o rw,ssd,compress=lzo /dev/sdc1 /mnt/mybtrfs
我们还可以修改创建好的btrfs文件系统的大小.
下面命令将文件系统减少2G
sudo btrfs filesystem resize -2g /mnt
Resize '/mnt' of '-2g'
或者通过下面命令增加文件系统大小
sudo btrfs filesystem resize +2g /mnt
Resize '/mnt' of '+2g'
快照是对文件系统某一时刻的完全备份。建立快照后,对文件系统的修改不会影响快照中的内容
sudo btrfs subvolume snapshot /mnt /mnt/snap1
Create a snapshot of '/mnt' in '/mnt/snap1'
若要创建只读快照,则可以使用 -r
选项
sudo btrfs subvolume snapshot -r /mnt /mnt/snap2
Create a readonly snapshot of '/mnt' in '/mnt/snap2'
我们可以把btrfs文件系统的一部分配置为一个完整的子文件系统,这些子文件系统被称为subvolume(子卷). 这些子卷共享底层的设备空间,在需要磁盘空间时便从底层设备中分配。
sudo btrfs subvolume create /mnt/sub1
Create subvolume '/mnt/sub1'
sudo btrfs subvolume list /mnt
ID 259 gen 12 top level 5 path sub1
通过 subvol=/path/to/subvolumne
或 subvolid=objectid
选项可以指定挂载那个子卷
sudo mount -t btrfs -o subvol=/mnt/sub1 /home/lujun9972/btrfs.img /media
sudo btrfs subvolume delete /mnt/sub1
Delete subvolume (no-commit): '/mnt/sub1'
执行mkfs时可以指定多个设备,并设定RAID级别,比如
mkfs.btrfs -draid1 /dev/sde1 /dev/sdf1
mount -t btrfs /dev/sde1 /mnt/raid
当设备空间快要被用完时,可以通过 btrfs device add
命令为文件系统添加新磁盘设备,从而增加存储空间
df -h /mnt
sudo btrfs device add -f /dev/loop1 /mnt
df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 6.0G 17M 5.1G 1% /mnt
Performing full device TRIM /dev/loop1 (4.00GiB) ...
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 10G 17M 9.1G 1% /mnt
同样的,也可以通过命令删除所添加的设备
df -h /mnt
sudo btrfs device delete /dev/loop1 /mnt
df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 10G 17M 9.1G 1% /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 6.0G 17M 5.1G 1% /mnt
可以通过命令将非Btrfs文件系统转换为Btrfs文件系统
sudo btrfs-convert ~lujun9972/ext4.img
create btrfs filesystem:
blocksize: 4096
nodesize: 16384
features: extref, skinny-metadata (default)
creating ext2 image file
creating btrfs metadata
copy inodes [o] [ 0/ 11]
conversion complete
我们也可以通过命令将文件系统回滚转换前的状态
sudo btrfs-convert -r ~lujun9972/ext4.img
rollback succeeded
可以通过以下命令检查Btrfs文件系统
sudo btrfsck ~lujun9972/btrfs.img
Opening filesystem to check...
Checking filesystem on /home/lujun9972/btrfs.img
UUID: 658b38c7-d9a0-4c36-aeab-e4dc072269d0
found 229376 bytes used, no error found
total csum bytes: 0
total tree bytes: 163840
total fs tree bytes: 65536
total extent tree bytes: 16384
btree space waste bytes: 153939
file data blocks allocated: 65536
referenced 65536