私のホストコンピュータには2つのブロックデバイスがあり、それを仮想マシンゲストに渡したいと思います。 1つは完全に動作し、もう1つはそうではありません。唯一の違いは、1つは内部ドライブの論理ボリュームで、もう1つは外部Thunderboltドライブに構築されたソフトウェアRAIDにあることです。ホストとゲストが必要な場所にパーティションテーブルがあるかどうかを確認する作業をよりよく行う必要があるかどうか疑問に思います。
ゲストとホストの両方が最新のArch Linuxを実行しています。ホストの最初のデバイスは、/dev/nvme0n1p3
Intel NUC13マザーボードに直接接続されているLVMボリュームグループの論理ボリュームにあります。
# fdisk -l /dev/HomeServerNUC13VM/HomeServerNUC13Storage
Disk /dev/HomeServerNUC13VM/HomeServerNUC13Storage: 16 GiB, 17179869184 bytes, 33554432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CAEF53EA-821B-4A57-9FFB-E62CE5174E16
Device Start End Sectors Size Type
/dev/HomeServerNUC13VM/HomeServerNUC13Storage1 2048 2099199 2097152 1G EFI System
/dev/HomeServerNUC13VM/HomeServerNUC13Storage2 2099200 33552383 31453184 15G Linux filesystem
/dev/md127p1
2番目は、ソフトウェアRAID 5アレイを持つ他のLVMボリュームグループの論理ボリュームです/dev/nvme{1,2,3,4}n1p1
。これらの物理ドライブはすべてエンクロージャ内にあり、Thunderboltを介してNUCに接続されています。
# fdisk -l /dev/HomeStorageOWC/HomeServerNUC13Storage
Disk /dev/HomeStorageOWC/HomeServerNUC13Storage: 2 TiB, 2199023255552 bytes, 536870912 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 786432 bytes
Disklabel type: gpt
Disk identifier: DBF9C573-63AF-417B-ADE6-F6560D0702D9
Device Start End Sectors Size Type
/dev/HomeStorageOWC/HomeServerNUC13Storage1 256 536870655 536870400 2T Linux filesystem
ホストシステムの2つのブロックデバイス上のパーティションにアクセスし、kpartx -a
問題なくマウントできます。デバイスを仮想マシンゲストに転送する際に問題が発生する
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
<source dev='/dev/HomeServerNUC13VM/HomeServerNUC13Storage'/>
<target dev='sda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
<source dev='/dev/HomeStorageOWC/HomeServerNUC13Storage'/>
<target dev='sdb' bus='sata'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
ゲストでは正しく/dev/HomeServerNUC13VM
表示され/dev/sda
動作しますが、/dev/HomeStorageOWC/HomeServerNUC13Storage
ゲストでは/dev/sdb
混乱しているようです。Disklabel type
ありますので参考にしてくださいdos
# fdisk -l /dev/sdb
GPT PMBR size mismatch (536870911 != 4294967295) will be corrected by write.
Disk /dev/sdb: 2 TiB, 2199023255552 bytes, 4294967296 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdb1 1 4294967295 4294967295 2T ee GPT
ゲストがパーティションテーブルとパーティションを再作成すると、ゲストはすべて正常です。
# fdisk -l /dev/sdb
Disk /dev/sdb: 2 TiB, 2199023255552 bytes, 4294967296 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 00B06790-6D3B-4694-B435-6E9E6E9E12CB
Device Start End Sectors Size Type
/dev/sdb1 2048 4294965247 4294963200 2T Linux filesystem
しかし、コンソールに戻ると状況がめちゃくちゃになりました。Disklabel type
はい、またdos
。
# fdisk -l /dev/HomeStorageOWC/HomeServerNUC13Storage
Disk /dev/HomeStorageOWC/HomeServerNUC13Storage: 2 TiB, 2199023255552 bytes, 536870912 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 786432 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/HomeStorageOWC/HomeServerNUC13Storage1 1 4294967295 4294967295 16T ee GPT
Partition 1 does not start on physical sector boundary.
RAID 5を削除して/dev/nvme{1,2,3,4}n1
LVMを直接デプロイしている間/dev/md127
(つまりパーティションなし)、自分で再作成してからLVを256GBに設定しましたが、まだ同じ問題が発生します。
答え1
答えは嘘ですlibvirt ドキュメント、特に次の行で:
blockio logical_block_size='512' physical_block_size='4096'
discard_granularity='4096'
QEMUには次のオプションもあります。
- デバイスscsi-hd、バス= scsi1.0、ドライブ=drive-virtio-disk1、id=virtio-scsi-pci1、物理ブロックサイズ = 4096、論理ブロックサイズ = 512
答え2
/dev/nvme0n1
私が逃したのはコンソールにあったものでした。
Sector size (logical/physical): 512 bytes / 512 bytes
そして/dev/nvme{1,2,3,4}n1
ホストに
Sector size (logical/physical): 4096 bytes / 4096 bytes
ゲストでは、問題のデバイスは次のように表示されます。
Sector size (logical/physical): 512 bytes / 512 bytes
セクタサイズの不一致が原因でパーティションテーブルが混乱しているようです。仮想SATAデバイスのセクタサイズを設定できないようですが、virtioデバイスのblockioパラメータを使用できます。
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
<source dev='/dev/HomeStorageOWC/HomeServerNUC13Web'/>
<target dev='vda' bus='virtio'/>
<blockio logical_block_size='4096' physical_block_size='4096'/>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</disk>