暗无天日

=============>DarkSun的个人博客

btrfs文件系统管理

记录btrfs文件系统的常用操作

格式化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)

挂载btrfs文件系统

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文件系统的大小

我们还可以修改创建好的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/subvolumnesubvolid=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'

RAID

执行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文件系统

可以通过以下命令检查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