Files
rikako-note/linux/btrfs.md
2024-09-10 00:29:11 +08:00

3.7 KiB
Raw Blame History

btrfs

btrfs是一个现代的COW(copy on write)文件系统,该文件系统旨在实现高级功能的同时还注重容错、修复和易于管理。

文件系统特性

在单个设备上的文件系统

想要在分区/dev/partition上创建文件系统,可以通过如下命令:

# mkfs.btrfs -L mylabel /dev/partition

btrfs元数据的默认节点大小为16KB而数据默认的扇区大小等于page size并自动检测。如果想要自定义元数据的nodesize可以通过-n属性来指定(必须是扇区大小的整数倍):

# mkfs.btrfs -L mylabel -n 32k /dev/partition

在多个设备上创建文件系统

可以在多个磁盘设备上创建btrfs文件系统并且在创建文件系统后可以向文件系统中添加更多磁盘。

默认情况下metadata将会被镜像到两个设备上而data则是会被分散到所有的设备上。其等价于mkfs.btrfs -m raid1 -d raid0

默认情况下metadata将会使用raid1存在两个copy而data则是使用raid0只存在一个copysingle

如果只存在一个磁盘设备那么metadata将会在一个设备上被重复存储mkfs.btrfs -m dup -d single。但如果存在多个磁盘设备那么不应该对metadata使用dup而是指定raid1mkfs.btrfs -m raid1 -d single.

新增和删除设备

btrfs支持在创建文件系统后实时的新增和移除设备并且支持在raid level之间进行切换。

btrfs支持raid0, raid1, raid5, raid10, raid6。当btrfs针对block进行读取时会校验checksum。如果checksum校验失败会尝试从备份copy处进行读取如果备份copy读取成功则会修复前面损坏的block。

raid1 profile允许234个copies分别叫做RAID1, RAIDC3 RAIDC4。

对于RAID5和RAID6raid5需要的最小设备数量为3个而raid6需要的最小设备数量为4个。

文件系统创建

mkfs.btrfs可以用于创建btrfs文件系统通过-d来指定data的raid模式通过-m来指定metadata的raid模式。

指定raid时有效的值如下

  • raid0
  • raid1
  • raid10
  • raid5
  • raid6
  • single
  • dup

raid 10 至少需要4块设备

# Create a filesystem across four drives (metadata mirrored, linear data allocation)
mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Stripe the data without mirroring, metadata are mirrored
mkfs.btrfs -d raid0 /dev/sdb /dev/sdc

# Use raid10 for both data and metadata
mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Don't duplicate metadata on a single drive (default on single SSDs)
mkfs.btrfs -m single /dev/sdb

如果想要使用不同大小的device那么striped raid级别raid0,raid10,raid5,raid6可能不会使用所有的磁盘空间而non-striped的等效替代则是会更有效的使用空间single替换raid0 raid1替换raid10

# Use full capacity of multiple drives with different sizes (metadata mirrored, data not mirrored and not striped)
mkfs.btrfs -d single /dev/sdb /dev/sdc

一旦创建文件系统后,可以对文件系统中的任何设备执行挂载操作:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sde
mount /dev/sde /mnt

当重启或重新导入了btrfs模块后需要通过btrfs device scan来扫描文件系统中所有的设备。

device scan

btrfs device scan用于扫描/dev下所有的块设备并用于探测btrfs volume。在导入btrfs模块后如果文件系统中存在多个磁盘设备需要执行btrfs device scan命令。

# Scan all devices
btrfs device scan

# Scan a single device
btrfs device scan /dev/sdb