RAID-1 中出现故障的 Btrfs 驱动器可以实时更换吗?

Not*_*ble 15 linux raid hard-drive btrfs

我正在尝试决定一个文件系统,并想知道是否可以在不停机的情况下更换 btrfs RAID 中的故障驱动器。

  1. 假设我使用以下命令创建了一个新的 btrfs 文件系统

    mkfs.btrfs -d raid1 /dev/sdb /dev/sdc
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在假设有一天/dev/sdc失败了。有两种可能性:它可能会逐渐失败,显示 SMART 错误 - 在这种情况下,我可以添加一个新设备,btrfs device add /dev/sde /mnt; btrfs filesystem balance /mnt然后删除旧设备btrfs device delete /dev/sdc /mnt

  3. 但是如果它突然失败,变得不可读......网络搜索说在这种情况下我必须首先卸载文件系统,以降级模式挂载,添加一个新设备,然后删除丢失的设备。

    umount /mnt
    mount -o degraded /dev/sdb /mnt
    btrfs device add /dev/sdf /mnt 
    btrfs device delete missing /mnt
    
    Run Code Online (Sandbox Code Playgroud)

卸载显然是一个破坏性的操作,所以会有停机时间——任何使用文件系统的应用程序都会出现 I/O 错误。但是考虑到 btrfs 正在大力发展,这些关于 btrfs 的“教程”看起来已经过时了。

问题是:考虑到 btrfs 的当前状态,是否可以在线执行此操作,即无需卸载?

如果没有,是否有可以满足这种需求的纯软件解决方案?

Bri*_*ian 11

在 Linux 3.8 中,btrfs replace mountpoint old_disk new_disk添加了。如果您运行的是最新内核,它将提供您正在寻找的功能。

  • 这现在是 `btrfs 替换 start /dev/old /dev/new /mountpoint`(**start** 已添加)。另见`man btrfs-replace`。 (5认同)