web-dev-qa-db-ja.com

「zpoolreplace」がハングしてプールをロックします

私の4つのディスクRAIDZ1を考えると、1つのディスクは物理的にノイズが多く、まだエラーは発生していませんが、正常に聞こえません。だから私は先制的にそれを置き換えることを選択しました。

私はやった:

zpool offline tank0 ad6

ディスクをシャットダウン、取り外し、交換します

zpool replace tank0 ad6 ad6

永遠にぶら下がっています。

zpool statusも、zpool historyと同様に、永久にハングします。

ディスクを取り外した状態でマシンを再起動すると、期待どおりに劣化モードですべてが正常に動作します。

私は今何をしますか?私のデータは現在、単一のディスク障害に対して脆弱であるため、心配しています。

OSはFreeBSD7.3-RELEASE-p1-a.k.a。FreeNAS 7.0.2.5226

FreeBSD 7.3-RELEASE-p7(FreeNAS 0.7.2.8191、少し後のバージョン)-は完全に機能しますが、VMで同じ操作を試しました。 FreeNASの最も古いバージョン(7.0.2.5799)で試してみると、後で更新されます。

また、zpool replaceはファイルシステムを使用する必要がありませんか? NAS上の別のデーモンがファイルシステムを使用している可能性があります。 I 仮定これは問題ありませんが、もちろん間違っている可能性があります。


更新、2012-01-10

私はFreeNAS8でマシンを起動し、zpool replaceを実行しました。これは開始され、すぐにデータ破損エラーとカーネルパニックの山を投げ始めました。プールを毎週スクラブしても問題は見つかりませんでした。間違ったディスクを交換するように言うような愚かなことは何もしなかったと思います。データが問題ないことがわかったので、すぐにshutdown -hを発行しました。

とにかく、私は今、劣化したプールを持っており、交換が一時停止された状態で立ち往生しています。データを3TBの外付けドライブにコピーし、多額の費用をかけて購入したので、プールを破棄してやり直すことができます。ありがたいことに、データは問題ないように見えます-たまたま約100GBのファイルのmd5sumがありますが、これまでのところ無傷のようですが、本当にかけがえのないものをすべて回復することができました。

FreeNAS 8がkmem_maxの小さすぎるエラーでパニックを起こし続けているので、私は今、さらにRAMが到着するのを待っています。これは、調整できないようで、マシンはRAMでした。制約付き(4TBRAIDZ1の場合は1GB RAM)。

バックアップについて学んだ難しい教訓だけでなく、ZFS/FreeNAS/FreeBSDへの信頼も本当にノックされました。


更新13/1/12

さて、私のデータは安全にバックアップされているようです。

フェイルモードを続行するように設定しても、zpool status-vがハングします。これは、新しいディスクが接続された状態でのzpoolステータスの出力です(ada1)

  pool: tank0
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the entire pool 
        from backup.
   see: http://www.Sun.com/msg/ZFS-8000-8A
 scrub: none requested
config:

NAME                       STATE     READ WRITE CKSUM
tank0                      DEGRADED     0     0     0
  raidz1                   DEGRADED     0     0     0
    ada2                   ONLINE       0     0     0
    ada3                   ONLINE       0     0     0
    ada0                   ONLINE       0     0     0
    replacing              DEGRADED     0     0 3.17K
      6540253751212815210  UNAVAIL      0     0     0  was /dev/ada3/old
      ada1                 ONLINE       0     0     0

errors: 3130 data errors, use '-v' for a list

新しいディスクの代わりに古いディスクが接続されていると、ZFSはプールをインポートせず、zfs statusは次のように述べています。

tank0          UNAVAIL insufficient replicas
  raidz1       FAULTED corrupted data
    ada2       ONLINE
    ada3       ONLINE
    ada0       FAULTED corrupted data
    replacing  UNAVAIL insufficient replicas
      ada1     FAULTED corrupted data
      ada1     FAULTED corrupted data

新しいディスク(ada1)を接続した状態でada0を障害が発生するのに、古いディスクを接続した状態でオンラインにする必要がある理由がわかりません。 ada0がどのように関連しているのかわかりません。

学習演習としてこのプールを回復してみましょう。

7
tomfanning

これで本当にコーナーに戻った。プールをフラット化し、バックアップからFreeNAS8にファイルを復元することになりました。

これまでのところはるかに安定していると感じています-新しいx64OS、4GB RAMおそらくすべてが貢献しています。

1
tomfanning

最近、同じように聞こえる状況が発生しました。ハングは発生していませんが、故障したドライブを交換できませんでした。もちろん、私はまったく異なる環境にいました。LinuxとZFS-Fuseです。しかし、あなたとは異なり、私はデータの破損を経験したとは言われていませんでした。

 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.Sun.com/msg/ZFS-8000-2Q
[...]
disk/by-id/ata-Hitachi_HDS722020ALA330_JK1105B8GNNADX-part4  UNAVAIL      0     0     0  cannot open

さて、先に進む前に、このプールのデータはどれもかけがえのないものではなく、すべてがバックアップされたか、他のシステムのバックアップであったことを理解することが重要です。このデータの適切なバックアップがない場合は、この時点で停止し、他の作業を行う前にディスクのrawコピーを作成することをお勧めします。これにより、状況が悪化します。

私がやったことはこれでした。

まず、「zfsexportPOOLNAME」を使用してプールをエクスポートしました。次に、再起動して「zfsimportPOOLNAME」を実行しました。

「zpoolstatus」を実行すると、次のようになります。

state: DEGRADED
[...]
12640132412556728613                                         UNAVAIL      0     0     0  was /dev/disk/by-id/ata-Hitachi_HDS722020ALA330_JK1105B8GNNADX-part4

これで、上記の番号を使用して、次を使用してディスクを交換することができました。

zpool replace POOLNAME 12640132412556728613 /dev/DEVILCENAME

これで、「zpoolstatus」のドライブを交換するものとして表示されました。

 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h0m, 0.00% done, 282h43m to go

上記の推定282時間ではなく、実行に「たった」約48時間かかりました。 :-)

0

私はZFSの第一人者ではありませんが、ショットを撮ります。ZFSサブシステムがまだ障害のあるドライブにアクセスしようとしていて、何らかの理由でハングしているようです。プールのfailmode値をcontinuezpool set failmode=continue)そして、それがハングを解消し、何が起こっているのかを推測できるかどうかを確認します。

(これは修正ではないことに注意してください。システムは、アクセスできるはずのドライブにまだアクセスできません。応答が受信されるまでブロックするのではなく、エラーを返し、続行するように指示しているだけです。)

0
voretaq7