
2つのSSDを追加したサーバーがあります。ホストでは、mdadmを使用して2つのRAID 1を作成しました。
RAIDを作成する方法は、まずSSDにパーティションを作成した後、そのパーティションを使用してRAIDを作成した後、ext4でフォーマットしてタグを付けることです。
parted -a optimal /dev/nvme1n1 mkpart primary ext4 0% 100%
parted -a optimal /dev/nvme2n1 mkpart primary ext4 0% 100%
parted -a optimal /dev/nvme1n1 set 1 raid on
parted -a optimal /dev/nvme2n1 set 1 raid on
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/nvme[12]n1p1
mkfs.ext4 /dev/md2
e2label /dev/md2 nvme-250gb
次のコマンドを使用して、このデバイスをホストにマウント/マウント解除し、そのためのfstabエントリを作成することを意図していませんでした。
sudo mount /dev/disk/by-label/nvme-250gb /media/nvme-250gb-raid
sudo umount /media/nvme-250gb-raid
マウントされたパーティションは正常に使用できます。
このパーティションの目的は、KVM内にデータを格納することです。オペレーティングシステムはKVMでは実行されません。
しかし、ホストがオフになっている間でも、バックアップの作成や大容量ファイルのコピーなど、VM管理をホストで実行したいと思います。仮想マシンの実行中にホストマシンにインストールするつもりはありません。
VMの場合、このパーティションを追加のストレージデバイスとして追加しました。 Virtual Machine Managerで「ハードウェアの追加」オプションを使用しました。このハードウェアのXMLファイルは次のとおりです。
<disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" io="native"/>
<source dev="/dev/disk/by-label/nvme-250gb" index="2"/>
<backingStore/>
<target dev="vdb" bus="virtio"/>
<alias name="virtio-disk1"/>
<address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
</disk>
VM内でホストシステムにマウントするのと同じ方法でデバイスをマウント/マウント解除します。
sudo mount /dev/disk/by-label/nvme-250gb /media/nvme-250gb-raid
sudo umount /media/nvme-250gb-raid
KVMの部分を完了するために、この回答で提供された情報を使用しました。KVM仮想マシンに物理ディスクを追加する。
答えは指摘する
注意してくださいいいえゲストが使用する物理ドライブにボリュームをマウントしないと、ファイルシステムが重大に破損します。
これをテストし、この損傷がどのように発生したかを確認したいので、ホストマシンと仮想マシンにインストールして使用し始めましたtouch
。
通常、この方法は機能しますが同期していないことがわかりました。sync
ゲストに対する変更は、公開されていてもホストには表示されず、その逆も同様です。時にはうまくいくようですが、混乱することがあります。
いずれにせよ、ゲストおよび/またはホストから書き込むときにマウントを解除し(ホストにある場合)、発行してください。
sudo fsck.ext4 -f /dev/disk/by-label/nvme-250gb
ホストシステムは以下を生成します。
$ sudo fsck.ext4 -f /dev/disk/by-label/nvme-250gb
2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (59780755, counted=59780756).
Fix<y>? yes
Free inodes count wrong (15253502, counted=15261679).
Fix<y>? yes
nvme-250gb: ***** FILE SYSTEM WAS MODIFIED *****
nvme-250gb: 17/15261696 files (0.0% non-contiguous), 1235564/61016320 blocks
これを修正して仮想マシンからデバイスをマウント解除した後、そこでタスクをfsck
実行すると、ホストはすでに問題を修正しているため、エラーは表示されません。変更をスキップすると、ホストとVMの両方の同じ場所に表示されます。
私が知りたいのは、ここで何が起こったのかわからないということです。仮想マシンがホストによって作成されたデータを上書きするか、その逆も同様ですか、またはfsck
一部のinodeの内容を修正して解決できる問題ですか(これはよくわかりません)。その後、ファイルのみが失われます。
前述したように、ホストと仮想マシンの両方にインストールするつもりはありません。
ただし、ホストや仮想マシンにインストールしてファイルをコピー/作成しても、予期しないことが原因で誤って破損しないという100%の信頼を持って動作できることに注意してください。
RAIDであるため、1つのSSDが破損しても他のブロックはデータを保持し続け、エラーが発生したSSDを交換してアレイを再同期できるとします。もちろん、VMのシャットダウン中にこれを行います。
しかし、これは別の(関連していない)質問を提起します。 RAID 1のコンテキストでSSDが仮想マシンにのみインストールされている場合、ホストはSSDに問題があることがわかりますか?これが問題であれば、仮想マシンにファイルシステムとしてマウントする方が合理的ではないでしょうか?これはパフォーマンスにどのような影響を与えますか?
答え1
物理ボリュームをマウントするすべてのシステムは、そのボリュームに関連するすべてのメタデータを知って制御すると想定しています。両方のシステムが互いに独立してメタデータを変更しても、メモリ内のデータ構造は同期されません。ファイルシステムが破損している可能性があります。一度に1つのシステムにボリュームをマウントするのは安全です。
RAID 1 は、両方のディスクが同期したままであることを意味します。ファイルシステムが破損すると、両方のディスクのイメージが破損します。 RAID 1/5/6 は、ハードウェア障害が発生した場合に冗長性を提供しますが、他の問題を防止しません。特にRAIDはバックアップではありません。
答え2
Doneal24が正しいです。同時に、複数のホスト(または仮想マシン)に同じ(共有不可能)ファイルシステムをマウントすることはできません。両方のシステムに読み取り/書き込みをマウントすると、FS破損が発生します。そのうちの1つを読み取り専用でインストールし、残りのものをすべて読み取り専用でインストールすると、読み取り専用システムは変更を正確に追跡できません。これらの「基本」ファイルシステムは、複数のオペレーティングシステムを同時にインストールするようには設計されていません。
私が知りたいのは、ここで何が起こったのかわからないということです。
ほとんどすべて - 悪いです。有能な講師がブロックやセクションに分かれた黒板の前に座って行き、書いて消していると想像してみてください。一人の講師が黒板を排他的にコントロールすれば、すべてが一貫しています。
今、両方の有能なインストラクターが同じ黒板を使用していますが、互いに通信しないで、相手がブロックを書き込んだり、消去したり、再利用した時期を確実に検出したりすると想像してみてください。混乱があり、理事会は理解できなくなりました。インストラクターAは考慮すべきブロックを示し、Bはブロックを削除または上書きしました。これは横説説です。
仮説として、すべての最新のファイルシステムは、順序付けられたブロックのリストに基づいています。 A講師が12番、17番、11番ブロックの化学講義ノートを順番に(黒板の1ブロックに)書くと想像してみてください。一方、B講師は自身の歴史講義を16、22、11ブロックから読まなければならないと書いた。私たちは、ブロック11が学生(読者)の半分を混乱させると確信しています。
この問題は各オペレーティングシステム(講師)を同期すれば解決が可能だが、費用がかかりアクセスが遅い。