差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
blog:2017:2017-11-09 [2017-11-09 18:11] Decomo 作成 |
blog:2017:2017-11-09 [2019-11-26 00:23] (現在) Decomo |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== ZFSで使ったことがあるHDD/ | + | ====== ZFSのメンバだったディスクを再利用する時はzpool labelclearすべき ====== |
| - | 一度ZFSで使ったことがあるストレージを別のzpoolに使い回す際は、zpool labelclearコマンドで当該デバイスからZFSラベル情報を消した方が良さそうだ。 | + | 一度でもZFSで使ったことがあるストレージを別のzpoolに使い回す際は、zpool labelclearコマンドで当該デバイスからZFSラベル情報を消した方が良さそうだ。 |
| 再利用デバイスで新しいプールを作ろうとすると、殆どの場合は以下のようなエラーが出て作ることができない。 | 再利用デバイスで新しいプールを作ろうとすると、殆どの場合は以下のようなエラーが出て作ることができない。 | ||
| 行 12: | 行 12: | ||
| 「有効なプールzrootの一部かもよ」とZFS先生は仰ってるものの、zrootは間違いなくdestroy済みで、僕は確信を以てda0p3でztankを作りたいのだよ。先生ったらお節介~。destroyしたんだからラベル情報も一緒に消しとけよ!と思わなくもないが、ZFSではdestroyの取り消しをサポートしてたりする関係で、こういう仕様なのだろう。削除済みプールの復元については、zpool importの-Dオプションを調べておくんなまし。 | 「有効なプールzrootの一部かもよ」とZFS先生は仰ってるものの、zrootは間違いなくdestroy済みで、僕は確信を以てda0p3でztankを作りたいのだよ。先生ったらお節介~。destroyしたんだからラベル情報も一緒に消しとけよ!と思わなくもないが、ZFSではdestroyの取り消しをサポートしてたりする関係で、こういう仕様なのだろう。削除済みプールの復元については、zpool importの-Dオプションを調べておくんなまし。 | ||
| - | ところがだ、条件は不明だが、このお節介が働かず以前のラベル情報を残したまま新プールが作れちゃうことがある。こうなるとマジで大惨事。新しいプールと昔のプールが管理情報の上では存在する事になり、見るからにヤバげな状態となる。その時の再現ログが↓これ。 | + | ところがである、条件は不明だが、このお節介が働かず以前のラベル情報を残したまま新プールが作れちゃうことがある。こうなるとマジで大惨事。新しいプールと昔のプールが管理情報の上では存在する事になり、見るからにヤバげな状態となる。その時の再現ログが↓これ。 |
| < | < | ||
| 行 39: | 行 39: | ||
| </ | </ | ||
| - | 既にnewtankとして実際にデータが書き込まれ、意味消失してるハズの削除済みプールoldtankが認識されていたのである。 | + | ログ上からは、別々のストレージで構成される2つのプール、newtankとoldtankがあるようにしか見えない。しかし実際のところ、oldtankはnewtank以前にda0p3で使っていたもので、既にdestroy済みのプールなのである。newtankとして実際にデータが書き込まれ、意味消失してるハズの削除済みプールoldtankが認識されているのだ…! |
| こうなると最早手遅れ。oldtankを再度destroyしようにも「そんなプールは存在しない」と言われるし、ならばとデバイス1234567890123456789をどうにかする方向で頑張ってもどうにもならず…。かと言って、< | こうなると最早手遅れ。oldtankを再度destroyしようにも「そんなプールは存在しない」と言われるし、ならばとデバイス1234567890123456789をどうにかする方向で頑張ってもどうにもならず…。かと言って、< | ||
| というわけで、ZFSプールを作る時は忘れずにlabelclearで以前の情報を消すようにしたい。 | というわけで、ZFSプールを作る時は忘れずにlabelclearで以前の情報を消すようにしたい。 | ||
| + | |||
| + | ---- | ||
| + | **(2017-11-14 追記)** | ||
| + | |||
| + | タイミングよく本症状が発生したのでスクショをうp。 | ||
| + | {{ : | ||
| + | |||
| + | やった事はと言うと... | ||
| + | - 以前のzroot(赤い方)を削除しlabelclear | ||
| + | - 新しいzroot(緑の方)を作成 | ||
| + | - FreeBSD 11.0-RELEASEをインストール | ||
| + | - freebsd-updateで11.1-RELEASEに更新するも、ブート時のTrying to mount root~で失敗して起動しなくなる | ||
| + | * 今にして思えば、この時点で古いプールが認識されて旧zrootの方をマウントしようとしてたのかも…? | ||
| + | - kernel.oldの方から起動してfreebsd-updateで11.0の最新にしようとする | ||
| + | - 見事に失敗して起動しなくなる。起動スプラッシュのシェルでload kernelもload zfsも失敗する状態。 | ||
| + | - インストーラメディアから起動してzpool importしたらこの状態 | ||
| + | |||
| + | 確かにlabelclearしたハズなんだけどなぁ…。変なzpool.cacheでも食ってんのかなぁ…?わからん。 | ||
| + | |||
| + | ---- | ||
| + | **(2017-11-16 追記)** | ||
| + | |||
| + | あ、ありのまま起こったことを(ry。 | ||
| + | |||
| + | 症状が出たHDDの各パーティションを再度labelclearしてddでゼロフィルまでしたにもかかわらず、古い方のzrootが認識されやがったぜ……。最終的に'' | ||
| + | |||
| + | 結論としては、zpoolを作る時は対象デバイスの''/ | ||