web-dev-qa-db-ja.com

デバイスの交換操作が進行中であるため、btrfsをマウントできません

ディスクから新しいデータにデータを転送していました。ただし、新しいシーゲイト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 |テールアンドゲット:

[ 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

私は状況に同意しますが、「btrfsreplacecancel」にはマウントポイントが必要です。そして、システムはマウントを拒否します...犬は尻尾を探しています。

usage: btrfs replace cancel <mount_point>

私は多くの検索を行いましたが、実行可能な解決策は見つかりませんでした。 「置換操作が進行中です」を検索しましたが、ソースコードが次のページが見つかったと思います: dev-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を使用 私が読んでいた場所:

故障したデバイスの交換

Btrfsreplaceを使用する

障害が発生しているデバイスまたはRAIDアレイで障害が発生したデバイスがある場合は、新しいデバイスを追加して障害のあるデバイスを削除するのではなく、btrfsreplaceコマンドを使用する必要があります。これは、デバイスの追加と削除が機能しなかったときに機能した新しい手法ですが、回復を試みる前にircチャネルのメーリングリストを参照すると役立つ場合があります。

最初にファイルシステム内のデバイスをリストします。この例では、同じサイズの新しいドライブと交換する1つの不足しているデバイスがあります。次の出力では、最終的なデバイス番号(欠落している)がデバイス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
Taryck B.

だからここで彼の完全な解決策:

[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. オプションなしでマウントします
1
Taryck B.