web-dev-qa-db-ja.com

ZFS Pool out of whack

私は、古典的なmdadm raidからzfsプールに切り替える過程にあり、回復しようとしているいくつかのつまずきを起こしました。

当初、私はRAID 1ミラーに2つの4TBドライブがありました。

次に、マシンに2つの新しい4TBドライブを挿入し、元のドライブを切断しました。ミラー内の新しいドライブを使用してzpoolを作成しましたが、/dev/sda、および/dev/sdbを使用しました。これは、使用しているガイドが指示したことであり、考えていなかったためです。

したがって、もちろん、古いドライブを再接続してデータをコピーするとき、/dev/sdbおよび/dev/sdcを使用して、2つのzfsドライブの1つを作成しました/dev/sddもちろんzfsプールを台無しにしてUNAVAILとして表示しました

オンラインで誰かと作業した後、私はzpool export poolzpool import -d /dev/disk/by-uuid poolによってzfsプールをUUIDモードにすることができました。

これにより、UNAVAILドライブを切り離すことができ、それをきれいに拭いて、/dev/disk/by-idを使用する最初のミラーとしてzfsに追加し直しました。数日後、正常に再同期しました。

現在、識別子として長整数を持つ1つのデバイスと、ata-WDC_WD...の行に沿った文字列を持つ別のデバイスを持つzpoolがあります。それらをすべて同じページで取得したかったため、整数識別子を持つ最初のディスクを切り離し、/dev/disk/by-idを使用して再度追加することを計画していました。ただし、デタッチしようとすると、エラーが発生します:cannot detach 13419994393693470939: only applicable to mirror and replacing vdevs

わかりました、それで私はそれを別のドライブと取り替えようとし、このエラーを得ました:cannot open '13419994393693470939': name must begin with a letter

プールが機能している間は、すべてが一貫した状態にあることを望みます。 I could古い2つのドライブを使用して新しいプールを作成し、データをコピーしてから、古いプールを破棄し、それらのドライブを新しいプールに追加します(これにより、プールの名前を変更して、その間にサービスが中断する場合があります)、しかし、これを回避する方法があると思います。

2
sharf

最初にディスクを再識別するために使用したプロセスを再実行するだけです。

  1. zpool export pool
  2. zpool import -d /dev/disk/by-id pool

これにより、ドライブがby-id形式に統合されます。その形式にする場合は、代わりにby-uuidを使用できます。

表示される2つのエラーは次のとおりです。

  • cannot detach:ZFSはデータの有効なレプリカが他にないと考えているため、この切り離しは拒否されています。ミラー内のプールを正しく構成しましたか? CLIがエラーを誤って解釈し、無意味なエラーメッセージを表示している可能性もあります。たぶん、間違ってドライブの間違った名前でコマンドを実行しているだけかもしれません(次のポイントを参照)。
  • cannot open:提供した情報からはわかりませんが、UUIDだけでなくこのデバイスへのフルパスを提供する必要があると思われます。
2
Dan