4GB のゲスト RAM とスワップを備えた 32 ビット Windows 2k3r3 ゲスト (ターミナル サーバー) があります。
ゲストスワップとユーザーの一時ディレクトリ用に別のディスクイメージを作成しました。
ホスト システムに十分な RAM があり、このイメージを tmpfs に移動してディスク IO を節約したいのですが、ゲストが次のエラー メッセージで起動しません。
qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: ディスクイメージを開けませんでした│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/tmpfs/vh1-tmp.qcow2: 引数が無効です
ホストシステム:
#uname -a Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP 金曜日 5月 31日 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux srv-vh1:/mnt/tmpfs # virsh バージョン ライブラリに対してコンパイル: libvirt 1.0.2 使用ライブラリ: libvirt 1.0.2 API の使用: QEMU 1.0.2 実行中のハイパーバイザー: QEMU 1.3.0 srv-vh1:/mnt/tmpfs # 空き キャッシュされた未使用の共有バッファの合計 メモリ: 24627548 5084724 19542824 0 60640 138792 -/+ バッファ/キャッシュ: 4885292 19742256 スワップ: 8384444 0 8384444 srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs devtmpfs /dev devtmpfs rw、relatime、サイズ=12296608k、nr_inodes=3074152、モード=755 0 0 tmpfs /dev/shm tmpfs rw、相対時間 0 0 tmpfs /run tmpfs rw、nosuid、nodev、relatime、mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs rw、nosuid、nodev、noexec、mode=755 0 0 tmpfs /mnt/tmpfs tmpfs rw、相対時間 0 0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tmpfs /tmp tmpfs rw、相対時間 0 0 tmpfs /var/lock tmpfs rw、nosuid、nodev、relatime、mode=755 0 0 tmpfs /var/run tmpfs rw、nosuid、nodev、relatime、mode=755 0 0 srv-vh1:/mnt/tmpfs # df ファイルシステム 1K ブロック使用済み 使用可能使用率 マウントポイント devtmpfs 12296608 68 12296540 1% /dev tmpfs 12313772 0 12313772 0% /dev/shm tmpfs 12313772 6772 12307000 1% /実行 /dev/md1 454131992 218835836 212227596 51% / tmpfs 12313772 0 12313772 0% /sys/fs/cgroup tmpfs 12313772 192 12313580 1% /mnt/tmpfs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tmpfs 12313772 20 12313752 1% /tmp tmpfs 12313772 6772 12307000 1% /var/ロック tmpfs 12313772 6772 12307000 1% /var/run srv-vh1:/mnt/tmpfs # virsh プール情報 tmpfs 名前: tmpfs 6287028a-9faf-f762-20de-d36d63657be3 の翻訳です。 ステータス: 作業中 永続的: はい 自動起動: はい 容量: 11.74 GiB 価値: 0,00 利用可能: 11,74 GiB srv-vh1:/mnt/tmpfs # ls -la 合計 196 drwxrwxrwt 2 root root 60 秒 9 11:42 . drwxrwxr-x 4 qemu qemu 4096 9月 8 19:39 .. -rw-rw-rw- 1 root root 197120 9月 9 11:42 tserver-tmp.qcow2
何が間違っているのでしょうか?
答え1
どうやら、Direct IO をサポートしていないホスト ファイル システム上のディスク イメージ ファイルに cache=NONE を設定すると、Virt-Manager は現在、「Something something... Invalid Argument」というあまり役に立たないエラー メッセージを表示し、ゲスト VM の起動を拒否します。
Direct IO をサポートしないファイルシステムの一例として、tmpfs が挙げられます。Direct IO をオプションで無効にできる可能性がある別のファイルシステムとしては、GlusterFS があります (Sergei と同じ問題に遭遇してエラーを調査していたときまでは、GlusterFS について聞いたことがありませんでした)。tmpfs の場合、Direct IO をサポートしないのは、現時点では技術的な制限または設計上の矛盾であるように思われ、将来修正されるかどうかはわかりません。
私の場合、CentOS7 で実行されている Win7Pro ゲスト VM に 3.6 GB の Ramdisk を配置し、Virt-Manager でその Ramdisk に cache=NONE を設定していました。tmpfs img が使用した他のオプションは、virtio と raw でした。VM は、「... 無効な引数」という同じ/類似のエラーで起動を拒否しました。
cache=NONE 機能のパッチをコーディングし、Virt-Manager を保守 (?) している Redhat エンジニアおよび開発者 (Daniel Berrange) からの技術的な詳細とメモについては、次のリンクのディスカッションを参照してください。
上記の URL から Daniel の言葉を引用します: " > ディスク イメージ /mnt/vmstore/instances/instance-0000001a/disk を開けませんでした: 引数が無効です
おそらく、ファイルシステムが Direct IO をサポートしていないことを意味します。私の知る限り、tmpfs を除くすべてのファイルシステムがこれをサポートするはずです。"
また、Daniel 氏は次のように続けています。「- そこで、私たちがやりたいことは、ストレージ ボリュームが Direct IO をサポートしているかどうかを確認することです。サポートしている場合は cache=none を使用し、そうでない場合は cache=writethrough にフォールバックします。この場合は Direct I/O は使用されませんが、クラッシュの危険はありません。」
私の場合、tmpfs img ファイルに cache=NONE を設定すると VM が起動せず、説明したようにエラーが表示されることを確認できました。cache が「Default」または明示的に「Write-through」に設定されている場合、VM を正常に起動できました。このファイルシステムは消耗品であり、いずれにしても完全に RAM 内にあるため、「Write-back」を使用する意味はありません。したがって、当然、Write-back を使用しませんでした。
お役に立てれば幸いです!
答え2
スワップする必要がないように、ゲストに RAM を追加すればいいのではないでしょうか?
srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root 60 сен 9 11:42 .
drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен 9 11:42 tserver-tmp.qcow2
フォルダの所有者が qemu:qemu に設定されていることに気づきました。別のユーザーとして qemu を実行している場合は、イメージ ファイルの所有者を root から qemu に変更することをお勧めします。
答え3
それはバグです。tmpfs はサポートしていませんcache=none
。