由于设备替换操作正在进行,因此无法挂载 btrfs

由于设备替换操作正在进行,因此无法挂载 btrfs

我正在将数据从一个磁盘转移到一个新磁盘。但是,新的 Seagate IronWolf 12Tb 有问题(可能对输出电压太敏感)。尽管如此,更换操作还是停止了,并显示一条消息,我没有花时间注意。

所以我不得不重新启动才能移除 Seagate 磁盘。我对原始磁盘执行 btrfs 检查,结果没有错误,停止服务器,移除 12Tb 磁盘并重新启动...

由于我的 btrfs 设备无法挂载,导致启动失败:

mount: wrong fs type, bad option, bad superblock on /dev/sdd1,
   missing codepage or helper program, or other error

   In some cases useful info is found in syslog - try
   dmesg | tail or so.

因此我执行(正如你应该做的那样):dmesg | tail 并得到:

[ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled
[ 2833.182515] BTRFS info (device sdd1): has skinny extents
[ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and
[ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'?
[ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5
[ 2833.339466] BTRFS: open_ctree failed

好吧,我同意这种情况,但是“btrfs 替换取消”需要一个挂载点。系统拒绝挂载……狗在寻找尾巴。

usage: btrfs replace cancel <mount_point>

我搜索了很多次,但没找到任何可行的解决方案。我搜索了“替换操作正在进行”,并希望找到包含以下源代码的页面:开发-replace.c如果发现以下代码块:

    /*
     * allow 'btrfs dev replace_cancel' if src/tgt device is
     * missing
     */
    if (!dev_replace->srcdev &&
        !btrfs_test_opt(dev_root, DEGRADED)) {
        ret = -EIO;
        pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "srcdev (devid %llu) is missing, need to run 'btrfs dev scan'?\n",
            (unsigned long long)src_devid);
    }
    if (!dev_replace->tgtdev &&
        !btrfs_test_opt(dev_root, DEGRADED)) {
        ret = -EIO;
        pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "tgtdev (devid %llu) is missing, need to run btrfs dev scan?\n",
            (unsigned long long)BTRFS_DEV_REPLACE_DEVID);

}

这不是一个小建议,错误的“官方”原因是 btrfs 卷是退化。希望我当时也在读这个页面:在多个设备上使用 Btrfs我当时正在阅读的地方:

更换故障设备

使用 btrfs replace

当您的设备正在发生故障或 RAID 阵列中发生故障时,您应该使用 btrfs replace 命令,而不是添加新设备并移除发生故障的设备。这是一种较新的技术,在添加和删除设备时对我有用,但在尝试恢复之前查阅 irc 频道的邮件列表可能会有所帮助。

首先列出文件系统中的设备,在此示例中,我们有一个缺失的设备,我们将用相同大小的新驱动器替换它。在以下输出中,我们看到最终的设备编号(缺失)是设备 6:

enter code here

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    2 size 1.81TiB used 1.71TiB path /dev/sdb3
     devid    3 size 1.82TiB used 1.72TiB path /dev/sdc1
     devid    4 size 1.82TiB used 1.72TiB path /dev/sdd1
     devid    5 size 2.73TiB used 2.62TiB path /dev/sde1
     *** Some devices missing

这不是我的真实情况,因为我没有“*** 缺少某些设备”,但情况非常接近。我读到以下内容:

如果该设备存在,那么就更容易确定所需的数字设备 ID。

在更换设备之前,您需要安装阵列,如果有丢失的设备,则需要使用以下命令:

sudo mount -o degraded /dev/sda1 /mnt

这是安装降级的 btrfs 以取消中断的替换操作的方法。

答案1

以下是他的完整解决方案:

[root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/
mount: wrong fs type, bad option, bad superblock on /dev/sdd1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
[root@home disk]# dmesg | tail
[ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled
[ 2833.182515] BTRFS info (device sdd1): has skinny extents
[ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and
[ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'?
[ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5
[ 2833.339466] BTRFS: open_ctree failed
[root@home disk]# btrfs replace cancel
btrfs replace cancel: too few arguments
usage: btrfs replace cancel <mount_point>

    Cancel a running device replace operation.

[root@home disk]# btrfs replace cancel /store/backup_big_btrfs
ERROR: not a btrfs filesystem: /store/backup_big_btrfs
[root@home disk]# mount -o degraded /dev/sdd1 /store/backup_big_btrfs/
[root@home disk]# btrfs replace cancel /store/backup_big_btrfs/
[root@home disk]# umount /store/backup_big_btrfs/
[root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/

当您由于替换操作失败而无法挂载 btrfs 时:

  1. 检查你的 btrfs 卷
  2. 使用选项安装-o 降级
  3. 取消替换操作
  4. 卸载 btrfs 卷
  5. 无需任何选项即可安装

相关内容