2つのzpoolを備えたProxmoxを実行しているホームサーバーがあります。既存のプールをより小さなHDDに新しいものに置き換えたい。しかし、2つの新しいSATA HDDの1つをプラグインすると、zpoolが機能しません。ログには、重要なディスクが欠落していると記載されています。新しいディスクをディスパッチすると、すべて正常に動作します。
newディスクがsda
にマウントされていることがわかりました。ただし、新しいディスクが接続されていない場合、既存のzpoolの古いディスクの1つもsda
にマウントされます。この競合を回避するにはどうすればよいですか? sda
はzpoolの古いディスク用に予約されており、新しいディスクにはsdg
を使用する必要があることをLinuxに伝える必要があります。
私はこの振る舞いが起こる可能性さえあると混乱しています。その結果、LinuxはWindowsのドライブ文字のようにマウントポイントをドライブにバインドしていないようです。マウントポイントを使用するのは間違いだったと思います。zpoolで一意の識別子(UUID?)を使用する必要があります。しかし、どうすればこれを行うことができますか?マウントポイントを使用した既存のzfsプールがあります。
少し調べて試してみたところ、zfsがマウントポイントを使用していることがわかりました。したがって、私の理論は正しかった。マウントポイントは、Windowsのドライブ文字のように静的ではない。代わりに、Linuxは起動時に検出された順序でそれらを割り当てます。ディスクを追加または削除すると、マウントポイントが混在する可能性があります。
簡単な例:
sda -> Drive #1
sdb -> Drive #2
sdc -> Drive #3
次に、新しいドライブ#4を追加します。次のように挿入できます。
sda -> Drive #1
sdb -> Drive #4
sdc -> Drive #2
sde -> Drive #3
マウントポイントに依存している場合、現在問題が発生しています。システムはsdb
のドライブ#2を想定していますが、まったく異なるドライブ#4を取得しています。 Arch wikiによると、これは通常の起動中にも発生する可能性があり、hddを変更せずに。
そうですね、これらのマウントポイントを使用するのは悪い考えのようです。代わりに 永続ブロックデバイスの命名 を使用する必要があります。これはudevを使用して利用できます。最新のLinuxディストリビューションで利用できるはずです。永続的なブロック名は、sda
やsdb
のようなニュートラルな名前を使用しません。代わりに、ドライブに永続的にバインドされるある種の名前を作成します。これらはWindowsのドライブ文字に相当します(そうです、ドライブ文字はパーティションにバインドされており、ブロック名はドライブを識別しますが、どちらも永続的であることに注意してください)。
by-id
とby-uuid
はこの問題を解決するのに最も関連があるようですが、他にもあります。 Archのリンクされたwikiページでより詳細な説明を読むことができます。これは一般的な記事であり、他のディストリビューションにも適用できます。この問題では、uuids
が生成された一意のIDの一種であることを知っておくことが重要です。また、ids
をより読みやすい代替手段として使用できます。これは、メーカー、モデル、シリアル番号などのhdd固有の情報を使用しているためです。
ここで説明 のように、すべてのプールをエクスポートしてから再インポートする必要がありましたが、-d
スイッチを使用しました。 zpoolにデバイスを探す場所を指示します。
zpool export <poolname>
zpool import -d /dev/disk/by-id <poolname>
zpool status
を使用すると、これを確認できます。エクスポート/インポートの前に、デバイスの/dev/sda
のようなマウントポイントが表示されます。これらの手順の後、これはディスクIDに変更されます。
私にとってこれは十分ではありませんでした:ISOイメージのようなもののためにbufferと呼ばれる追加のhddがあります。 SSDを解放するためだけに、重要なデータはありません。つまり、これは古典的なext3ボリュームでした。ここでもまったく同じ問題が発生するため、サーバーの起動が妨げられます。マウントポイントによって新しいディスクの原因が変更され、マウントが失敗しました。
このドライブを取り外すだけでこれを解決しました。とにかく、これは私の考えでした。新しいhddは十分に大きく、ディスクを少なくすることでエネルギーを節約できたからです。そのためには、/etc/pve/storage.cfg
ファイルを使用してproxmoxからストレージを削除する必要があります。私の場合、関連する部分は次のようになります。
dir: buffer
path /buffer
content iso
削除したら、/etc/fstab
を確認する必要があります。このファイルは、根本原因が発生する/buffer
ボリュームをマウントします。
/dev/sdf /buffer ext3 rw 0 0
ご覧のとおり、マウントポイント/dev/sdf
がここにあります。 私のようにディスクを拒否したくない場合は、ここで一意のマウントポイントを使用してください!たとえば、/ dev/disk/by-id。これは、永続的なブロックデバイス名の例です。これらは、デバイスに依存するデータに基づいて生成されます。 by-id
は、たとえばハードウェアのシリアル番号を使用します。したがって、2つの等しいディスクをデバイス化することもできます。背景情報については、最初の段落で詳細をお読みください。
私の場合、この行を削除するだけで、Linuxが私のhddをマウントできなくなります。ボリュームがさらにある場合は、再起動後に問題が発生しないように、ボリュームごとにこれらの手順を繰り返す必要があります。