web-dev-qa-db-ja.com

障害のあるディスクでZFSプールが劣化し、エクスポートと交換が機能しない

Ubuntuサーバーデバイスにディスクを追加しようとすると、問題が発生します。完全な初心者である間に、サーバーの電源を切り、さらに2つのディスクを追加し、システムを再起動して、既存のミラー「障害」でディスクの1つを見つけました。


matsojala@amatson:~$ zpool status -v
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0B in 21h20m with 0 errors on Fri Feb  8 14:15:04 2019
config:

        NAME                      STATE     READ WRITE CKSUM
        tank                      DEGRADED     0     0     0
          mirror-0                DEGRADED     0     0     0
            sdb                   ONLINE       0     0     0
            12086301109920570165  FAULTED      0     0     0  was /dev/sdb1

errors: No known data errors

この回答に基づいてエクスポートとインポートを試みましたが( 再起動時にZFSプールが劣化しました )、エクスポートに失敗しました


matsojala@amatson:~$ Sudo zpool export -f tank
umount: /tank: target is busy.
cannot unmount '/tank': umount failed

システム上のディスクは「アクティブなプールの一部」であるため、どの方法でディスクを交換すればよいかわかりません。


matsojala@amatson:~$ Sudo zpool replace -f tank 12086301109920570165 sdc1
invalid vdev specification
the following errors must be manually repaired:
/dev/sdc1 is part of active pool 'tank'

これも試しました。


matsojala@amatson:~$ Sudo zpool replace tank sdb
/dev/sdb is in use and contains a unknown filesystem.

何か助け?ディスクは電源を切る前は完全に機能していました。システムには/ dev/sdc1という名前で、IDは「12086301109920570165」です。私は何をすべきか?

ありがとう。

2
MatsonWatson

/dev/sdaなどの名前を使用してディスクを参照しているようです。再起動や取り外し/取り外しプラグのサイクル後にディスクに別の名前が割り当てられると、ZFSが混乱する可能性があるため、これは一般に良い考えではありません。代わりに、/dev/disk/by-id/.../by-uuid/、または.../by-label/のデバイスファイルを使用してプールを作成する必要があります。

あなたの場合、私は完全には確かではありませんが、再起動後に/dev/sdb1/dev/sdc1に再ラベル付けされたように見えるので、/dev/sdc1zpool statusに表示されていなくてもプールの一部のように見えます。追加した追加のディスクを取り外して、ラベルを元の状態に戻すことができます。次に、exportの後にzpool import -d /dev/disk/by-id tankを実行して、ZFSに強制的にラベルを付け直させます。 by-idディスク名に基づくプール。

ビジー状態のためエクスポートが機能しない場合は、プール上のファイルにアクセスしているプロセスがないことを確認して、再試行してください。私はLinuxユーザーではありませんが、再起動中にこれを行うために使用できるいくつかの構成ファイルもあるようです: Githubのこの投稿 は、USE_DISK_BY_ID='yes'/etc/default/zfsを設定して再起動中に強制することを提案します。最悪の場合、それを設定して再起動することができます-再起動は自動的にエクスポート/インポートを実行します。

とにかく、ディスクの交換を続行したい場合は、 Oracle docs で、「ミラーの1つの障害が発生したディスクを交換する」ユースケースについて説明します。 (cfgadmを使用したディスクの構成解除に関するSolaris固有の指示は無視してください。)見逃した主な手順は、zpool offline tank <faulted disk>を実行する前にzpool replace tank <new disk>を実行したことだと思います。

1
Dan