web-dev-qa-db-ja.com

mdadmメタデータ:スーパーブロックの上書きを防ぐための予防措置を講じる必要がありますか?

状況:

  • Mdadmを使用して新しいRAID1アレイを作成しています。
  • LVMやdm-cryptなどの追加のレイヤーは使用しません。

  • メタデータバージョン1.2がデフォルトになっていることに気づきました。システムの他のすべての部分(grub2など)がサポートしている場合は、これが推奨バージョンであることを理解しています。これは私の場合です。

  • マンページと他のいくつかのソースから、メタデータ1.2は、スーパーブロックがディスクの先頭に格納されていることを意味することを理解しています。最初から4KiBで。
  • 以前に作成したRAID1アレイでは、代わりにディスクの最後にスーパーブロックを格納するメタデータバージョン0.90を使用しました。上書きされないように、ディスクの最後の部分はパーティション化されていません。

新しいRAID1アレイをGPTパーティションテーブルでパーティション分割するつもりです。最初のパーティションはセクター2048から始まります。セクターが512バイトの場合、実際のパーティションはディスクの先頭から1024KiBで始まります。

質問:

  • バージョン1.2のスーパーブロックが上書きされないように予防策を講じる必要がありますか、それとも比較的安全なセクター2048で最初のパーティションを開始していますか?
  • Grubはディスクの先頭に書き込むと思いますが、おそらく最初の512バイトしか必要ありません。他のプログラムは、ディスク上のそれらのバイトの直後に書き込みますか?
  • 最初のセクターの終了直後、セクター2048までの部分は、ディスクの「規制された」部分ですか?他のプログラムは、書き込みを開始する前に、他のデータが存在するかどうかを確認しますか?これについて具体的なことは何も見つかりませんでした。

ddを使用するとスーパーブロックが破壊される可能性があることを理解しています;-)そして、mdadm --zero-superblock。スーパーブロックが格納されているディスクの特定の部分を上書きする可能性があることにすぐには気付かない可能性がある、LVMなどの他のユーティリティやファイルシステムレイヤーについてもっと心配しています。

2
Martijn

レイヤーがすべてです。

ディスク(最下層)があります。そのディスクにパーティションテーブルを置きます。その上に、RAIDを配置します。 RAIDにLUKSを配置します。 LUKSにLVMを追加します。 LVMで、最後にファイルシステム(最上位層)。

Disk -> Partition -> RAID -> LUKS -> LVM -> Filesystem

これらのレイヤーの一部をスキップまたは並べ替えることができます。通常、ディスクで始まり、ファイルシステムで終わります。その間のものはオプションです。

今のところ問題ありません。すべてがうまくいくはずです。

これらの各レイヤーが尊重されている限り、競合は発生しません。これらの各レイヤーにはメタデータがありますが、各レイヤーは、そのメタデータに損傷を与えることなく使用できるもののみを提供します。 sector 0で始まるパーティションを作成することはできません。これは、パーティションテーブル自体と衝突するためです。 mdデバイスに書き込むことによって、mdメタデータを損傷することはできません。ファイルシステムをいっぱいにすることができます。各レイヤーはそれ自体を管理するため、ファイルシステムのメタデータやその下のレイヤーに損傷を与えることはありません。

そのため、何も心配する必要はありません。

あなたがそれらの層を尊重するのをやめない限り。

RAIDとGPTについておっしゃっています。 RAIDをGPTパーティションに配置することも、GPTをRAIDに配置することもできます。それが他のレイヤーの1つのレイヤーである限り、まったく問題はありません。しかし、両方のレイヤーを同時に使用しようとしていたとしましょう。 GPTを使用してディスクをパーティション分割すると同時に、ディスク全体をRAIDのメンバーにします。

実際には機能しません。

GPTには、開始と終了にメタデータがあります。 RAIDには、開始時または終了時にメタデータがあります(mdの場合、メタデータのバージョンによって異なります)。 RAIDメタデータはGPTを完全に上書きする可能性があります(またはその逆)。または、オフセットがわずかに異なるため、実際には機能しているように見えるかもしれませんが、それでも恐ろしい状況です。

それと一緒に別のレイヤーを使用したいとしますが、どこに配置しますか? RAIDに配置すると、作成するパーティションの境界を越える場合があります。代わりにパーティションに配置すると、RAIDレイヤーがバイパスされるため、ミラーリングされません。 RAIDは、データが破損している間、同期していると信じています。

突然、レイヤーが互いに協力して補完する必要があるときに、レイヤーが互いに戦うようになります。

3
frostschutz

これらすべてについて心配する必要はありません。ボリューム内のデータはメタデータと重複しません。そうでなければ、管理するのは非常に難しいでしょう!たとえば、これは各ディスクがどのように見えるか(縮尺どおりではありません)です。

[--------------------- sda ------------------------]
[---][------------------ sda1 ---------------------]
     [---][----------------------------------------]
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ one copy of the data in /dev/md0
     ^^^^ superblock
^^^^ partition table

パーティションテーブルはパーティションに含まれておらず、RAIDメタデータはRAIDボリューム内に含まれていません。 RAIDボリュームにコンテンツを配置すると、そのコンテンツはメタデータによって占有されていない部分を占有します。特別な手配は必要ありません。