From 800763897e8d14c9c91e9eb10b4d173b348b1449 Mon Sep 17 00:00:00 2001 From: asahi Date: Tue, 10 Sep 2024 12:52:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBbtrfs=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linux/btrfs.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/linux/btrfs.md b/linux/btrfs.md index 4f70845..269767b 100644 --- a/linux/btrfs.md +++ b/linux/btrfs.md @@ -82,4 +82,80 @@ btrfs device scan btrfs device scan /dev/sdb ``` +### 添加新设备 +`btrfs filesystem show`命令将会展示系统中所有的btrfs文件系统和文件系统所包含的磁盘设备。 + +`btrfs device add`用于添加新的磁盘设备到已经挂载的文件系统中。 + +`btrfs balance`可以在已经存在的设备间重新分配负载(restrip) + +对于一个已经挂载在`/mnt`的文件系统,调用如下命令可以将`/dev/sdc`设备添加到该文件系统中: +```shell +btrfs device add /dev/sdc /mnt +``` +在已经将磁盘设备添加到文件系统后,所有的metadata和data仍然存储在原来的磁盘中,从而可以通过`restrip`来将数据重新负载到各个设备上: +```shell +btrfs balance start /mnt +``` +`btrfs balance`命令会读取原来所有的metadata和data,并且将其重写到所有可获取的设备中。 + +### 非raid文件系统转化为raid文件系统 +可以通过向文件系统中新增设备,并运行balance filter来将非raid文件系统转化为raid文件系统,其会改变chunk allocate profile。 + +例如,可以通过如下方式将一个已经存在的single device转化为RAID1: +```bash +mount /dev/sdb1 /mnt +btrfs device add /dev/sdc1 /mnt +btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt +``` + +### 移除设备 +`btrfs device delete`用于实时丛文件系统中移除设备,其会将待移除设备上所有的内容重新分配到文件系统中的其他设备上。 + +移除设备示例如下: +```bash +mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde +mount /dev/sdb /mnt +# Put some data on the filesystem here +btrfs device delete /dev/sdc /mnt +``` + + +`btrfs device delete missing`会删除`出现在文件系统元数据描述中但是当前没有被挂载的设备`。 + + +### 替换失败的设备 +当文件系统中的设备正在发生故障或是已经发生故障时,应该使用`btrfs replace`而不是添加新设备后移除故障设备。 + +示例如下所示: +```bash +user@host:~$ sudo btrfs filesystem show +Label: none uuid: 67b4821f-16e0-436d-b521-e4ab2c7d3ab7 + Total devices 6 FS bytes used 5.47TiB + devid 1 size 1.81TiB used 1.71TiB path /dev/sda3 + devid 3 size 1.81TiB used 1.71TiB path /dev/sdb3 + devid 4 size 1.82TiB used 1.72TiB path /dev/sdc1 + devid 6 size 1.82TiB used 1.72TiB path /dev/sdd1 + devid 8 size 2.73TiB used 2.62TiB path /dev/sde1 + *** Some devices missing +``` + +挂载文件系统: +```bash +sudo mount -o degraded /dev/sda3 /mnt +``` +将缺失的设备替换为新设备: +```bash +sudo btrfs replace start 7 /dev/sdf1 /mnt +``` +替换操作将会在后台进行,可以通过`btrfs replace status`来查看任务执行状态。 +```bash + user@host:~$ sudo btrfs replace status /mnt + Started on 27.Mar 22:34:20, finished on 28.Mar 06:36:15, 0 write errs, 0 uncorr. read errs +``` +- 当用一个更小的设备来替换已经存在的设备时,需要先调用`btrfs fi resize` +- 而如果使用一个更大的设备来替换已经存在的设备,可以在替换之后调用`btrfs fi resize` + + +