Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.4. 多个设备的集成卷管理

可以在很多设备上创建 btrfs 文件系统,并在文件系统创建后添加更多设备。默认情况下,元数据将跨两个设备进行镜像,数据将在所有存在的设备之间进行条带化,但如果只有一个设备,则元数据将在该设备上重复。

6.4.1. 创建使用多个设备的文件系统

mkfs.btrfs 命令(如 第 6.1 节 “创建 btrfs 文件系统” 所述)接受 -d 用于数据的选项,以及用于元数据的 -m。有效规格包括:
  • raid0
  • raid1
  • raid10
  • dup
  • 单个
m single 选项指示没有重复元数据。使用硬件 raid 时可能需要这样做。
注意
RAID 10 需要至少四个设备才能正确运行。

例 6.1. 创建 RAID 10 btrfs 文件系统

在四个设备(元数据镜像、数据条带化)中创建文件系统。
# mkfs.btrfs /dev/device1 /dev/device2 /dev/device3 /dev/device4
在没有镜像的情况下条带化元数据。
# mkfs.btrfs -m raid0 /dev/device1 /dev/device2
raid10 用于数据和元数据。
# mkfs.btrfs -m raid10 -d raid10 /dev/device1 /dev/device2 /dev/device3 /dev/device4
不要在单一驱动器中重复元数据。
# mkfs.btrfs -m single /dev/device
当驱动器大小不同时,使用单个 选项来使用每个驱动器的完整容量。
# mkfs.btrfs -d single /dev/device1 /dev/device2 /dev/device3
要在已创建的多设备文件系统中添加新设备,请使用以下命令:
# btrfs device add /dev/device1 /mount-point
重新引导或重新加载 btrfs 模块后,使用 btrfs 设备扫描 命令来发现所有多设备文件系统。请参阅 第 6.4.2 节 “扫描 btrfs 设备” 了解更多信息。

6.4.2. 扫描 btrfs 设备

使用 btrfs 设备扫描来扫描 /dev 下的所有块设备,并探测 btrfs 卷。如果在文件系统中有多个设备运行时,则必须在载入 btrfs 模块后执行此操作。
要扫描所有设备,请使用以下命令:
# btrfs device scan
要扫描单个设备,请使用以下命令:
# btrfs device scan /dev/device

6.4.3. 在 btrfs 文件系统中添加新设备

使用 btrfs filesystem show 命令列出所有 btrfs 文件系统及其包含的设备。
btrfs device add 命令用于向挂载的文件系统添加新设备。
btrfs filesystem balance 命令在所有现有设备中平衡(条带)分配的扩展。
用于添加新设备的所有这些命令示例如下:

例 6.2. 在 btrfs 文件系统中添加新设备

首先,创建并挂载 btrfs 文件系统。有关如何创建 btrfs 文件系统的详情,请参考 第 6.1 节 “创建 btrfs 文件系统”,以及 第 6.2 节 “挂载 btrfs 文件系统” 以了解有关如何挂载 btrfs 文件系统的更多信息。
# mkfs.btrfs /dev/device1
# mount /dev/device1
接下来,在挂载的 btrfs 文件系统中添加第二个设备。
# btrfs device add /dev/device2 /mount-point
这些设备的元数据和数据仍然仅存储在 /dev/device1 中。现在,它必须平衡才能分散到所有设备上。
# btrfs filesystem balance /mount-point
平衡文件系统将花费一些时间,因为它会读取所有文件系统的数据和元数据,并在新设备中重写。

6.4.4. 转换 btrfs 文件系统

要将非raid 文件系统转换为 raid,请添加设备并运行更改块分配配置文件的均衡过滤器。

例 6.3. 转换 btrfs 文件系统

要将现有的单个设备系统(本例中为 /dev/sdb 1)转换为两个设备,raid1 系统以便防止单个磁盘失败,请使用以下命令:
# mount /dev/sdb1 /mnt
# btrfs device add /dev/sdc1 /mnt
# btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
重要
如果元数据没有从单设备默认转换,它会保留为 DUP。这不能保证块的副本位于单独的设备上。如果没有转换数据,则它根本没有任何冗余副本。

6.4.5. 删除 btrfs 设备

使用 btrfs device delete 命令删除在线设备。它将使用的任何扩展重新分发到文件系统中的其他设备,以便安全地删除。

例 6.4. 删除 btrfs 文件系统上的设备

首先创建并挂载一些 btrfs 文件系统。
# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mount /dev/sdb /mnt
向文件系统添加一些数据。
最后,删除所需的设备。
# btrfs device delete /dev/sdc /mnt

6.4.6. 在 btrfs 文件系统中替换失败的设备

第 6.4.5 节 “删除 btrfs 设备” 可用于删除提供超级块的失败设备仍然可以读取。但是,如果设备丢失或者超级块损坏,则文件系统需要以降级模式挂载:
# mkfs.btrfs -m raid1 /dev/sdb /dev/sdc /dev/sdd /dev/sde


  ssd is destroyed or removed, use -o degraded to force the mount
  to ignore missing devices


# mount -o degraded /dev/sdb /mnt


  'missing' is a special device name


# btrfs device delete missing /mnt
命令 btrfs 设备删除缺少的 设备会删除文件系统元数据所描述的第一个设备,但在挂载文件系统时不存在。
重要
无法低于特定 raid 布局所需的最小设备数量,即使缺少的设备。可能需要添加新设备才能删除失败的设备。
例如,对于带有两个设备的 raid1 布局,如果设备失败,则需要它:
  1. 以 degraded 模式挂载,
  2. 添加新设备,
  3. 和 删除缺少的设备。

6.4.7. 在 /etc/fstab中注册 btrfs 文件系统

如果您没有 initrd 或它没有执行 btrfs 设备扫描,则可以通过将文件系统中所有设备明确传递给 mount 命令来挂载多卷 btrfs 文件系统。

例 6.5. /etc/fstab 条目示例

一个合适的 /etc/fstab 条目示例为:
/dev/sdb    /mnt    btrfs    device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde    0
请注意,使用通用唯一标识符(UUID)也可以正常工作,且比使用设备路径更稳定。