ホストおよびKVMゲストにマウントされているパーティションのファイルを変更して、発生した破損を理解します。

ホストおよびKVMゲストにマウントされているパーティションのファイルを変更して、発生した破損を理解します。

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はバックアップではありません。

おすすめ記事