web-dev-qa-db-ja.com

破損したZFSプールについての対処方法

データにZFS RAIDZを使用したUbuntuサーバーの復元 で説明したように、ZFSを使用してNASのテストインスタンスを実行している。

今週、私のディスクの1つが死亡しました。問題になるべきではありません、そうすべきです(RAIDが回復力であるという利点とパフォーマンス)。

次のように、ZFSプールが破損したことを除きます。

andy@ubuntu:~$ Sudo zpool status -v
  pool: tank
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://www.Sun.com/msg/ZFS-8000-5E
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    tank        UNAVAIL      0     0     0  insufficient replicas
      raidz1-0  UNAVAIL      0     0     0  insufficient replicas
        sdb     FAULTED      0     0     0  corrupted data
        sdc     FAULTED      0     0     0  corrupted data
        sdd     UNAVAIL      0     0     0

幸い、これはテストインスタンスであるため、簡単に再起動できます。しかし、このプールに重要なデータが含まれていたらどうでしょうか?データを回復し、NASを正常な状態に戻すための正しい次のステップは何ですか?または、ZFSは、データがトーストされるように、可能なすべての復元アプローチを自動的に試行しますか?

5
andybjackson

プールが実際に破損していないようです。出力からは、複数のデバイスに問題がある可能性があります。複数のディスクが疑わしい状態である可能性があるため、sdbおよびsdcの障害状態であると推測しています。それらの何が問題なのかを把握すると、プールがあなたの間違いを証明するかもしれません。これは、プールの致命的な状態のようには見えません。

1
slashdot

@slashdotの洞察力で武装して、私はほとんど問題を修正しましたが、私が何をしたか本当にわかりません。次のトレイルを調べて、私を啓発してください。

特に、次の仮説のどれが真実であるか、または何が欠けていますか?

  1. zdb -u tankzdb -dcsv tankも有用なことをしませんでした。
  2. 2番目のzpool import -f tankは、ZFSがそれ自体を修正するためのzpool export tankから十分な時間が経過したため、最初のandy@ubuntu:~$ zpool status andy@ubuntu:~$ Sudo zpool status pool: tank state: UNAVAIL status: One or more devices could not be used because the label is missing or invalid. There are insufficient replicas for the pool to continue functioning. action: Destroy and re-create the pool from a backup source. see: http://www.Sun.com/msg/ZFS-8000-5E scan: none requested config: NAME STATE READ WRITE CKSUM tank UNAVAIL 0 0 0 insufficient replicas raidz1-0 UNAVAIL 0 0 0 insufficient replicas sdb FAULTED 0 0 0 corrupted data sdc FAULTED 0 0 0 corrupted data sdd UNAVAIL 0 0 0 andy@ubuntu:~$ Sudo zdb -u tank zdb: can't open 'tank': No such device or address andy@ubuntu:~$ Sudo zpool scrub tank cannot scrub 'tank': pool is currently unavailable andy@ubuntu:~$ Sudo zdb -bcsv tank zdb: can't open 'tank': No such device or address andy@ubuntu:~$ Sudo zpool export tank andy@ubuntu:~$ Sudo zpool import tank cannot import 'tank': pool may be in use from other system use '-f' to import anyway andy@ubuntu:~$ Sudo zpool import -f tank cannot import 'tank': one or more devices is currently unavailable andy@ubuntu:~$ Sudo zpool status no pools available andy@ubuntu:~$ Sudo zpool status -x no pools available andy@ubuntu:~$ Sudo zpool import pool: tank id: 9117894036185671023 state: UNAVAIL status: One or more devices contains corrupted data. action: The pool cannot be imported due to damaged devices or data. see: http://www.Sun.com/msg/ZFS-8000-5E config: tank UNAVAIL insufficient replicas raidz1-0 UNAVAIL insufficient replicas sdb FAULTED corrupted data sdb UNAVAIL sdc ONLINE andy@ubuntu:~$ Sudo zpool import tank cannot import 'tank': pool may be in use from other system use '-f' to import anyway andy@ubuntu:~$ Sudo zpool import -f tank andy@ubuntu:~$ Sudo zpool status 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://www.Sun.com/msg/ZFS-8000-4J scan: scrub repaired 0 in 0h13m with 0 errors on Mon Nov 21 09:22:11 2011 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 10820373921989571629 UNAVAIL 0 0 0 was /dev/sdb1 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors andy@ubuntu:~$ が機能しなかったときに機能しました。
  3. このエピソード全体は、ドライブの1つに障害が発生した後にラベルが変更されることと関係がありました(sdc> sdb&sdd> sdbを引き起こしたのはsdbだと考えてください)。

LOG

__コードスニペット__
3
andybjackson

以前のポスターは問題を浮き彫りにしたと思います。推定原因は、ディスクの指定方法が原因でした。

私の経験は、UbuntuでのZFSです。 freenasでもZFSを使用していますが、bsdの実装を詳しく調べる必要はありません。

確かにUbuntuの場合、デバイスを記述子ではなくIDで指定することを強くお勧めします。つまり、/ dev/sdaではなく物理ディスクを一意に識別する/ dev/disk/by-id/scsi-SATA-long文字列です。

By-idデバイスを使用すると、ディスクが接続されている特定のSATAポートへの依存がなくなります。

ガレス

1
Gareth

ディスクを混在させることはできますか?

ディスクとzpoolを混同したら、「ディスクには破損したデータが含まれています」と言われました。前のシーケンスでディスクを接続した後、動作を開始しました。

たぶんタンクzpoolをインポートした後、正しいシーケンスを認識しました。

1
BBK