<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K9i</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K9i"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/K9i"/>
	<updated>2026-04-06T20:02:35Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40594</id>
		<title>QEMU/高度なネットワーキング</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40594"/>
		<updated>2025-07-27T02:16:58Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* ブリッジを手動で作成する */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Emulation]]&lt;br /&gt;
[[Category:Hypervisors]]&lt;br /&gt;
[[en:QEMU/Advanced networking]]&lt;br /&gt;
&lt;br /&gt;
== 高度なブリッジネットワーク構成 ==&lt;br /&gt;
&lt;br /&gt;
=== ブリッジを手動で作成する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[QEMU#qemu-bridge-helper を使用したブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* QEMU が tap アダプターを有効にする際に使用するスクリプトをパーミッション {{ic|root:kvm}} 750 で作成します:&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU が tap アダプターを無効にする際に使用するスクリプトを {{ic|/etc/qemu-ifdown}} にパーミッション {{ic|root:kvm}} 750 で作成します:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=== iptables による物理デバイスと Tap デバイスのネットワーク共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
== VDE2 によるネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VDE とは? ===&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
=== 他の方法 ===&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VDE2 Bridge ==&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU/Advanced_networking|2025-07-26|841852}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40593</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40593"/>
		<updated>2025-07-26T14:37:25Z</updated>

		<summary type="html">&lt;p&gt;K9i: 翻訳ステータスの対象 oid を修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/高度なネットワーキング}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|QEMU/トラブルシューティング}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは [[dd]] や {{man|1|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== セキュアブートを有効にする ====&lt;br /&gt;
&lt;br /&gt;
VM でセキュアブートを有効にするための最初の要件は、マシンタイプとして {{ic|q35}} を使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}} に置き換えることです。&lt;br /&gt;
&lt;br /&gt;
次の要件は、セキュアブートキーがインストールされた OVMF_VARS ファイルを使用することですが、これは上流プロジェクト [https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137] では提供されていません&lt;br /&gt;
&lt;br /&gt;
他のディストリビューションと異なり、Arch は (2024-12-06 現在) {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} ファイル(事前登録済みキー付き)を提供していません: 詳しくは {{Issue|archlinux/packaging/packages/edk2|1}} を参照。&lt;br /&gt;
&lt;br /&gt;
簡単な回避策として [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 このフォーラム投稿] の Fedora 版を使う方法があります:&lt;br /&gt;
&lt;br /&gt;
* [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora の edk2-ovmf] の &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM を [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 ビルド一覧] からダウンロードする (2024-12-06 時点の最新 F42 版の [https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm 直接リンク])&lt;br /&gt;
* アーカイブを展開し、対象ファイルを適切なフォーマットに変換する [https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
これで作成した {{ic|OVMF_VARS_4M.secboot.fd}} のコピーを作成し、セキュアブートを有効化した VM で使用できます。&lt;br /&gt;
&lt;br /&gt;
セキュアブート用のファームウェアイメージに手動でキーを登録する方法については、[[KVM#セキュアブート]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=やや手間はかかりますが、より &amp;quot;上流に沿った&amp;quot; 方法として、通常の OVMF_VARS ファイルに手動でキーを登録する方法が [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 このフォーラム投稿] に記載されています。}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path /tmp/vm-share.sock --socket-group kvm --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== rootfs を直接ブートする ====&lt;br /&gt;
&lt;br /&gt;
rootfs を {{ic|virtiofsd}} 経由で直接ブートすることも可能です。上述の引数に加えて、次のオプションを追加してください:&lt;br /&gt;
&lt;br /&gt;
 -kernel &#039;&#039;/path/to/vmlinux&#039;&#039;&lt;br /&gt;
 -initrd &#039;&#039;/path/to/initramfs&#039;&#039;&lt;br /&gt;
 -append &#039;rootfstype=virtiofs root=myfs rootflags=rw,noatime&#039;&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[QEMU/高度なネットワーキング#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、SLIRP ベースのユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 高度なネットワーキング ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンのネットワーク設定において、より詳細な制御が必要な場合や、前述のセクションでは対応できない特定の要件がある場合は、[[QEMU/高度なネットワーキング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{AUR|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
ゲストのメモリ使用量をホストから見て縮小可能にするには、ゲスト側が不要になったページをホストに通知する必要があります。カーネルには  [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] と呼ばれる API があり、これは組み込みのため QEMU を開始するだけで使えます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
この後、ゲスト内でワークロードを実行すると、ゲストのメモリ使用量が一旦増加し、その後縮小する様子がホスト側から確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
ただし、このパラメータによってページが解放されたときにゲストのメモリ使用量がホストから見て縮小されることは確かですが、ゲストがキャッシュ用途に使っているメモリには自動的に対応できません。ゲストは未使用メモリのほとんどをキャッシュに使う傾向があるため、{{ic|1=free-page-reporting=on}} が無意味になる可能性があることに注意してください。この問題を緩和する方法については次のセクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== Using virtio pmem to bypass the guest&#039;s page cache ====&lt;br /&gt;
&lt;br /&gt;
You might want to rely on the host&#039;s page cache instead of the guest&#039;s in order to allow for more efficient memory usage. Coupled with [[#Enabling KSM|KSM]], this allows you to make your virtual machines quite memory efficient, duplicating only few pages.&lt;br /&gt;
&lt;br /&gt;
One way to achieve this is to use a [https://www.qemu.org/docs/master/system/devices/virtio-pmem.html file-mapped virtio pmem device]. Add this config to your QEMU:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=32G&lt;br /&gt;
 -device virtio-pmem-pci,memdev=mem1,id=nv1&lt;br /&gt;
 -m 64G,maxmem=96G&lt;br /&gt;
&lt;br /&gt;
whereby {{ic|virtio_pmem.img}} is a local file on the host that will serve as our memory backend in side the guest. The {{ic|-m}} part is important here: Set the {{ic|maxmem}} parameter so that it is {{ic|regular memory + memory-backend-file size}}. In this case: {{ic|1=64G + 32G = 96G}}.&lt;br /&gt;
&lt;br /&gt;
Start the guest with those options. Inside the guest, you will find a new device at {{ic|/dev/pmem0}} which we will need to format with a [https://docs.kernel.org/filesystems/dax.html DAX-compatible filesystem] such as ext4 (btrfs is not supported):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/pmem0&lt;br /&gt;
 mount /dev/pmem0 /mnt -o dax=always&lt;br /&gt;
&lt;br /&gt;
Any files you write into {{ic|/mnt}} will then bypass the guest&#039;s page cache.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to have the whole root filesystem DAX-enabled in this way.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
f&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[QEMU/トラブルシューティング#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
==== 時間基準 ====&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、Windows はファームウェアのクロックがローカル時刻で設定されていると仮定しますが、QEMU を使用する場合は通常そうではありません。&lt;br /&gt;
この問題を解決するには、インストール後に [[システム時刻#Windows で UTC を使う|Windows を UTC に設定]] するか、コマンドラインに {{ic|-rtc base=localtime}} を追加して仮想クロックをローカル時刻に設定する方法があります。&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は QEMU で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
[[QEMU/トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [https://web.archive.org/web/20241213081621/http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|841429}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=KVM&amp;diff=40592</id>
		<title>KVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=KVM&amp;diff=40592"/>
		<updated>2025-07-26T14:33:10Z</updated>

		<summary type="html">&lt;p&gt;K9i: 行頭の空白の抜けを修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ハイパーバイザ]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[es:KVM]]&lt;br /&gt;
[[en:KVM]]&lt;br /&gt;
[[ru:KVM]]&lt;br /&gt;
[[zh-hans:KVM]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:Category:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&#039;&#039;&#039;KVM&#039;&#039;&#039;、[[Wikipedia:ja:Kernel-based_Virtual Machine|Kernel-based Virtual Machine]] 、は Linux カーネルに組み込まれた [[Wikipedia:ja:ハイパーバイザ|ハイパーバイザ]] です。その目的は [[Xen]] に似ていますがより簡単に動作させることができます。エミュレーションを使うネイティブの [[QEMU]] とは異なり、KVM はカーネルモジュールを介して CPU 拡張機能 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を用いた QEMU の特別な動作モードです。&lt;br /&gt;
&lt;br /&gt;
KVM を使用することで、修正を加えずに GNU/Linux や Windows などのオペレーティングシステムが動作する仮想マシンを複数動かすことができます (詳しくは [https://www.linux-kvm.org/page/Guest_Support_Status Guest Support Status] を参照してください)。それぞれの仮想マシンには専用の仮想化されたハードウェアが使われます: ネットワークカード、ディスク、グラフィックカードなど。&lt;br /&gt;
&lt;br /&gt;
KVM と [[Xen]], [[VMware]], QEMU の違いについては [https://www.linux-kvm.org/page/FAQ#General_KVM_information KVM FAQ] で説明されています。&lt;br /&gt;
&lt;br /&gt;
この記事では KVM をバックエンドに使うエミュレータに共通の機能は扱いません。そのような情報は各々の該当する記事を参照してください。&lt;br /&gt;
&lt;br /&gt;
== KVM サポートの確認 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアのサポート ===&lt;br /&gt;
&lt;br /&gt;
KVM を使うには仮想マシンのホストのプロセッサが仮想化をサポートしている必要があります (Intel のプロセッサでは VT-x、AMD のプロセッサでは AMD-V という名前が付けられています)。あなたの使っているプロセッサがハードウェア仮想化をサポートしているかは次のコマンドで確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ LC_ALL=C.UTF-8 lscpu | grep Virtualization&lt;br /&gt;
&lt;br /&gt;
次を実行することでも確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ grep -E --color=auto &#039;vmx|svm|0xc0f&#039; /proc/cpuinfo&lt;br /&gt;
&lt;br /&gt;
いずれのコマンドを実行しても何も表示されない場合、あなたのプロセッサはハードウェア仮想化をサポート&#039;&#039;&#039;していない&#039;&#039;&#039;ため、KVM を使用することは&#039;&#039;&#039;できません&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
{{Note|BIOS の方で仮想化サポートを有効にする必要があるときもあります。過去 10 年以内に製造された AMD および Intel のすべての x86_64 プロセッサは仮想化をサポートしています。プロセッサが仮想化をサポートしていないように見える場合、ほぼ確実に BIOS で無効になっているだけです。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルのサポート ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux のカーネルは KVM をサポートするために必要な [[カーネルモジュール]] を提供しています。&lt;br /&gt;
&lt;br /&gt;
* 必要なモジュール ({{ic|kvm}} と、{{ic|kvm_amd}} または {{ic|kvm_intel}} のいずれか) がカーネルに含まれているかどうかは、次のコマンドで確認できます：&lt;br /&gt;
&lt;br /&gt;
 $ zgrep CONFIG_KVM= /proc/config.gz&lt;br /&gt;
&lt;br /&gt;
この設定が {{ic|y}} または {{ic|m}} の場合のみ、モジュールは利用可能です。&lt;br /&gt;
&lt;br /&gt;
* 続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているかを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsmod {{!}} grep kvm|&lt;br /&gt;
kvm_intel             245760  0&lt;br /&gt;
kvmgt                  28672  0&lt;br /&gt;
mdev                   20480  2 kvmgt,vfio_mdev&lt;br /&gt;
vfio                   32768  3 kvmgt,vfio_mdev,vfio_iommu_type1&lt;br /&gt;
kvm                   737280  2 kvmgt,kvm_intel&lt;br /&gt;
irqbypass              16384  1 kvm&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このコマンドが何も出力しない場合、モジュールを手動で読み込む必要があります。詳細は [[カーネルモジュール#手動でモジュールを扱う]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|kvm_intel}} または {{ic|kvm_amd}} の {{ic|modprobe}} に失敗するが、{{ic|kvm}} の読み込みには成功し、かつ {{ic|lscpu}} の出力がハードウェア仮想化のサポートを示している場合は、BIOS の設定を確認してください。特にノートパソコンベンダーは、これらの CPU 拡張機能をデフォルトで無効にしていることがあります。ハードウェアが非対応なのか、BIOS で無効にされているだけなのかを判断するには、{{ic|modprobe}} に失敗した直後の [[dmesg]] の出力を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== Virtio を使った準仮想化 ==&lt;br /&gt;
&lt;br /&gt;
準仮想化は、ゲストがホストマシン上のデバイスを使用するための、高速かつ効率的な通信手段を提供します。KVM は &#039;&#039;&#039;Virtio&#039;&#039;&#039; API をハイパーバイザーとゲスト間のレイヤーとして使うことで準仮想化デバイスを仮想マシンに提供します。&lt;br /&gt;
&lt;br /&gt;
すべての Virtio デバイスは 2 つの構成要素を持ちます: ホストのデバイスとゲストのドライバーです。&lt;br /&gt;
&lt;br /&gt;
=== カーネルの対応状況 ===&lt;br /&gt;
&lt;br /&gt;
VIRTIO モジュールがカーネルに組み込まれているかを確認するには、&#039;&#039;&#039;仮想マシン内で&#039;&#039;&#039; 次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ zgrep VIRTIO /proc/config.gz&lt;br /&gt;
&lt;br /&gt;
続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているか確認します:&lt;br /&gt;
&lt;br /&gt;
 $ lsmod | grep virtio&lt;br /&gt;
&lt;br /&gt;
上記のコマンドが何も出力しない場合は、[[カーネルモジュール#手動でモジュールを扱う|カーネルモジュールを手動で読み込む]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 準仮想化デバイスの一覧 ===&lt;br /&gt;
&lt;br /&gt;
* ネットワークデバイス (virtio-net)&lt;br /&gt;
* ブロックデバイス (virtio-blk)&lt;br /&gt;
* コントローラデバイス (virtio-scsi)&lt;br /&gt;
* シリアルデバイス (virtio-serial)&lt;br /&gt;
* バルーンデバイス (virtio-balloon)&lt;br /&gt;
&lt;br /&gt;
== KVM の使い方 ==&lt;br /&gt;
&lt;br /&gt;
次の記事を参照してください: [[QEMU]]。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
{{Note|一般的な小技やヒントは [[QEMU#ヒントとテクニック]] や [[QEMU/トラブルシューティング]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== ネストされた仮想化 ===&lt;br /&gt;
&lt;br /&gt;
ネストされた仮想化を使うことで、元の仮想マシンやネットワークに修正を加えることなく、既存の仮想マシンを別のハイパーバイザや他のクラウド上で動作させることができるようになります。&lt;br /&gt;
&lt;br /&gt;
ホスト側で、{{ic|kvm_intel}} の nested 機能を有効にしてください:&lt;br /&gt;
&lt;br /&gt;
{{Note|AMD の場合も同様に設定できます。その際は {{ic|intel}} を {{ic|amd}} に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r kvm_intel&lt;br /&gt;
 # modprobe kvm_intel nested=1&lt;br /&gt;
&lt;br /&gt;
永続化させるには ([[カーネルモジュール#モジュールオプションを設定する]]を参照):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm_intel.conf|2=&lt;br /&gt;
options kvm_intel nested=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
機能が有効になっているか確認:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ cat /sys/module/kvm_intel/parameters/nested|2=&lt;br /&gt;
Y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
全ての CPU の機能をゲスト環境に転送するために&amp;quot;ホストパススルー&amp;quot;モードを有効化:&lt;br /&gt;
&lt;br /&gt;
# [[QEMU]] を使用する場合、次のコマンドでゲスト VM を実行してください: {{ic|qemu-system-x86_64 -enable-kvm -cpu host}}。&lt;br /&gt;
# &#039;&#039;virt-manager&#039;&#039; を使用する場合、CPU モデルを {{ic|host-passthrough}} に変更してください。&lt;br /&gt;
# &#039;&#039;virsh&#039;&#039; を使用する場合、{{ic|virsh edit &#039;&#039;vm-name&#039;&#039;}} を使って CPU 行を {{ic|1=&amp;lt;cpu mode=&#039;host-passthrough&#039; check=&#039;partial&#039;/&amp;gt;}} に変更してください。&lt;br /&gt;
&lt;br /&gt;
VM を起動したら {{ic|vmx}} フラグが存在するか確認:&lt;br /&gt;
&lt;br /&gt;
 $ grep -E --color=auto &#039;vmx|svm&#039; /proc/cpuinfo&lt;br /&gt;
&lt;br /&gt;
=== ヒュージページの有効化 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU|qemu-kvm no longer exists. After the above issue is cleared, I suggest merging this section into [[QEMU]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ヒュージページを有効にすることで仮想マシンのパフォーマンスを向上させることができます。&lt;br /&gt;
最新の Arch Linux と KVM ならおそらく必要条件はすべて満たされているはずです。{{ic|/dev/hugepages}} ディレクトリが存在しているかどうかチェックしてください。ディレクトリが存在しなかったら、作成してください。&lt;br /&gt;
このディレクトリを利用するには適切なパーミッションが必要です。デフォルトでは root の UID および GID で 0755 ですが、ここでは kvm グループのメンバーであればヒュージページにアクセスできるようにします。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/fstab}} に以下を追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
hugetlbfs       /dev/hugepages  hugetlbfs       mode=01770,gid=kvm        0 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=gid=kvm}} の代わりに GID 番号を直接指定しても構いませんが、その番号は {{ic|kvm}} グループと一致している必要があります。{{ic|1770}} のモードは、グループ内の誰でもファイルの作成は可能ですが、他のメンバーのファイルの削除やリネームはできないようにします。{{ic|/dev/hugepages}} が正しくマウントされていることを確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# umount /dev/hugepages&lt;br /&gt;
# mount /dev/hugepages&lt;br /&gt;
$ mount {{!}} grep huge|2=&lt;br /&gt;
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それから必要なヒュージページの数を計算します。ヒュージページの大きさを確認するには:&lt;br /&gt;
&lt;br /&gt;
 $ grep Hugepagesize /proc/meminfo&lt;br /&gt;
&lt;br /&gt;
通常は 2048 kB ≙ 2 MB です。仮想マシンを 1024 MB で動作させたい場合、1024 / 2 = 512 となり少し追加して 550 まで丸めることができます。必要とするヒュージページをマシンに設定:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w vm.nr_hugepages=550&lt;br /&gt;
&lt;br /&gt;
十分な空きメモリがあれば以下のように表示されるはずです:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ grep HugePages_Total /proc/meminfo|&lt;br /&gt;
HugesPages_Total:  550&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
数字がさらに小さい場合、アプリケーションを閉じるか少ないメモリで仮想マシンを開始してください (number_of_pages x 2):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -enable-kvm -m 1024 -mem-path /dev/hugepages -hda &amp;lt;disk_image&amp;gt; [...]&lt;br /&gt;
&lt;br /&gt;
そして {{ic|-mem-path}} パラメータを使うことでヒュージページが利用されます。&lt;br /&gt;
&lt;br /&gt;
仮想マシンの実行中に、使われているヒュージページを確認するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ grep HugePages /proc/meminfo |&lt;br /&gt;
HugePages_Total:     550&lt;br /&gt;
HugePages_Free:       48&lt;br /&gt;
HugePages_Rsvd:        6&lt;br /&gt;
HugePages_Surp:        0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
問題がないようでしたらデフォルトでヒュージページを有効にすることができます。以下を {{ic|/etc/sysctl.d/40-hugepage.conf}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/40-hugepage.conf|2=&lt;br /&gt;
vm.nr_hugepages = 550&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
参照:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/mm/hugetlbpage.html Linux カーネルの hugetlbpage サポートの概要]&lt;br /&gt;
* [[debian:Hugepages|Debian Wiki - Hugepages]]&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU#Enabling Secure Boot|This is not KVM-specific and would be a great addition to what is already described there.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KVM において Secure Boot を有効にするには、いくつかの要件を満たす必要があります：&lt;br /&gt;
&lt;br /&gt;
# セキュアブートをサポートする UEFI を使用する必要があります。&lt;br /&gt;
# その UEFI にキーが登録されている必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|Arch Linux は、Fedora のようなディストリビューションとは異なり、現時点でセキュアブートキーを提供していません。Arch Linux をセキュアブートで起動したい場合は、自分で署名キーを作成し、以下の手順に従った上でカーネルに署名する必要があります。詳しくは [[Unified_Extensible_Firmware_Interface/セキュアブート]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブート対応の UEFI を有効にするには、{{Pkg|edk2-ovmf}} をインストールし、仮想マシンにセキュアブート対応の UEFI を使用させます。[[libvirt]] を使用している場合、仮想マシンの XML 設定に以下を追加します：&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;lt;os firmware=&amp;quot;efi&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;loader readonly=&amp;quot;yes&amp;quot; secure=&amp;quot;yes&amp;quot; type=&amp;quot;pflash&amp;quot;&amp;gt;/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd&amp;lt;/loader&amp;gt;&lt;br /&gt;
&amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、いくつかのキーを登録する必要があります。この例では、Microsoft および Red Hat のセキュアブートキーを登録します。{{Pkg|virt-firmware}} をインストールし、以下のコマンドを実行します。{{ic|&#039;&#039;vm_name&#039;&#039;}} は対象の仮想マシンの名前に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 $ virt-fw-vars --input /usr/share/edk2/x64/OVMF_VARS.4m.fd --output /var/lib/libvirt/qemu/nvram/&#039;&#039;vm_name&#039;&#039;_SECURE_VARS.fd --secure-boot --enroll-redhat&lt;br /&gt;
&lt;br /&gt;
その後、仮想マシンの libvirt XML 設定を編集し、新しく作成された VARS ファイルを指定します。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;lt;os firmware=&amp;quot;efi&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;loader readonly=&amp;quot;yes&amp;quot; secure=&amp;quot;yes&amp;quot; type=&amp;quot;pflash&amp;quot;&amp;gt;/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd&amp;lt;/loader&amp;gt;&lt;br /&gt;
  &amp;lt;nvram template=&amp;quot;/usr/share/edk2/x64/OVMF_VARS.4m.fd&amp;quot;&amp;gt;/var/lib/libvirt/qemu/nvram/&#039;&#039;&#039;{vm-name}&#039;&#039;&#039;_SECURE_VARS.fd&amp;lt;/nvram&amp;gt;&lt;br /&gt;
&amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これでセキュアブートが自動的に有効になるはずです。UEFI ブートロゴが表示されたときに {{ic|F2}} を押して仮想マシンの BIOS に入り、セキュアブートが有効になっているか確認できます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM Howto]&lt;br /&gt;
* [http://www.linux-kvm.org/page/FAQ#General_KVM_information KVM FAQ]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|832342}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=KVM&amp;diff=40591</id>
		<title>KVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=KVM&amp;diff=40591"/>
		<updated>2025-07-26T14:20:47Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/832342 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ハイパーバイザ]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[es:KVM]]&lt;br /&gt;
[[en:KVM]]&lt;br /&gt;
[[ru:KVM]]&lt;br /&gt;
[[zh-hans:KVM]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:Category:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&#039;&#039;&#039;KVM&#039;&#039;&#039;、[[Wikipedia:ja:Kernel-based_Virtual Machine|Kernel-based Virtual Machine]] 、は Linux カーネルに組み込まれた [[Wikipedia:ja:ハイパーバイザ|ハイパーバイザ]] です。その目的は [[Xen]] に似ていますがより簡単に動作させることができます。エミュレーションを使うネイティブの [[QEMU]] とは異なり、KVM はカーネルモジュールを介して CPU 拡張機能 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を用いた QEMU の特別な動作モードです。&lt;br /&gt;
&lt;br /&gt;
KVM を使用することで、修正を加えずに GNU/Linux や Windows などのオペレーティングシステムが動作する仮想マシンを複数動かすことができます (詳しくは [https://www.linux-kvm.org/page/Guest_Support_Status Guest Support Status] を参照してください)。それぞれの仮想マシンには専用の仮想化されたハードウェアが使われます: ネットワークカード、ディスク、グラフィックカードなど。&lt;br /&gt;
&lt;br /&gt;
KVM と [[Xen]], [[VMware]], QEMU の違いについては [https://www.linux-kvm.org/page/FAQ#General_KVM_information KVM FAQ] で説明されています。&lt;br /&gt;
&lt;br /&gt;
この記事では KVM をバックエンドに使うエミュレータに共通の機能は扱いません。そのような情報は各々の該当する記事を参照してください。&lt;br /&gt;
&lt;br /&gt;
== KVM サポートの確認 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアのサポート ===&lt;br /&gt;
&lt;br /&gt;
KVM を使うには仮想マシンのホストのプロセッサが仮想化をサポートしている必要があります (Intel のプロセッサでは VT-x、AMD のプロセッサでは AMD-V という名前が付けられています)。あなたの使っているプロセッサがハードウェア仮想化をサポートしているかは次のコマンドで確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ LC_ALL=C.UTF-8 lscpu | grep Virtualization&lt;br /&gt;
&lt;br /&gt;
次を実行することでも確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ grep -E --color=auto &#039;vmx|svm|0xc0f&#039; /proc/cpuinfo&lt;br /&gt;
&lt;br /&gt;
いずれのコマンドを実行しても何も表示されない場合、あなたのプロセッサはハードウェア仮想化をサポート&#039;&#039;&#039;していない&#039;&#039;&#039;ため、KVM を使用することは&#039;&#039;&#039;できません&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
{{Note|BIOS の方で仮想化サポートを有効にする必要があるときもあります。過去 10 年以内に製造された AMD および Intel のすべての x86_64 プロセッサは仮想化をサポートしています。プロセッサが仮想化をサポートしていないように見える場合、ほぼ確実に BIOS で無効になっているだけです。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルのサポート ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux のカーネルは KVM をサポートするために必要な [[カーネルモジュール]] を提供しています。&lt;br /&gt;
&lt;br /&gt;
* 必要なモジュール ({{ic|kvm}} と、{{ic|kvm_amd}} または {{ic|kvm_intel}} のいずれか) がカーネルに含まれているかどうかは、次のコマンドで確認できます：&lt;br /&gt;
&lt;br /&gt;
 $ zgrep CONFIG_KVM= /proc/config.gz&lt;br /&gt;
&lt;br /&gt;
この設定が {{ic|y}} または {{ic|m}} の場合のみ、モジュールは利用可能です。&lt;br /&gt;
&lt;br /&gt;
* 続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているかを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsmod {{!}} grep kvm|&lt;br /&gt;
kvm_intel             245760  0&lt;br /&gt;
kvmgt                  28672  0&lt;br /&gt;
mdev                   20480  2 kvmgt,vfio_mdev&lt;br /&gt;
vfio                   32768  3 kvmgt,vfio_mdev,vfio_iommu_type1&lt;br /&gt;
kvm                   737280  2 kvmgt,kvm_intel&lt;br /&gt;
irqbypass              16384  1 kvm&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このコマンドが何も出力しない場合、モジュールを手動で読み込む必要があります。詳細は [[カーネルモジュール#手動でモジュールを扱う]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|kvm_intel}} または {{ic|kvm_amd}} の {{ic|modprobe}} に失敗するが、{{ic|kvm}} の読み込みには成功し、かつ {{ic|lscpu}} の出力がハードウェア仮想化のサポートを示している場合は、BIOS の設定を確認してください。特にノートパソコンベンダーは、これらの CPU 拡張機能をデフォルトで無効にしていることがあります。ハードウェアが非対応なのか、BIOS で無効にされているだけなのかを判断するには、{{ic|modprobe}} に失敗した直後の [[dmesg]] の出力を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== Virtio を使った準仮想化 ==&lt;br /&gt;
&lt;br /&gt;
準仮想化は、ゲストがホストマシン上のデバイスを使用するための、高速かつ効率的な通信手段を提供します。KVM は &#039;&#039;&#039;Virtio&#039;&#039;&#039; API をハイパーバイザーとゲスト間のレイヤーとして使うことで準仮想化デバイスを仮想マシンに提供します。&lt;br /&gt;
&lt;br /&gt;
すべての Virtio デバイスは 2 つの構成要素を持ちます: ホストのデバイスとゲストのドライバーです。&lt;br /&gt;
&lt;br /&gt;
=== カーネルの対応状況 ===&lt;br /&gt;
&lt;br /&gt;
VIRTIO モジュールがカーネルに組み込まれているかを確認するには、&#039;&#039;&#039;仮想マシン内で&#039;&#039;&#039; 次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ zgrep VIRTIO /proc/config.gz&lt;br /&gt;
&lt;br /&gt;
続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているか確認します:&lt;br /&gt;
&lt;br /&gt;
 $ lsmod | grep virtio&lt;br /&gt;
&lt;br /&gt;
上記のコマンドが何も出力しない場合は、[[カーネルモジュール#手動でモジュールを扱う|カーネルモジュールを手動で読み込む]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 準仮想化デバイスの一覧 ===&lt;br /&gt;
&lt;br /&gt;
* ネットワークデバイス (virtio-net)&lt;br /&gt;
* ブロックデバイス (virtio-blk)&lt;br /&gt;
* コントローラデバイス (virtio-scsi)&lt;br /&gt;
* シリアルデバイス (virtio-serial)&lt;br /&gt;
* バルーンデバイス (virtio-balloon)&lt;br /&gt;
&lt;br /&gt;
== KVM の使い方 ==&lt;br /&gt;
&lt;br /&gt;
次の記事を参照してください: [[QEMU]]。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
{{Note|一般的な小技やヒントは [[QEMU#ヒントとテクニック]] や [[QEMU/トラブルシューティング]]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== ネストされた仮想化 ===&lt;br /&gt;
&lt;br /&gt;
ネストされた仮想化を使うことで、元の仮想マシンやネットワークに修正を加えることなく、既存の仮想マシンを別のハイパーバイザや他のクラウド上で動作させることができるようになります。&lt;br /&gt;
&lt;br /&gt;
ホスト側で、{{ic|kvm_intel}} の nested 機能を有効にしてください:&lt;br /&gt;
&lt;br /&gt;
{{Note|AMD の場合も同様に設定できます。その際は {{ic|intel}} を {{ic|amd}} に置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
 # modprobe -r kvm_intel&lt;br /&gt;
 # modprobe kvm_intel nested=1&lt;br /&gt;
&lt;br /&gt;
永続化させるには ([[カーネルモジュール#モジュールオプションを設定する]]を参照):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm_intel.conf|2=&lt;br /&gt;
options kvm_intel nested=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
機能が有効になっているか確認:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ cat /sys/module/kvm_intel/parameters/nested|2=&lt;br /&gt;
Y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
全ての CPU の機能をゲスト環境に転送するために&amp;quot;ホストパススルー&amp;quot;モードを有効化:&lt;br /&gt;
&lt;br /&gt;
# [[QEMU]] を使用する場合、次のコマンドでゲスト VM を実行してください: {{ic|qemu-system-x86_64 -enable-kvm -cpu host}}。&lt;br /&gt;
# &#039;&#039;virt-manager&#039;&#039; を使用する場合、CPU モデルを {{ic|host-passthrough}} に変更してください。&lt;br /&gt;
# &#039;&#039;virsh&#039;&#039; を使用する場合、{{ic|virsh edit &#039;&#039;vm-name&#039;&#039;}} を使って CPU 行を {{ic|1=&amp;lt;cpu mode=&#039;host-passthrough&#039; check=&#039;partial&#039;/&amp;gt;}} に変更してください。&lt;br /&gt;
&lt;br /&gt;
VM を起動したら {{ic|vmx}} フラグが存在するか確認:&lt;br /&gt;
&lt;br /&gt;
 $ grep -E --color=auto &#039;vmx|svm&#039; /proc/cpuinfo&lt;br /&gt;
&lt;br /&gt;
=== ヒュージページの有効化 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU|qemu-kvm no longer exists. After the above issue is cleared, I suggest merging this section into [[QEMU]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ヒュージページを有効にすることで仮想マシンのパフォーマンスを向上させることができます。&lt;br /&gt;
最新の Arch Linux と KVM ならおそらく必要条件はすべて満たされているはずです。{{ic|/dev/hugepages}} ディレクトリが存在しているかどうかチェックしてください。ディレクトリが存在しなかったら、作成してください。&lt;br /&gt;
このディレクトリを利用するには適切なパーミッションが必要です。デフォルトでは root の UID および GID で 0755 ですが、ここでは kvm グループのメンバーであればヒュージページにアクセスできるようにします。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/fstab}} に以下を追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
hugetlbfs       /dev/hugepages  hugetlbfs       mode=01770,gid=kvm        0 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=gid=kvm}} の代わりに GID 番号を直接指定しても構いませんが、その番号は {{ic|kvm}} グループと一致している必要があります。{{ic|1770}} のモードは、グループ内の誰でもファイルの作成は可能ですが、他のメンバーのファイルの削除やリネームはできないようにします。{{ic|/dev/hugepages}} が正しくマウントされていることを確認してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# umount /dev/hugepages&lt;br /&gt;
# mount /dev/hugepages&lt;br /&gt;
$ mount {{!}} grep huge|2=&lt;br /&gt;
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それから必要なヒュージページの数を計算します。ヒュージページの大きさを確認するには:&lt;br /&gt;
&lt;br /&gt;
 $ grep Hugepagesize /proc/meminfo&lt;br /&gt;
&lt;br /&gt;
通常は 2048 kB ≙ 2 MB です。仮想マシンを 1024 MB で動作させたい場合、1024 / 2 = 512 となり少し追加して 550 まで丸めることができます。必要とするヒュージページをマシンに設定:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w vm.nr_hugepages=550&lt;br /&gt;
&lt;br /&gt;
十分な空きメモリがあれば以下のように表示されるはずです:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ grep HugePages_Total /proc/meminfo|&lt;br /&gt;
HugesPages_Total:  550&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
数字がさらに小さい場合、アプリケーションを閉じるか少ないメモリで仮想マシンを開始してください (number_of_pages x 2):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -enable-kvm -m 1024 -mem-path /dev/hugepages -hda &amp;lt;disk_image&amp;gt; [...]&lt;br /&gt;
&lt;br /&gt;
そして {{ic|-mem-path}} パラメータを使うことでヒュージページが利用されます。&lt;br /&gt;
&lt;br /&gt;
仮想マシンの実行中に、使われているヒュージページを確認するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ grep HugePages /proc/meminfo |&lt;br /&gt;
HugePages_Total:     550&lt;br /&gt;
HugePages_Free:       48&lt;br /&gt;
HugePages_Rsvd:        6&lt;br /&gt;
HugePages_Surp:        0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
問題がないようでしたらデフォルトでヒュージページを有効にすることができます。以下を {{ic|/etc/sysctl.d/40-hugepage.conf}} に追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/40-hugepage.conf|2=&lt;br /&gt;
vm.nr_hugepages = 550&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
参照:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/mm/hugetlbpage.html Linux カーネルの hugetlbpage サポートの概要]&lt;br /&gt;
* [[debian:Hugepages|Debian Wiki - Hugepages]]&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU#Enabling Secure Boot|This is not KVM-specific and would be a great addition to what is already described there.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
KVM において Secure Boot を有効にするには、いくつかの要件を満たす必要があります：&lt;br /&gt;
&lt;br /&gt;
# セキュアブートをサポートする UEFI を使用する必要があります。&lt;br /&gt;
# その UEFI にキーが登録されている必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|Arch Linux は、Fedora のようなディストリビューションとは異なり、現時点でセキュアブートキーを提供していません。Arch Linux をセキュアブートで起動したい場合は、自分で署名キーを作成し、以下の手順に従った上でカーネルに署名する必要があります。詳しくは [[Unified_Extensible_Firmware_Interface/セキュアブート]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
セキュアブート対応の UEFI を有効にするには、{{Pkg|edk2-ovmf}} をインストールし、仮想マシンにセキュアブート対応の UEFI を使用させます。[[libvirt]] を使用している場合、仮想マシンの XML 設定に以下を追加します：&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;lt;os firmware=&amp;quot;efi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;loader readonly=&amp;quot;yes&amp;quot; secure=&amp;quot;yes&amp;quot; type=&amp;quot;pflash&amp;quot;&amp;gt;/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd&amp;lt;/loader&amp;gt;&lt;br /&gt;
&amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、いくつかのキーを登録する必要があります。この例では、Microsoft および Red Hat のセキュアブートキーを登録します。{{Pkg|virt-firmware}} をインストールし、以下のコマンドを実行します。{{ic|&#039;&#039;vm_name&#039;&#039;}} は対象の仮想マシンの名前に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
$ virt-fw-vars --input /usr/share/edk2/x64/OVMF_VARS.4m.fd --output /var/lib/libvirt/qemu/nvram/&#039;&#039;vm_name&#039;&#039;_SECURE_VARS.fd --secure-boot --enroll-redhat&lt;br /&gt;
&lt;br /&gt;
その後、仮想マシンの libvirt XML 設定を編集し、新しく作成された VARS ファイルを指定します。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
&amp;lt;os firmware=&amp;quot;efi&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;loader readonly=&amp;quot;yes&amp;quot; secure=&amp;quot;yes&amp;quot; type=&amp;quot;pflash&amp;quot;&amp;gt;/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd&amp;lt;/loader&amp;gt;&lt;br /&gt;
&amp;lt;nvram template=&amp;quot;/usr/share/edk2/x64/OVMF_VARS.4m.fd&amp;quot;&amp;gt;/var/lib/libvirt/qemu/nvram/&#039;&#039;&#039;{vm-name}&#039;&#039;&#039;_SECURE_VARS.fd&amp;lt;/nvram&amp;gt;&lt;br /&gt;
&amp;lt;/os&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これでセキュアブートが自動的に有効になるはずです。UEFI ブートロゴが表示されたときに {{ic|F2}} を押して仮想マシンの BIOS に入り、セキュアブートが有効になっているか確認できます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.linux-kvm.org/page/HOWTO KVM Howto]&lt;br /&gt;
* [http://www.linux-kvm.org/page/FAQ#General_KVM_information KVM FAQ]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|832342}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40589</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40589"/>
		<updated>2025-07-26T11:45:47Z</updated>

		<summary type="html">&lt;p&gt;K9i: Secure Boot をセキュアブートに&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/高度なネットワーキング}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|QEMU/トラブルシューティング}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは [[dd]] や {{man|1|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== セキュアブートを有効にする ====&lt;br /&gt;
&lt;br /&gt;
VM でセキュアブートを有効にするための最初の要件は、マシンタイプとして {{ic|q35}} を使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}} に置き換えることです。&lt;br /&gt;
&lt;br /&gt;
次の要件は、セキュアブートキーがインストールされた OVMF_VARS ファイルを使用することですが、これは上流プロジェクト [https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137] では提供されていません&lt;br /&gt;
&lt;br /&gt;
他のディストリビューションと異なり、Arch は (2024-12-06 現在) {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} ファイル(事前登録済みキー付き)を提供していません: 詳しくは {{Issue|archlinux/packaging/packages/edk2|1}} を参照。&lt;br /&gt;
&lt;br /&gt;
簡単な回避策として [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 このフォーラム投稿] の Fedora 版を使う方法があります:&lt;br /&gt;
&lt;br /&gt;
* [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora の edk2-ovmf] の &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM を [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 ビルド一覧] からダウンロードする (2024-12-06 時点の最新 F42 版の [https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm 直接リンク])&lt;br /&gt;
* アーカイブを展開し、対象ファイルを適切なフォーマットに変換する [https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
これで作成した {{ic|OVMF_VARS_4M.secboot.fd}} のコピーを作成し、セキュアブートを有効化した VM で使用できます。&lt;br /&gt;
&lt;br /&gt;
セキュアブート用のファームウェアイメージに手動でキーを登録する方法については、[[KVM#セキュアブート]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=やや手間はかかりますが、より &amp;quot;上流に沿った&amp;quot; 方法として、通常の OVMF_VARS ファイルに手動でキーを登録する方法が [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 このフォーラム投稿] に記載されています。}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path /tmp/vm-share.sock --socket-group kvm --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== rootfs を直接ブートする ====&lt;br /&gt;
&lt;br /&gt;
rootfs を {{ic|virtiofsd}} 経由で直接ブートすることも可能です。上述の引数に加えて、次のオプションを追加してください:&lt;br /&gt;
&lt;br /&gt;
 -kernel &#039;&#039;/path/to/vmlinux&#039;&#039;&lt;br /&gt;
 -initrd &#039;&#039;/path/to/initramfs&#039;&#039;&lt;br /&gt;
 -append &#039;rootfstype=virtiofs root=myfs rootflags=rw,noatime&#039;&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[QEMU/高度なネットワーキング#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、SLIRP ベースのユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 高度なネットワーキング ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンのネットワーク設定において、より詳細な制御が必要な場合や、前述のセクションでは対応できない特定の要件がある場合は、[[QEMU/高度なネットワーキング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{AUR|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
ゲストのメモリ使用量をホストから見て縮小可能にするには、ゲスト側が不要になったページをホストに通知する必要があります。カーネルには  [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] と呼ばれる API があり、これは組み込みのため QEMU を開始するだけで使えます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
この後、ゲスト内でワークロードを実行すると、ゲストのメモリ使用量が一旦増加し、その後縮小する様子がホスト側から確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
ただし、このパラメータによってページが解放されたときにゲストのメモリ使用量がホストから見て縮小されることは確かですが、ゲストがキャッシュ用途に使っているメモリには自動的に対応できません。ゲストは未使用メモリのほとんどをキャッシュに使う傾向があるため、{{ic|1=free-page-reporting=on}} が無意味になる可能性があることに注意してください。この問題を緩和する方法については次のセクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== Using virtio pmem to bypass the guest&#039;s page cache ====&lt;br /&gt;
&lt;br /&gt;
You might want to rely on the host&#039;s page cache instead of the guest&#039;s in order to allow for more efficient memory usage. Coupled with [[#Enabling KSM|KSM]], this allows you to make your virtual machines quite memory efficient, duplicating only few pages.&lt;br /&gt;
&lt;br /&gt;
One way to achieve this is to use a [https://www.qemu.org/docs/master/system/devices/virtio-pmem.html file-mapped virtio pmem device]. Add this config to your QEMU:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=32G&lt;br /&gt;
 -device virtio-pmem-pci,memdev=mem1,id=nv1&lt;br /&gt;
 -m 64G,maxmem=96G&lt;br /&gt;
&lt;br /&gt;
whereby {{ic|virtio_pmem.img}} is a local file on the host that will serve as our memory backend in side the guest. The {{ic|-m}} part is important here: Set the {{ic|maxmem}} parameter so that it is {{ic|regular memory + memory-backend-file size}}. In this case: {{ic|1=64G + 32G = 96G}}.&lt;br /&gt;
&lt;br /&gt;
Start the guest with those options. Inside the guest, you will find a new device at {{ic|/dev/pmem0}} which we will need to format with a [https://docs.kernel.org/filesystems/dax.html DAX-compatible filesystem] such as ext4 (btrfs is not supported):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/pmem0&lt;br /&gt;
 mount /dev/pmem0 /mnt -o dax=always&lt;br /&gt;
&lt;br /&gt;
Any files you write into {{ic|/mnt}} will then bypass the guest&#039;s page cache.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to have the whole root filesystem DAX-enabled in this way.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
f&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[QEMU/トラブルシューティング#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
==== 時間基準 ====&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、Windows はファームウェアのクロックがローカル時刻で設定されていると仮定しますが、QEMU を使用する場合は通常そうではありません。&lt;br /&gt;
この問題を解決するには、インストール後に [[システム時刻#Windows で UTC を使う|Windows を UTC に設定]] するか、コマンドラインに {{ic|-rtc base=localtime}} を追加して仮想クロックをローカル時刻に設定する方法があります。&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は QEMU で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
[[QEMU/トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [https://web.archive.org/web/20241213081621/http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|828566}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40588</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40588"/>
		<updated>2025-07-26T11:39:48Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/828566 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/高度なネットワーキング}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|QEMU/トラブルシューティング}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは [[dd]] や {{man|1|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Secure Boot を有効にする ====&lt;br /&gt;
&lt;br /&gt;
VM で Secure Boot を有効にするための最初の要件は、マシンタイプとして {{ic|q35}} を使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}} に置き換えることです。&lt;br /&gt;
&lt;br /&gt;
次の要件は、Secure Boot キーがインストールされた OVMF_VARS ファイルを使用することですが、これは上流プロジェクト [https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137] では提供されていません&lt;br /&gt;
&lt;br /&gt;
他のディストリビューションと異なり、Arch は (2024-12-06 現在) {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} ファイル(事前登録済みキー付き)を提供していません: 詳しくは {{Issue|archlinux/packaging/packages/edk2|1}} を参照。&lt;br /&gt;
&lt;br /&gt;
簡単な回避策として [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 このフォーラム投稿] の Fedora 版を使う方法があります:&lt;br /&gt;
&lt;br /&gt;
* [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora の edk2-ovmf] の &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM を [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 ビルド一覧] からダウンロードする (2024-12-06 時点の最新 F42 版の [https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm 直接リンク])&lt;br /&gt;
* アーカイブを展開し、対象ファイルを適切なフォーマットに変換する [https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
これで作成した {{ic|OVMF_VARS_4M.secboot.fd}} のコピーを作成し、Secure Boot を有効化した VM で使用できます。&lt;br /&gt;
&lt;br /&gt;
Secure Boot 用のファームウェアイメージに手動でキーを登録する方法については、[[KVM#セキュアブート]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=やや手間はかかりますが、より &amp;quot;上流に沿った&amp;quot; 方法として、通常の OVMF_VARS ファイルに手動でキーを登録する方法が [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 このフォーラム投稿] に記載されています。}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path /tmp/vm-share.sock --socket-group kvm --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== rootfs を直接ブートする ====&lt;br /&gt;
&lt;br /&gt;
rootfs を {{ic|virtiofsd}} 経由で直接ブートすることも可能です。上述の引数に加えて、次のオプションを追加してください:&lt;br /&gt;
&lt;br /&gt;
 -kernel &#039;&#039;/path/to/vmlinux&#039;&#039;&lt;br /&gt;
 -initrd &#039;&#039;/path/to/initramfs&#039;&#039;&lt;br /&gt;
 -append &#039;rootfstype=virtiofs root=myfs rootflags=rw,noatime&#039;&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[QEMU/高度なネットワーキング#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、SLIRP ベースのユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 高度なネットワーキング ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンのネットワーク設定において、より詳細な制御が必要な場合や、前述のセクションでは対応できない特定の要件がある場合は、[[QEMU/高度なネットワーキング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{AUR|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
ゲストのメモリ使用量をホストから見て縮小可能にするには、ゲスト側が不要になったページをホストに通知する必要があります。カーネルには  [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] と呼ばれる API があり、これは組み込みのため QEMU を開始するだけで使えます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
この後、ゲスト内でワークロードを実行すると、ゲストのメモリ使用量が一旦増加し、その後縮小する様子がホスト側から確認できるはずです。&lt;br /&gt;
&lt;br /&gt;
ただし、このパラメータによってページが解放されたときにゲストのメモリ使用量がホストから見て縮小されることは確かですが、ゲストがキャッシュ用途に使っているメモリには自動的に対応できません。ゲストは未使用メモリのほとんどをキャッシュに使う傾向があるため、{{ic|1=free-page-reporting=on}} が無意味になる可能性があることに注意してください。この問題を緩和する方法については次のセクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== Using virtio pmem to bypass the guest&#039;s page cache ====&lt;br /&gt;
&lt;br /&gt;
You might want to rely on the host&#039;s page cache instead of the guest&#039;s in order to allow for more efficient memory usage. Coupled with [[#Enabling KSM|KSM]], this allows you to make your virtual machines quite memory efficient, duplicating only few pages.&lt;br /&gt;
&lt;br /&gt;
One way to achieve this is to use a [https://www.qemu.org/docs/master/system/devices/virtio-pmem.html file-mapped virtio pmem device]. Add this config to your QEMU:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=32G&lt;br /&gt;
 -device virtio-pmem-pci,memdev=mem1,id=nv1&lt;br /&gt;
 -m 64G,maxmem=96G&lt;br /&gt;
&lt;br /&gt;
whereby {{ic|virtio_pmem.img}} is a local file on the host that will serve as our memory backend in side the guest. The {{ic|-m}} part is important here: Set the {{ic|maxmem}} parameter so that it is {{ic|regular memory + memory-backend-file size}}. In this case: {{ic|1=64G + 32G = 96G}}.&lt;br /&gt;
&lt;br /&gt;
Start the guest with those options. Inside the guest, you will find a new device at {{ic|/dev/pmem0}} which we will need to format with a [https://docs.kernel.org/filesystems/dax.html DAX-compatible filesystem] such as ext4 (btrfs is not supported):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/pmem0&lt;br /&gt;
 mount /dev/pmem0 /mnt -o dax=always&lt;br /&gt;
&lt;br /&gt;
Any files you write into {{ic|/mnt}} will then bypass the guest&#039;s page cache.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to have the whole root filesystem DAX-enabled in this way.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
f&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[QEMU/トラブルシューティング#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
==== 時間基準 ====&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、Windows はファームウェアのクロックがローカル時刻で設定されていると仮定しますが、QEMU を使用する場合は通常そうではありません。&lt;br /&gt;
この問題を解決するには、インストール後に [[システム時刻#Windows で UTC を使う|Windows を UTC に設定]] するか、コマンドラインに {{ic|-rtc base=localtime}} を追加して仮想クロックをローカル時刻に設定する方法があります。&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は QEMU で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
[[QEMU/トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [https://web.archive.org/web/20241213081621/http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|828566}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0&amp;diff=40583</id>
		<title>QEMU/トラブルシューティング</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0&amp;diff=40583"/>
		<updated>2025-07-26T10:03:02Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/836831 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Emulation]]&lt;br /&gt;
[[Category:Hypervisors]]&lt;br /&gt;
[[en:QEMU/Troubleshooting]]&lt;br /&gt;
== マウスカーソルが敏感すぎたり迷走する ==&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
== カーソルが表示されない ==&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[QEMU#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
== 2つの異なるマウスカーソルが表示される ==&lt;br /&gt;
&lt;br /&gt;
ヒント [[QEMU#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
== VNC 使用時のキーボードの問題 ==&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
== キーボードが壊れているまたは矢印キーが動作しない ==&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== キーマップファイルを読み込めない ==&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ==&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
== libgfapi エラーメッセージ ==&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
== ライブ環境でカーネルパニックが発生する ==&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
== Windows 7 ゲストの音質が酷い ==&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/Download/ToDownload?type=agree&amp;amp;downloadid=3204 Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== Could not access KVM kernel module: Permission denied ==&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ==&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
== 高い割り込みレイテンシとマイクロスタッタリング ==&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== QXL ビデオの低解像度化 ==&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 仮想マシンが Arch ISO で起動しない ==&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ゲスト CPU の割り込みが発生しない ==&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ==&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== QEMU 開始後に Bluetooth オーディオの音質が低下する ==&lt;br /&gt;
[[WirePlumber]] のプロファイル自動切り替え機能を無効にすることで、モノラル音声プロファイルへの切り替えを防止できます。&lt;br /&gt;
 $ wpctl settings --save bluetooth.autoswitch-to-headset-profile false&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU/Troubleshooting|2025-07-26|836831}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40582</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40582"/>
		<updated>2025-07-26T09:54:49Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/828566 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、SLIRP ベースのユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 高度なネットワーキング ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンのネットワーク設定において、より詳細な制御が必要な場合や、前述のセクションでは対応できない特定の要件がある場合は、[[QEMU/高度なネットワーキング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
f&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
[[QEMU/トラブルシューティング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|828566}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40581</id>
		<title>QEMU/高度なネットワーキング</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40581"/>
		<updated>2025-07-26T09:28:56Z</updated>

		<summary type="html">&lt;p&gt;K9i: 英語版 wiki への interwiki 追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Emulation]]&lt;br /&gt;
[[Category:Hypervisors]]&lt;br /&gt;
[[en:QEMU/Advanced networking]]&lt;br /&gt;
&lt;br /&gt;
== 高度なブリッジネットワーク構成 ==&lt;br /&gt;
&lt;br /&gt;
=== ブリッジを手動で作成する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[QEMU#qemu-bridge-helper を使用したブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=== iptables による物理デバイスと Tap デバイスのネットワーク共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
== VDE2 によるネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VDE とは? ===&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
=== 他の方法 ===&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VDE2 Bridge ==&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU/Advanced_networking|2025-07-26|841852}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40580</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=40580"/>
		<updated>2025-07-26T05:28:02Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/828562 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 高度なネットワーキング ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンのネットワーク設定において、より詳細な制御が必要な場合や、前述のセクションでは対応できない特定の要件がある場合は、[[QEMU/高度なネットワーキング]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
f&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-07-26|828562}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40579</id>
		<title>QEMU/高度なネットワーキング</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU/%E9%AB%98%E5%BA%A6%E3%81%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0&amp;diff=40579"/>
		<updated>2025-07-26T05:24:15Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/828614 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Emulation]]&lt;br /&gt;
[[Category:Hypervisors]]&lt;br /&gt;
&lt;br /&gt;
== 高度なブリッジネットワーク構成 ==&lt;br /&gt;
&lt;br /&gt;
=== ブリッジを手動で作成する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[QEMU#qemu-bridge-helper を使用したブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=== iptables による物理デバイスと Tap デバイスのネットワーク共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
== VDE2 によるネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VDE とは? ===&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
=== 他の方法 ===&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== VDE2 Bridge ==&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 基本 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
=== 起動スクリプト ===&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU/Advanced_networking|2025-07-26|828614}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39993</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39993"/>
		<updated>2025-03-15T03:59:23Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Using a virtiofsd share */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== virtiofsd の共有を使う ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39992</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39992"/>
		<updated>2025-03-15T03:57:22Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Accessing SSH via vsock */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== vsock 経由で SSH にアクセスする ===&lt;br /&gt;
&lt;br /&gt;
VM に接続するための安全で便利な方法は、{{man|7|vsock}} を使用して SSH を使うことです。この方法を利用するには、VM が systemd ベースである必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、特別なデバイスを使用して QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
{{ic|cid}} はユーザーが有効な 32 ビット番号として選択する必要があります（{{man|7|vsock}} を参照）。systemd が VM が {{ic|vhost-vsock}} デバイスで起動されたことを検出すると、自動的に {{ic|systemd-ssh-generator}} を使用して SSH サーバーを起動します。&lt;br /&gt;
&lt;br /&gt;
次に、以下のように VM に接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
これが動作するのは、{{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} が SSH クライアントに {{ic|systemd-ssh-proxy}} を使用して vsock 経由で SSH を使うよう指示しているためです。&lt;br /&gt;
&lt;br /&gt;
さらに、{{man|7|systemd.system-credentials}} を使用することで、ダウンロードしたイメージを実行しようとする場合に便利な {{ic|root}} ユーザーの認証済みキー ファイルを注入できます。これを次のように行うことができます:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
公開鍵行は base64 エンコードされた文字列として提供する必要があります。次のように行えます:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-smbios type=11,value=io.systemd...}} の仕組みを使って、systemd によって処理されるさまざまなその他の魔法のような変数を注入することもできます。詳細については、[https://systemd.io/CREDENTIALS/ systemd ドキュメント: システムとサービスの資格情報] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39991</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39991"/>
		<updated>2025-03-15T03:48:17Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Pre-made virtual machine images */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 既製の仮想マシンイメージ ===&lt;br /&gt;
&lt;br /&gt;
多くの場合、クラウド環境などで自分でオペレーティングシステムを手動でインストールする必要はありませんし、望ましくないこともあります。幸い、多くの既製のイメージがさまざまなプロバイダーからダウンロード可能です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arch Linux&#039;&#039;&#039; の場合、[https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] プロジェクトに [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages 毎週のイメージリリース] があります。&lt;br /&gt;
&lt;br /&gt;
同様のイメージは、[https://fedoraproject.org/cloud/download Fedora] や [https://cloud.debian.org/images/cloud Debian] でも利用可能です。&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39990</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39990"/>
		<updated>2025-03-15T03:40:20Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* virtiofsd によるホストファイル共有 */ セクション名を翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== QEMU を起動する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Linux ゲストで共有を使う ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Windows ゲストで共有を使う ====&lt;br /&gt;
&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39989</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39989"/>
		<updated>2025-03-15T03:28:48Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Running virtiofsd as root */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== root として virtiofsd を実行する ====&lt;br /&gt;
QEMU を実行するユーザーを {{ic|kvm}} [[ユーザーグループ]] に追加してください。これは virtiofsd のソケットにアクセスするために必要です。変更を反映させるには、一度ログアウトが必要な場合があります。&lt;br /&gt;
&lt;br /&gt;
root で virtiofsd を開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== Launching QEMU ==== &lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Linux guest ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Windows guest ====&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39988</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39988"/>
		<updated>2025-03-15T03:14:31Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Running virtiofsd as a regular user */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== 通常のユーザーとして virtiofsd を実行する ====&lt;br /&gt;
&lt;br /&gt;
まず virtiofsd を実行するユーザーに {{man|5|subuid}} および {{man|5|subgid}} の設定項目があることを確認します。[[Podman#subuid と subgid を設定する|Podman 記事の関連するセクション]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
次にvirtiofsd を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} は、以後の新しいコマンドが、現在のユーザが root にマップされた状態で新しいユーザ名前空間で起動されるようにします。virtiofsd は root として実行されることを想定しているため、これは重要です。&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as root ====&lt;br /&gt;
&lt;br /&gt;
Add the user that runs QEMU to the {{ic|kvm}} [[user group]], because it needs to access the virtiofsd socket. You might have to logout for change to take effect.&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== Launching QEMU ==== &lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Linux guest ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Windows guest ====&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39987</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39987"/>
		<updated>2025-03-15T02:21:39Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 9pfs VirtFS によるホストファイル共有 */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs は高パフォーマンスのローカル VM 用に特別に開発されたものではないため、かなり低速です。代わりに VM のパフォーマンスを念頭に特別に作られた [[#virtiofsd によるホストファイル共有]] の検討をお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as a regular user ====&lt;br /&gt;
&lt;br /&gt;
First, make sure that there&#039;s a {{man|5|subuid}} and {{man|5|subgid}} configuration entry for the user that will execute virtiofsd. See also the [[Podman#Set subuid and subgid|relevant section in the Podman article]].&lt;br /&gt;
&lt;br /&gt;
Then, start virtiofsd:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} causes the command after it to be launched in a new user namespace with the current user getting mapped to root in the new command. This is important because virtiofsd expects to be running as root from its point of view.&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} is a socket file&lt;br /&gt;
* {{ic|/tmp/vm-share}} is a shared directory between the host and the guest virtual machine&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as root ====&lt;br /&gt;
&lt;br /&gt;
Add the user that runs QEMU to the {{ic|kvm}} [[user group]], because it needs to access the virtiofsd socket. You might have to logout for change to take effect.&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== Launching QEMU ==== &lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Linux guest ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Windows guest ====&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39985</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39985"/>
		<updated>2025-03-15T02:05:22Z</updated>

		<summary type="html">&lt;p&gt;K9i: 構成&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、QEMU はゲストコードをホスト CPU で直接実行することで、ネイティブに近いパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs is fairly slow as it wasn&#039;t specifically developed for high-performance local VM usage. Users are advised to look into [[#Host file sharing with virtiofsd]] instead which was specifically made with VM performance in mind.}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as a regular user ====&lt;br /&gt;
&lt;br /&gt;
First, make sure that there&#039;s a {{man|5|subuid}} and {{man|5|subgid}} configuration entry for the user that will execute virtiofsd. See also the [[Podman#Set subuid and subgid|relevant section in the Podman article]].&lt;br /&gt;
&lt;br /&gt;
Then, start virtiofsd:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} causes the command after it to be launched in a new user namespace with the current user getting mapped to root in the new command. This is important because virtiofsd expects to be running as root from its point of view.&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} is a socket file&lt;br /&gt;
* {{ic|/tmp/vm-share}} is a shared directory between the host and the guest virtual machine&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as root ====&lt;br /&gt;
&lt;br /&gt;
Add the user that runs QEMU to the {{ic|kvm}} [[user group]], because it needs to access the virtiofsd socket. You might have to logout for change to take effect.&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== Launching QEMU ==== &lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Linux guest ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Windows guest ====&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=39956</id>
		<title>Bcache</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=39956"/>
		<updated>2025-03-09T14:21:31Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/823595 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[en:Bcache]]&lt;br /&gt;
[[zh-hans:Bcache]]&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Some first-person comments, see [[Help:Style]].}} --&amp;gt;&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bcachefs}}&lt;br /&gt;
{{Related|LVM}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://bcache.evilpiepirate.org/ Bcache] (block cache) を使うことで SSD を他のブロックデバイス (通常は回転する HDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は [https://bcache.evilpiepirate.org/ bcache のホームページ] を読んでください。必ず [https://docs.kernel.org/admin-guide/bcache.html bcache のマニュアル] を読んで参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Bcache の代わりになるものは [[LVM#Cache|LVM cache]]です。}}&lt;br /&gt;
&lt;br /&gt;
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、[https://github.com/g2p/blocks blocks to-bcache] でインプレース変換を実行できます。&lt;br /&gt;
&lt;br /&gt;
{{Out of date|2024 年に bcache が btrfs の破損を引き起こした情報源はありますか? リンクされたブログには追加の詳細はありません }}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 最初に重要なデータをバックアップしてください。&lt;br /&gt;
* Bcache と [[btrfs]] を組み合わせるとファイルシステムが壊れてしまう可能性があります。詳しくは [https://www.hdevalence.ca/blog/2013-09-21-notes-on-my-archlinux-install こちらの記事] を参照してください。Btrfs wiki によればカーネル 3.19 以上では修正されているとのことです [https://btrfs.wiki.kernel.org/index.php/Gotchas#Historical_references]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 既存のシステムに bcached btrfs ファイルシステムをセットアップ ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|make-bcache は既存のドライブやパーティションをインポート &#039;&#039;&#039;しません&#039;&#039;&#039; - 再フォーマットします。}}&lt;br /&gt;
&lt;br /&gt;
=== 準備 ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|bcache-tools}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
キャッシュとバッキングデータを保持するために fdisk を使用して SSD とハードドライブに適切なパーティションを作成します。&lt;br /&gt;
{{Tip| 1台のドライブに多数のパーティションを作成することが可能です。これにより、コミットする前に複雑なセットアップをテストできます。ドライブに障害が発生すると全てのデータが失われることに注意してください。好ましくないアクセスパターンためドライブのパフォーマンスも低下します。}}&lt;br /&gt;
&lt;br /&gt;
=== 状況: 1台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 1台のドライブが故障すると、すべてのデータが失われます。&lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | btrfs /mnt   |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | /dev/Bcache0 |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Cache        |&lt;br /&gt;
 | /dev/sdk1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Data         |&lt;br /&gt;
 | /dev/sdv1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります&lt;br /&gt;
&lt;br /&gt;
 # make-bcache --block 4k --bucket 2M -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|--block 4k}} オプションを省略する必要があるかもしれません。 [https://unix.stackexchange.com/questions/359508/cannot-attach-cache-device-to-backing-device キャッシュデバイスをバッキングデバイスにアタッチできない]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid に置き換えてください。Udev ルールが再起動時にこの処理を行うため一回だけ実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、&#039;bcache&#039; フックをリスト内の block と filesystems の間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に &#039;bcache&#039; を追加する必要があります。それから [[initramfs を再生成する]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 状況: 4台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +-----------------------------------------------------------+&lt;br /&gt;
 |                         btrfs /mnt                        |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 |                           Cache                           |  &lt;br /&gt;
 |                         /dev/sdk1                         |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid と置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 &lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 3台のハードドライブと3台の読み書きキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの SSD に障害が発生した場合のデータ損失を回避するために、各 HDD にはそれぞれの SSD が必要です。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------+&lt;br /&gt;
 |                  btrfs /mnt                |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Cache        | Cache        | Cache        |  &lt;br /&gt;
 | /dev/sdk1    | /dev/sdl1    | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
 # echo &#039;&#039;&#039;cset.uuid&#039;&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. ライトバックモードを有効にします&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No such warnings in official docs or kernel docs. Any source for below? }} --&amp;gt;&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。&lt;br /&gt;
* Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。&lt;br /&gt;
* すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。&lt;br /&gt;
* 自己責任で btrfs とライトバックモードの bcache を使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache1/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache2/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 5台のハードドライブと3台のキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの各キャッシュデバイスは、SSD に障害が発生した場合のデータ損失を回避するために、単一のバッキングドライブをキャッシュするためにのみ使用する必要があります。ライトスルーとライトアラウンドの SSD は共有できます。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------------------------------------+&lt;br /&gt;
 |                                btrfs /mnt                                |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | WriteB Cache |     Writethrough or writearound Cache      | WriteB Cache |  &lt;br /&gt;
 | /dev/sdk1    |                 /dev/sdl1                  | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    | /dev/sdz1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
 # make-bcache -B /dev/sdz1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache4/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. 非共有キャッシュでライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache4/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== Bcache の管理 ===&lt;br /&gt;
&lt;br /&gt;
1. 正しくセットアップされていることを確認する&lt;br /&gt;
&lt;br /&gt;
 # cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
出力は以下のどれかになります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|no cache}}: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: 全て問題ないことを意味します。キャッシュはクリーンです。&lt;br /&gt;
* &#039;&#039;&#039;dirty&#039;&#039;&#039;: 全て正しくセットアップされており &#039;&#039;writeback&#039;&#039; が有効になっていてキャッシュがダーティであることを意味します。&lt;br /&gt;
* &#039;&#039;&#039;inconsistent&#039;&#039;&#039;: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。&lt;br /&gt;
&lt;br /&gt;
2. 使用しているキャッシュモードを確認する&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/bcache0/bcache/cache_mode|&lt;br /&gt;
[writethrough] writeback writearound none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の例では &#039;&#039;writethrough&#039;&#039; モードが有効になっています。&lt;br /&gt;
&lt;br /&gt;
3. bcached デバイスについての情報を表示する:&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスを停止する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/stop&lt;br /&gt;
&lt;br /&gt;
5. キャッシュデバイスを登録解除する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/detach&lt;br /&gt;
&lt;br /&gt;
6. キャッシュデバイスを安全に除去する&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;cache-set-uuid&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/detach&lt;br /&gt;
&lt;br /&gt;
7. アタッチされたデバイスを開放する&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/bcache/&#039;&#039;cache-set-uuid&#039;&#039;/stop&lt;br /&gt;
&lt;br /&gt;
== bcache デバイスへのインストール ==&lt;br /&gt;
&lt;br /&gt;
1. インストールディスク (2013.08.01 以上) を起動。&lt;br /&gt;
&lt;br /&gt;
2. [[AUR]] から {{AUR|bcache-tools}} パッケージをインストール。&lt;br /&gt;
&lt;br /&gt;
3. HDD をパーティション分割します&lt;br /&gt;
&lt;br /&gt;
{{Note|Grub2 が以下に述べるように bcache をサポートしていないことは事実かもしれませんが、UEFI は完全にサポートしています。つまり、Linux カーネルがブートデバイスを適切に処理するために必要なモジュールがカーネルにコンパイルされているか initramfs に含まれており、これらのファイルを initramfs に含めることができれば、下記で説明する個別のブートパーティションを省略して FAT EFI システムパーティションを使えます。詳細は [[GRUB]] および/または [[UEFI]] を参照してください。}}&lt;br /&gt;
grub は bcache を扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、[[EFI System Partition]] (ESP) も必要です。例:&lt;br /&gt;
&lt;br /&gt;
    1            2048         2099199   1024.0 MiB  EF00  EFI system partition&lt;br /&gt;
    2         2099200         4196351   1024.0 MiB  EA00  arch_boot&lt;br /&gt;
    3         4196352       499998719   236.4 GiB   8300  bcache_backing&lt;br /&gt;
&lt;br /&gt;
{{Note|この例には、swapfile/partition はありません。キャッシュ上のスワップパーティションには、手順7の LVM を使用してください。キャッシュ外のスワップパーティションには、ここでスワップパーティションを作成してください。}}&lt;br /&gt;
&lt;br /&gt;
4. HDD を bcache のバッキングデバイスとして設定します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sda3&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ブートディスクの準備では、決定した結果の影響を知ることが重要です。選択したブートローダー/マネージャーのドキュメントを何度も確認し、bcache との関連を真剣に検討してください。&lt;br /&gt;
* 以下のように、関連付けられているすべてのディスクが一度にパーティション化された場合、bcache は自動的に &amp;quot;-B バッキングストア&amp;quot; を &amp;quot;-C ssd キャッシュ&amp;quot; にアタッチし、手順5は不要となります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスができました。&lt;br /&gt;
&lt;br /&gt;
5. SSD を設定します&lt;br /&gt;
&lt;br /&gt;
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdb&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register &lt;br /&gt;
 # echo &#039;&#039;UUID__from_previous_command&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{Note|UUID を忘れた場合、キャッシュデバイスの登録後に {{ic|ls /sys/fs/bcache/}} で見つけることができます。}}&lt;br /&gt;
&lt;br /&gt;
6. bcache デバイスをフォーマットします。{{ic|/dev/bcache0}} デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください ({{ic|/}}, {{ic|/home}}, {{ic|/var}} などを分けたい場合など):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
 # mount /dev/bcache0 /mnt/&lt;br /&gt;
 # btrfs subvolume create /mnt/root&lt;br /&gt;
 # btrfs subvolume create /mnt/home&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
&lt;br /&gt;
cryptsetupなどを使用したい場合は、LUKS をセットアップすることもできます。例えば、&#039;cryptdevice&#039; カーネルオプション内のbcacheデバイスの参照は正常に機能します。&lt;br /&gt;
&lt;br /&gt;
7. インストール用のマウントポイントを準備します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/sda2&lt;br /&gt;
 # mkfs.fat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
ここで {{Pkg|arch-install-scripts}} パッケージをインストールします。そうしたら:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/&lt;br /&gt;
 # mount --mkdir /dev/bcache0 -o subvol=home,compress=lzo /mnt/home&lt;br /&gt;
 # mount --mkdir /dev/sda2 /mnt/boot&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/efi&lt;br /&gt;
&lt;br /&gt;
8. 下記以外は通常通り [[インストールガイド]] に従ってシステムをインストールします:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集して {{ic|mkinitcpio -p linux}} を実行する前に:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|bcache-tools}} パッケージを[[インストール]]する。&lt;br /&gt;
* {{ic|/etc/mkinitcpio.conf}} を編集し:&lt;br /&gt;
** &amp;quot;bcache&amp;quot; モジュールを追加する&lt;br /&gt;
** &amp;quot;bcache&amp;quot; フックを block と filesystem フックの間に追加する&lt;br /&gt;
&lt;br /&gt;
{{Note| リブート後に何らかの理由でインストールメディアからバッキングデバイスを開きたい場合、手動で登録する必要があります。bcache モジュールがロードされていることを確認してから、関連するデバイスを /sys/bcache/register に echo します。[[dmesg]] を使って機能したかどうか確認すべきです。}}&lt;br /&gt;
&lt;br /&gt;
== インストールディスクからのアクセス ==&lt;br /&gt;
&lt;br /&gt;
ここではインストールディスクが起動する前に存在していた bcache パーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AUR から {{AUR|bcache-tools}} をインストールします。そして、モジュールをカーネルに追加します:&lt;br /&gt;
&lt;br /&gt;
 # modprobe bcache&lt;br /&gt;
&lt;br /&gt;
デバイスは {{ic|/dev/bcache*}} にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache*}} が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。&lt;br /&gt;
&lt;br /&gt;
インターネットを設定し {{AUR|bcache-tools}} をインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sdX &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdY &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # ...&lt;br /&gt;
&lt;br /&gt;
最後に必要なスレーブデバイスが登録された直後に bcache デバイスが現れます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;writethrough&#039;&#039; バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/bcache/running&lt;br /&gt;
&lt;br /&gt;
Bcache は実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで &amp;quot;機能&amp;quot; しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|discard}} オプションを有効にしないでください! 回復不能な破損を引き起こす可能性があります。 [https://bugzilla.kernel.org/show_bug.cgi?id=197377][https://lore.kernel.org/linux-bcache/CAJ+L6qeOVY_KofXsZKihHrbHaYzQTKYAh0Shm7Givj+f8=PiBg@mail.gmail.com/]}}&lt;br /&gt;
&lt;br /&gt;
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。{{ic|/sys}} のファイルに書き込むことで設定します。詳しくは [https://docs.kernel.org/admin-guide/bcache.html bcache ユーザードキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
キャッシュモードを切り替えるには {{ic|/sys/block/bcache[0-9]/bcache/cache_mode}} に {{ic|writethrough}}, {{ic|writeback}}, {{ic|writearound}} または {{ic|none}} のどれかを書き込みます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys}} の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには {{ic|/etc/tmpfile.d}} に .conf ファイルを作成してください。永続的な方法で、{{ic|bcache0}} のシーケンシャルカットオフを 1 MB にしてキャッシュモードを writeback に設定するには、{{ic|/etc/tmpfiles.d/my-bcache.conf}} ファイルを以下の内容で作成します:&lt;br /&gt;
&lt;br /&gt;
 w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M&lt;br /&gt;
 w /sys/block/bcache0/bcache/cache_mode        - - - - writeback&lt;br /&gt;
&lt;br /&gt;
=== Situation: Prevent all write access to a HDD ===&lt;br /&gt;
{{Warning| &lt;br /&gt;
* When the hard drive or the SSD fails, all data is lost.&lt;br /&gt;
* Consider using BTRFS RAID to prevent data loss when a SSD / HDD fails.&lt;br /&gt;
}}&lt;br /&gt;
In this situation the goal is to keep he HDD idle as long as possible. This is achieved by absorbing all writes with the SSD. The hard drive is only activated when the SSD is full, or when something is read that&#039;s not on the SSD.&lt;br /&gt;
&lt;br /&gt;
Enable the writeback cache mode:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
Let bcache completely sync with the hard drive.&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let sequential IO bypass the cache:&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/sequential_cutoff &lt;br /&gt;
&lt;br /&gt;
Let bcache wait a week after the previous sync is done: &lt;br /&gt;
&lt;br /&gt;
 # echo $((7*24*60*60)) &amp;gt; /sys/block/bcache0/bcache/writeback_delay&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let bcache go around the cache when there&#039;s read / write congestion&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_read_threshold_us&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_write_threshold_us&lt;br /&gt;
 &lt;br /&gt;
Put the HDD to sleep after 20 minutes:&lt;br /&gt;
 # hdparm -S 240  /dev/$(cat /sys/block/bcache0/bcache/backing_dev_name)&lt;br /&gt;
 /dev/sdh1:&lt;br /&gt;
 setting standby to 240 (20 minutes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 First use lsblk to get the device names of the HDD and SSD. In this example /dev/sdh1 is the HDD, /dev/sdc1 is the SSD:&lt;br /&gt;
&lt;br /&gt;
 # lsblk -M -s&lt;br /&gt;
 bcache0   254:0    0 931.5G  0 disk &lt;br /&gt;
    ├─sdc1      8:33   0 111.8G  0 part &lt;br /&gt;
    │ └─sdc     8:32   0 111.8G  0 disk &lt;br /&gt;
    └─sdh1      8:113  0 931.5G  0 part &lt;br /&gt;
      └─sdh     8:112  0 931.5G  0 disk&lt;br /&gt;
&lt;br /&gt;
Now Dstat can be used to monitor disk access to the members of the bcache set.&lt;br /&gt;
&lt;br /&gt;
 $ dstat -D sdc1,sdh1&lt;br /&gt;
&lt;br /&gt;
== 高度な操作 ==&lt;br /&gt;
&lt;br /&gt;
=== バッキングデバイスのリサイズ ===&lt;br /&gt;
&lt;br /&gt;
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは [https://lore.kernel.org/linux-bcache/CAH+dOxJv-ajvLfbUSo8dqG0a8_grNBhfxJ1EbmSrYZz0YXJM2w@mail.gmail.com/T/ メーリングリスト] で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。&lt;br /&gt;
&lt;br /&gt;
==== 拡大例 ====&lt;br /&gt;
&lt;br /&gt;
以下の例では、ファイルシステムを 4GB 拡大します。&lt;br /&gt;
&lt;br /&gt;
1.ライブ CD/USB ドライブ（bcacheを有効にする必要はありません）で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが 4G 大きい状態で再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfs の場合、こうします&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
==== 縮小例 ====&lt;br /&gt;
&lt;br /&gt;
この例では、ファイルシステムを 4GB 縮小します。&lt;br /&gt;
&lt;br /&gt;
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。&lt;br /&gt;
&lt;br /&gt;
 # echo writethrough &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 $ watch cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
状態が &amp;quot;clean&amp;quot; になるまで待ってください。しばらく時間がかかります。&lt;br /&gt;
&lt;br /&gt;
===== キャッシュをバッキングデバイスに強制的にフラッシュする =====&lt;br /&gt;
&lt;br /&gt;
こうすることを推奨します&lt;br /&gt;
&lt;br /&gt;
  # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。&lt;br /&gt;
&lt;br /&gt;
その後値を元に戻します&lt;br /&gt;
&lt;br /&gt;
 # echo 10 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrsfs filesystem resize -5G /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合は &#039;&#039;resize2fs&#039;&#039; を使用しますが、パーティションがアンマウントされている場合に限ります&lt;br /&gt;
&lt;br /&gt;
{{hc|$ df -h /home|&lt;br /&gt;
/dev/bcache0    290G   20G   270G   1% /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # umount /home&lt;br /&gt;
 # resize2fs /dev/bcache0 283G&lt;br /&gt;
&lt;br /&gt;
3. LiveCD/USB ドライブ(bcache をサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを 4G 小さくして再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|非常に注意深くすれば、手順2でファイルシステムを正確なサイズまで縮小することで手順4を回避できます。ただし、多くのパーティションツールは希望どおりに動作せず、代わりにセクター境界の終端まで要求されたパーティションの開始点/終了点を調整します。これを事前に計算するのは難しいかもしれません}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動時に /dev/bcache デバイスが存在しない ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーが busy box シェルに表示される場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
ERROR: Unable to find root device &#039;UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15&#039;.&lt;br /&gt;
You are being dropped to a recovery shell&lt;br /&gt;
    Type &#039;exit&#039; to try and continue booting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスが &amp;quot;writeback&amp;quot; モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。&amp;quot;writeback&amp;quot; モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ブートを続行するには、次のいずれかを試してください:&lt;br /&gt;
&lt;br /&gt;
* バッキングデバイスとキャッシュデバイスの両方を登録する&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sda3 &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
&lt;br /&gt;
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &amp;quot;sh: echo: write error: Invalid argument&amp;quot; というエラーは、デバイスが既に登録されているか bcache のバッキングデバイスあるいはキャッシュデバイスとして認識されていないことを意味します。起動時に udev ルールを使っているのであれば、bcache のスーパーブロックが見つかった場合にのみデバイスの登録を試行すべきです。&lt;br /&gt;
* これはインストールのステップ7で udev の 69-bcache.rules を使用し、不正なスーパーブロックが原因で blkid とbcache-probe が &amp;quot;一致しない&amp;quot; 場合にも発生する可能性があります。考えられる説明/解決策については、[https://bcache.evilpiepirate.org/#index6h1 bcache の wiki] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュデバイスをバッキングデバイスに再アタッチする:&lt;br /&gt;
&lt;br /&gt;
キャッシュデバイスが登録されている場合、キャッシュの UUID を含むフォルダが {{ic|/sys/fs/bcache}} に存在する必要があります。以下の例ではその UUID を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# ls /sys/fs/bcache/|&lt;br /&gt;
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15     register     register_quiet&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 &amp;gt; /sys/block/sda/sda3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスが現れたら、exit と入力して起動を続行します。再度行う必要はありません。これが続く場合、bcache メーリングリストで質問してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sh: echo: write error: Invalid argument}} というエラーは、デバイスが既に登録されていることを意味します。{{ic|sh: echo: write error: No such file or directory}} というエラーは UUID が有効なキャッシュではないことを意味します(正しく入力したことを確認してください)。}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。&amp;quot;dirty_data&amp;quot; などの統計情報を確認して、失われるデータの量を把握することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/dirty_data|&lt;br /&gt;
-3.9M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/running|&lt;br /&gt;
0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sda/sda3/bcache/running&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスが現れます。exit と入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcache を再度実行することをお勧めします。{{ic|/dev/bcache0}} への fsck も賢明でしょう。[https://docs.kernel.org/admin-guide/bcache.html bcache ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記の2つのオプションのいずれかが機能しなかった場合にのみ、キャッシュを無効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
=== /sys/fs/bcache/ が存在しない ===&lt;br /&gt;
&lt;br /&gt;
起動したカーネルで bcache が有効になっていないか、bcache [[カーネルモジュール#手動でモジュールを扱う|モジュールがロードされていません]]&lt;br /&gt;
&lt;br /&gt;
=== write error: Invalid argument when trying to attach a device due to mismatched block parameter ===&lt;br /&gt;
&lt;br /&gt;
デバイスをアタッチしようとしたときに {{ic|bash: echo: write error: Invalid argument}} となり、実際のエラーは [[dmesg]] で表示されます:&lt;br /&gt;
&lt;br /&gt;
 bcache: bch_cached_dev_attach() Couldn&#039;t attach sdc: block size less than set&#039;s block size&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|--block 4k}} パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== Device or resource busy ===&lt;br /&gt;
デバイスが bcache バッキングデバイスとして使用されている場合、フォーマットもパーティション化もできません:&lt;br /&gt;
 # make-bcache -C /dev/sdb1&lt;br /&gt;
 Can&#039;t open dev /dev/sdb1: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 This disk is currently in use - repartitioning is probably a bad idea.&lt;br /&gt;
 It&#039;s recommended to umount all file systems, and swapoff all swap&lt;br /&gt;
 partitions on this disk.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
&lt;br /&gt;
これを修正するには、まずこのコマンドを実行して、ディスクが実際に bcache バッキングデバイスとして使用されていることを確認します:&lt;br /&gt;
 # bcache-super-show /dev/sdb1&lt;br /&gt;
 sb.magic		ok&lt;br /&gt;
 sb.first_sector		8 [match]&lt;br /&gt;
 sb.csum			A3D2B8610F6C5E35 [match]&lt;br /&gt;
 sb.version		1 [backing device]&lt;br /&gt;
 &lt;br /&gt;
 dev.label		(empty)&lt;br /&gt;
 dev.uuid		5a868788-65a2-4564-b4b7-c1817d0b6080&lt;br /&gt;
 dev.sectors_per_block	1&lt;br /&gt;
 dev.sectors_per_bucket	1024&lt;br /&gt;
 dev.data.first_sector	16&lt;br /&gt;
 dev.data.cache_mode	1 [writeback]&lt;br /&gt;
 dev.data.cache_state	2 [dirty]&lt;br /&gt;
 &lt;br /&gt;
 cset.uuid		42dcb651-6b53-4b65-bc49-9b1ca0acc5b1&lt;br /&gt;
&lt;br /&gt;
次に、バッキングデバイスを停止します。これにより、対応する /dev/bcache デバイスも削除されます。&lt;br /&gt;
 # echo 1 &amp;gt; /sys/class/block/sdb1/bcache/stop&lt;br /&gt;
&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3171.263577] bcache: bcache_device_free() bcache0 stopped&lt;br /&gt;
これで、デバイスをパーティション化できるようになりました:&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
fdisk が終了すると、カーネルはドライブを再度スキャンし、それが bcache バッキングデバイスであることを認識し、そのドライブをバッキングデバイスとして使用します。&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3190.643270]  sdb: sdb1&lt;br /&gt;
 [ 3190.833029] bcache: register_bdev() registered backing device sdb1&lt;br /&gt;
これにより、/sys/class/block/sdb1/ の下にディレクトリ bcache が作成されます&lt;br /&gt;
 # ls /sys/class/block/sdb1/&lt;br /&gt;
 alignment_offset  bcache  dev  discard_alignment  holders  inflight  partition	power  ro  size  start	stat  subsystem  uevent&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://bcache.evilpiepirate.org Bcache ホームページ]&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/bcache.html Bcache マニュアル]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bcache|2025-03-09|823595}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39955</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39955"/>
		<updated>2025-03-09T14:03:50Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/828279 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると: &lt;br /&gt;
&lt;br /&gt;
:QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&lt;br /&gt;
:マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザーモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザーモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pre-made virtual machine images ===&lt;br /&gt;
&lt;br /&gt;
In many cases, it&#039;s not necessary or desired to manually install your own operating system, for instance in a cloud environment. Luckily, many pre-made images are available for download from different providers.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;Arch Linux&#039;&#039;&#039;, we have the [https://gitlab.archlinux.org/archlinux/arch-boxes arch-boxes] project with [https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages weekly image releases].&lt;br /&gt;
&lt;br /&gt;
There are similar images available for [https://fedoraproject.org/cloud/download Fedora] and [https://cloud.debian.org/images/cloud Debian].&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] できます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間通信 ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトの SLIRP ベースのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]。IPv6 を完全にサポートする必要がある場合は、[[#passt]] をチェックしてください}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数を繰り返します。例えば VNC のポートはこうなります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== Accessing SSH via vsock ===&lt;br /&gt;
&lt;br /&gt;
A secure and convenient way to connect to the VM is to use SSH over {{man|7|vsock}}. Your VM needs to be systemd-based for this to work out of the box.&lt;br /&gt;
&lt;br /&gt;
First, launch QEMU with a special device:&lt;br /&gt;
&lt;br /&gt;
 -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=555&lt;br /&gt;
&lt;br /&gt;
The {{ic|cid}} needs to be picked by the user to be a valid 32-bit number (see {{man|7|vsock}}). When systemd detects the VM has been launched with a {{ic|vhost-vsock}} device, it will automatically launch an SSH server via {{ic|systemd-ssh-generator}}.&lt;br /&gt;
&lt;br /&gt;
You can then connect to the VM like this:&lt;br /&gt;
&lt;br /&gt;
 $ ssh user@vsock/555&lt;br /&gt;
&lt;br /&gt;
This works because of {{ic|/etc/ssh/ssh_config.d/20-systemd-ssh-proxy.conf}} which tells your SSH client to use {{ic|systemd-ssh-proxy}} to allow SSH to use vsock.&lt;br /&gt;
&lt;br /&gt;
Furthermore, using {{man|7|systemd.system-credentials}} we can inject an authorized keys file for the {{ic|root}} user which is very convenient in case we&#039;re trying to run a downloaded image. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 -smbios type=11,value=io.systemd.credential.binary:ssh.authorized_keys.root=c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU9sVFE4ejlpeWxoMTMreCtFVFJ1R1JEaHpIVVRnaCt2ekJLOGY3TEl5eTQ=&lt;br /&gt;
&lt;br /&gt;
The public key line has be provided as a base64-encoded string. This can be done like so:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlTQ8z9iylh13+x+ETRuGRDhzHUTgh+vzBK8f7LIyy4&amp;quot; | base64&lt;br /&gt;
&lt;br /&gt;
The same mechanism via {{ic|1=-smbios type=11,value=io.systemd...}} can be used to inject a variety of other magical variables that will get acted on by systemd. See also [https://systemd.io/CREDENTIALS/ systemd docs: System and Service Credentials].&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== 9pfs VirtFS によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|9pfs is fairly slow as it wasn&#039;t specifically developed for high-performance local VM usage. Users are advised to look into [[#Host file sharing with virtiofsd]] instead which was specifically made with VM performance in mind.}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtiofsd}} は {{Pkg|virtiofsd}} パッケージに含まれています。これは、ホストとゲストの間でファイルを簡単に共有するための最新の高性能な方法です。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンラインドキュメント]または {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd は、root または通常のユーザーとして実行するか選択できます。&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as a regular user ====&lt;br /&gt;
&lt;br /&gt;
First, make sure that there&#039;s a {{man|5|subuid}} and {{man|5|subgid}} configuration entry for the user that will execute virtiofsd. See also the [[Podman#Set subuid and subgid|relevant section in the Podman article]].&lt;br /&gt;
&lt;br /&gt;
Then, start virtiofsd:&lt;br /&gt;
&lt;br /&gt;
 $ unshare -r --map-auto -- /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share --sandbox chroot&lt;br /&gt;
&lt;br /&gt;
* {{ic|unshare -r}} causes the command after it to be launched in a new user namespace with the current user getting mapped to root in the new command. This is important because virtiofsd expects to be running as root from its point of view.&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} is a socket file&lt;br /&gt;
* {{ic|/tmp/vm-share}} is a shared directory between the host and the guest virtual machine&lt;br /&gt;
&lt;br /&gt;
==== Running virtiofsd as root ====&lt;br /&gt;
&lt;br /&gt;
Add the user that runs QEMU to the {{ic|kvm}} [[user group]], because it needs to access the virtiofsd socket. You might have to logout for change to take effect.&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/tmp/vm-share.sock --shared-dir /tmp/vm-share&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-share}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ {{ic|kvm}} にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm /tmp/vm-share.sock; chmod g+rxw /tmp/vm-share.sock&lt;br /&gt;
&lt;br /&gt;
==== Launching QEMU ==== &lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/tmp/vm-share.sock&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要がある&lt;br /&gt;
* {{ic|/tmp/vm-share.sock}} は先に開始されたソケットファイルを指す&lt;br /&gt;
* {{ic|myfs}} は後でゲストで共有をマウントするために使用する識別子&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Linux guest ====&lt;br /&gt;
ゲストに root でログインしたら、最新のディストリビューションで共有をマウントするだけです:&lt;br /&gt;
&lt;br /&gt;
 # mount -t virtiofs myfs /mnt&lt;br /&gt;
&lt;br /&gt;
このディレクトリはホストとゲストで共有されるはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using the share in a Windows guest ====&lt;br /&gt;
[[#virtiofsd によるホストファイル共有|関連する Windows section]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーを使う]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
==== SLIRP ====&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵された [https://wiki.qemu.org/Documentation/Networking#User_Networking_(SLIRP) SLIRP ベースの] ユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザーモードネットワークをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== passt ====&lt;br /&gt;
&lt;br /&gt;
Users can choose to use [https://passt.top/passt/about/ passt-based] user-mode networking. passt has several advantages over SLIRP such as better performance, full IPv6 support (including ICMPv6), better security, and more control.&lt;br /&gt;
&lt;br /&gt;
To get started, install {{Pkg|passt}}. There are two ways to launch it: Either via socket-based communication or via shared vhost-user. The latter method has better performance.&lt;br /&gt;
&lt;br /&gt;
For the socket-based way, first launch {{ic|passt}}:&lt;br /&gt;
&lt;br /&gt;
 $ passt -f&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net-pci,netdev=s&lt;br /&gt;
 -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket&lt;br /&gt;
&lt;br /&gt;
For the vhost-user way, launch {{ic|passt}} with {{ic|--vhost-user}}&lt;br /&gt;
&lt;br /&gt;
 $ passt -f --vhost-user&lt;br /&gt;
&lt;br /&gt;
Then, for your QEMU command, add these parameters:&lt;br /&gt;
&lt;br /&gt;
 -m 4G&lt;br /&gt;
 -chardev socket,id=chr0,path=/tmp/passt_1.socket&lt;br /&gt;
 -netdev vhost-user,id=netdev0,chardev=chr0&lt;br /&gt;
 -device virtio-net,netdev=netdev0&lt;br /&gt;
 -object memory-backend-memfd,id=memfd0,share=on,size=4G&lt;br /&gt;
 -numa node,memdev=memfd0&lt;br /&gt;
&lt;br /&gt;
Notice the memory sizes of {{ic|-m 4G}} and {{ic|1=size=4G}} have to match exactly.&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーを使う ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
==== メモリバルーニング ====&lt;br /&gt;
&lt;br /&gt;
In order to allow the guest&#039;s memory foot print to shrink as seen from the host, it needs to report to the host which pages are not needed anymore by the guest. The kernel has an API for that called [https://docs.kernel.org/mm/free_page_reporting.html Free Page Reporting] and since it&#039;s built-in it&#039;s as easy as starting QEMU like this:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... -device virtio-balloon,free-page-reporting=on&lt;br /&gt;
&lt;br /&gt;
After this, you should see the guest memory increasing and then shrinking again after running workloads in it.&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーの使い方は少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
==== Using a virtiofsd share ====&lt;br /&gt;
&lt;br /&gt;
このセクションに進む前に、まず [[QEMU#virtiofsd によるホストファイル共有|virtiofsd によるホストファイル共有の設定]] を済ませてください。&lt;br /&gt;
&lt;br /&gt;
まず、[https://virtio-fs.gitlab.io/howto-windows.html 上流の手順] に従ってください。設定が完了すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 11 ゲストシステムは適切に設定されています:&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーを使う]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行することでメモリを回収できることがあります。 [[#メモリバルーニング]] を参照してください。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-03-09|828279}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39615</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39615"/>
		<updated>2025-02-02T10:53:00Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 参照 */ 翻訳ステータスを更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2025-02-02|825755}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39614</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39614"/>
		<updated>2025-02-02T10:51:38Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 参照 */ en:Special:PermanentLink/825755 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virtualization/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39613</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39613"/>
		<updated>2025-02-02T10:50:20Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Windows 7 ゲストの音質が酷い */ en:Special:PermanentLink/825755 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs]{{Dead link|2025|01|22|status=SSL error}} の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39612</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39612"/>
		<updated>2025-02-02T10:49:24Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* x86_64 から arm/arm64 環境への chrooting */ en:Special:PermanentLink/825755 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/04/25/creating-arm-chroot-in-arch/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39611</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39611"/>
		<updated>2025-02-02T10:47:58Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* QEMU の内蔵 SMB サーバ */ en:Special:PermanentLink/825755 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、NetBIOSプロトコルが有効になっているかどうかと NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39610</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39610"/>
		<updated>2025-02-02T10:46:37Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Enabling Secure Boot */ en:Special:PermanentLink/825755 をインポート&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Enabling Secure Boot ====&lt;br /&gt;
&lt;br /&gt;
The first requirement to enabling Secure Boot in a VM is to use the {{ic|q35}} machine type, and replace {{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} with {{ic|/usr/share/edk2/x64/OVMF_CODE.&#039;&#039;&#039;secboot&#039;&#039;&#039;.4m.fd}}.&lt;br /&gt;
&lt;br /&gt;
The second requirement is to use an OVMF_VARS file that has Secure Boot keys installed, which is not provided by the upstream project[https://github.com/tianocore/edk2/blob/47e28a6d449c51f10d89e961c3c1afcfdfd99668/OvmfPkg/README#L137].&lt;br /&gt;
&lt;br /&gt;
Unlike some other distributions, Arch does not yet provide (as of 2024-12-06) its own {{ic|/usr/share/edk2/x64/OVMF_VARS.secboot.4m.fd}} file containing pre-enrolled keys: see {{Issue|archlinux/packaging/packages/edk2|1}}.&lt;br /&gt;
&lt;br /&gt;
A simple workaround is to use Fedora&#039;s version, as mentioned in [https://bbs.archlinux.org/viewtopic.php?pid=2212590#p2212590 this forum post]:&lt;br /&gt;
&lt;br /&gt;
* download a recent &#039;&#039;&#039;noarch&#039;&#039;&#039; RPM of [https://packages.fedoraproject.org/pkgs/edk2/edk2-ovmf/ Fedora&#039;s edk2-ovmf] for x86_64 from the [https://koji.fedoraproject.org/koji/packageinfo?packageID=16183 builds list] ([https://kojipkgs.fedoraproject.org//packages/edk2/20241117/5.fc42/noarch/edk2-ovmf-20241117-5.fc42.noarch.rpm direct link] to latest F42 version as of 2024-12-06)&lt;br /&gt;
* extract the archive and convert the desired file to a suitable format[https://www.spinics.net/linux/fedora/fedora-users/msg521045.html]:&lt;br /&gt;
:{{bc|$ qemu-img convert -O raw -f qcow2 edk2-ovmf-*.noarch/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2 OVMF_VARS_4M.secboot.fd}}&lt;br /&gt;
&lt;br /&gt;
Now you can make copies of the created {{ic|OVMF_VARS_4M.secboot.fd}} and use them for your Secure Boot-enabled VMs.&lt;br /&gt;
&lt;br /&gt;
See also [[KVM#Secure Boot]] for how to manually enroll keys into a firmware image.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=A more cumbersome, although slightly more &amp;quot;upstream-aligned&amp;quot; workaround to manually enroll keys in a vanilla OVMF_VARS file is described in [https://bbs.archlinux.org/viewtopic.php?pid=2212587#p2212587 this forum post].}}&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39609</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39609"/>
		<updated>2025-02-02T10:44:04Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* UEFI モードでの起動 */ en:Special:PermanentLink/825755 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.seabios.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:K9i&amp;diff=39504</id>
		<title>利用者:K9i</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:K9i&amp;diff=39504"/>
		<updated>2025-01-14T11:28:00Z</updated>

		<summary type="html">&lt;p&gt;K9i: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2014年にRaspberry Pi 1 Model Bを買って Arch Linux ARM をインストールしてから使い始めました。&lt;br /&gt;
&lt;br /&gt;
普段使いの Linux は Arch Linux です。&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39326</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39326"/>
		<updated>2024-12-01T11:38:28Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* グラフィカルビュー */ Graphics の訳をグラフィックスに統一&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックスオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39325</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39325"/>
		<updated>2024-12-01T11:29:50Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/821644 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックスカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックスカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックスカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://www.qemu.org/docs/master/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static-binfmt}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://www.qemu.org/documentation/ QEMU documentation]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-12-01|821644}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39113</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39113"/>
		<updated>2024-10-03T13:15:16Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 参照 */ 翻訳ステータスを更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-10-03|817352}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39112</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39112"/>
		<updated>2024-10-03T13:14:08Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* QEMU バリアンツ */ en:Special:PermanentLink/817352 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://gitlab.winehq.org/wine/wine/-/wikis/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-09-23|816990}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39073</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=39073"/>
		<updated>2024-09-23T11:15:18Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/816990 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86_64 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は {{Pkg|virtiofsd}} パッケージに含まれています。利用可能なオプションの全リストは [https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md?ref_type=heads#user-content-usage オンライン] ドキュメントまたは {{ic|/usr/share/doc/virtiofsd/README.md}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq -C /dev/null --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照できる状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|1=-smp cores=x,threads=y,sockets=1,maxcpus=z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]{{Dead link|2024|07|30|status=404}}&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-09-23|816990}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=38688</id>
		<title>Bcache</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=38688"/>
		<updated>2024-08-25T05:59:35Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/814839 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[en:Bcache]]&lt;br /&gt;
[[zh-hans:Bcache]]&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Some first-person comments, see [[Help:Style]].}} --&amp;gt;&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bcachefs}}&lt;br /&gt;
{{Related|LVM}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://bcache.evilpiepirate.org/ Bcache] (block cache) を使うことで SSD を他のブロックデバイス (通常は回転する HDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は [https://bcache.evilpiepirate.org/ bcache のホームページ] を読んでください。必ず [https://docs.kernel.org/admin-guide/bcache.html bcache のマニュアル] を読んで参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Bcache の代わりになるものは [[LVM#Cache|LVM cache]]です。}}&lt;br /&gt;
&lt;br /&gt;
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、[https://github.com/g2p/blocks blocks to-bcache] でインプレース変換を実行できます。&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Linux 3.18 の on-disk フォーマットの後方互換性のない変更は誤りであると報告されています。bcache on-disk フォーマットの変更は 3.19 の時点ではまだアップストリームに反映されていません. その後、Linux はバージョン 6.2 になっていますが、関連する文章はいつ壊れた変更がなされたか正確に反映していますか? その言及はまだ必要ですか?}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 最初に重要なデータをバックアップしてください。&lt;br /&gt;
* bcache-dev ブランチは活発に開発されています。on-disk フォーマットは 3.18 で変更されており、以前のフォーマットとの後方互換性はありません [https://lore.kernel.org/linux-bcache/20150104004621.GA4460@kmo-pixel/]。注: これは bcache-dev をコンパイルするユーザにのみ該当します。上流の Linux カーネルに組み込まれているバージョンには影響はありません [https://lore.kernel.org/linux-bcache/CACHGV4KV-y3JD=i6jy_0jaapZYBKxOYr1+PL=0dsAe+M83Y_Ew@mail.gmail.com/]。&lt;br /&gt;
* Bcache と [[btrfs]] を組み合わせるとファイルシステムが壊れてしまう可能性があります。詳しくは [https://www.hdevalence.ca/blog/2013-09-21-notes-on-my-archlinux-install こちらの記事] を参照してください。Btrfs wiki によればカーネル 3.19 以上では修正されているとのことです [https://btrfs.wiki.kernel.org/index.php/Gotchas#Historical_references]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 既存のシステムに bcached btrfs ファイルシステムをセットアップ ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|make-bcache は既存のドライブやパーティションをインポート &#039;&#039;&#039;しません&#039;&#039;&#039; - 再フォーマットします。}}&lt;br /&gt;
&lt;br /&gt;
=== 準備 ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|bcache-tools}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
キャッシュとバッキングデータを保持するために fdisk を使用して SSD とハードドライブに適切なパーティションを作成します。&lt;br /&gt;
{{Tip| 1台のドライブに多数のパーティションを作成することが可能です。これにより、コミットする前に複雑なセットアップをテストできます。ドライブに障害が発生すると全てのデータが失われることに注意してください。好ましくないアクセスパターンためドライブのパフォーマンスも低下します。}}&lt;br /&gt;
&lt;br /&gt;
=== 状況: 1台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 1台のドライブが故障すると、すべてのデータが失われます。&lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | btrfs /mnt   |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | /dev/Bcache0 |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Cache        |&lt;br /&gt;
 | /dev/sdk1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Data         |&lt;br /&gt;
 | /dev/sdv1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります&lt;br /&gt;
&lt;br /&gt;
 # make-bcache --block 4k --bucket 2M -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|--block 4k}} オプションを省略する必要があるかもしれません。 [https://unix.stackexchange.com/questions/359508/cannot-attach-cache-device-to-backing-device キャッシュデバイスをバッキングデバイスにアタッチできない]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid に置き換えてください。Udev ルールが再起動時にこの処理を行うため一回だけ実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、&#039;bcache&#039; フックをリスト内の block と filesystems の間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に &#039;bcache&#039; を追加する必要があります。それから [[initramfs を再生成する]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 状況: 4台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +-----------------------------------------------------------+&lt;br /&gt;
 |                         btrfs /mnt                        |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 |                           Cache                           |  &lt;br /&gt;
 |                         /dev/sdk1                         |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid と置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 &lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 3台のハードドライブと3台の読み書きキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの SSD に障害が発生した場合のデータ損失を回避するために、各 HDD にはそれぞれの SSD が必要です。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------+&lt;br /&gt;
 |                  btrfs /mnt                |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Cache        | Cache        | Cache        |  &lt;br /&gt;
 | /dev/sdk1    | /dev/sdl1    | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
 # echo &#039;&#039;&#039;cset.uuid&#039;&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. ライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。&lt;br /&gt;
* Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。&lt;br /&gt;
* すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。&lt;br /&gt;
* 自己責任で btrfs とライトバックモードの bcache を使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache1/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache2/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 5台のハードドライブと3台のキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの各キャッシュデバイスは、SSD に障害が発生した場合のデータ損失を回避するために、単一のバッキングドライブをキャッシュするためにのみ使用する必要があります。ライトスルーとライトアラウンドの SSD は共有できます。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------------------------------------+&lt;br /&gt;
 |                                btrfs /mnt                                |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | WriteB Cache |     Writethrough or writearound Cache      | WriteB Cache |  &lt;br /&gt;
 | /dev/sdk1    |                 /dev/sdl1                  | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    | /dev/sdz1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
 # make-bcache -B /dev/sdz1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache4/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. 非共有キャッシュでライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache4/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== Bcache の管理 ===&lt;br /&gt;
&lt;br /&gt;
1. 正しくセットアップされていることを確認する&lt;br /&gt;
&lt;br /&gt;
 # cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
出力は以下のどれかになります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|no cache}}: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: 全て問題ないことを意味します。キャッシュはクリーンです。&lt;br /&gt;
* &#039;&#039;&#039;dirty&#039;&#039;&#039;: 全て正しくセットアップされており &#039;&#039;writeback&#039;&#039; が有効になっていてキャッシュがダーティであることを意味します。&lt;br /&gt;
* &#039;&#039;&#039;inconsistent&#039;&#039;&#039;: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。&lt;br /&gt;
&lt;br /&gt;
2. 使用しているキャッシュモードを確認する&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/bcache0/bcache/cache_mode|&lt;br /&gt;
[writethrough] writeback writearound none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の例では &#039;&#039;writethrough&#039;&#039; モードが有効になっています。&lt;br /&gt;
&lt;br /&gt;
3. bcached デバイスについての情報を表示する:&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスを停止する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/stop&lt;br /&gt;
&lt;br /&gt;
5. キャッシュデバイスを登録解除する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/detach&lt;br /&gt;
&lt;br /&gt;
6. キャッシュデバイスを安全に除去する&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;cache-set-uuid&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/detach&lt;br /&gt;
&lt;br /&gt;
7. アタッチされたデバイスを開放する&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/bcache/&#039;&#039;cache-set-uuid&#039;&#039;/stop&lt;br /&gt;
&lt;br /&gt;
== bcache デバイスへのインストール ==&lt;br /&gt;
&lt;br /&gt;
1. インストールディスク (2013.08.01 以上) を起動。&lt;br /&gt;
&lt;br /&gt;
2. [[AUR]] から {{AUR|bcache-tools}} パッケージをインストール。&lt;br /&gt;
&lt;br /&gt;
3. HDD をパーティション分割します&lt;br /&gt;
&lt;br /&gt;
{{Note|Grub2 が以下に述べるように bcache をサポートしていないことは事実かもしれませんが、UEFI は完全にサポートしています。つまり、Linux カーネルがブートデバイスを適切に処理するために必要なモジュールがカーネルにコンパイルされているか initramfs に含まれており、これらのファイルを initramfs に含めることができれば、下記で説明する個別のブートパーティションを省略して FAT EFI システムパーティションを使えます。詳細は [[GRUB]] および/または [[UEFI]] を参照してください。}}&lt;br /&gt;
grub は bcache を扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、[[EFI System Partition]] (ESP) も必要です。例:&lt;br /&gt;
&lt;br /&gt;
    1            2048         2099199   1024.0 MiB  EF00  EFI system partition&lt;br /&gt;
    2         2099200         4196351   1024.0 MiB  EA00  arch_boot&lt;br /&gt;
    3         4196352       499998719   236.4 GiB   8300  bcache_backing&lt;br /&gt;
&lt;br /&gt;
{{Note|この例には、swapfile/partition はありません。キャッシュ上のスワップパーティションには、手順7の LVM を使用してください。キャッシュ外のスワップパーティションには、ここでスワップパーティションを作成してください。}}&lt;br /&gt;
&lt;br /&gt;
4. HDD を bcache のバッキングデバイスとして設定します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sda3&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ブートディスクの準備では、決定した結果の影響を知ることが重要です。選択したブートローダー/マネージャーのドキュメントを何度も確認し、bcache との関連を真剣に検討してください。&lt;br /&gt;
* 以下のように、関連付けられているすべてのディスクが一度にパーティション化された場合、bcache は自動的に &amp;quot;-B バッキングストア&amp;quot; を &amp;quot;-C ssd キャッシュ&amp;quot; にアタッチし、手順5は不要となります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスができました。&lt;br /&gt;
&lt;br /&gt;
5. SSD を設定します&lt;br /&gt;
&lt;br /&gt;
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdb&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register &lt;br /&gt;
 # echo &#039;&#039;UUID__from_previous_command&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{Note|UUID を忘れた場合、キャッシュデバイスの登録後に {{ic|ls /sys/fs/bcache/}} で見つけることができます。}}&lt;br /&gt;
&lt;br /&gt;
6. bcache デバイスをフォーマットします。{{ic|/dev/bcache0}} デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください ({{ic|/}}, {{ic|/home}}, {{ic|/var}} などを分けたい場合など):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
 # mount /dev/bcache0 /mnt/&lt;br /&gt;
 # btrfs subvolume create /mnt/root&lt;br /&gt;
 # btrfs subvolume create /mnt/home&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
&lt;br /&gt;
cryptsetupなどを使用したい場合は、LUKS をセットアップすることもできます。例えば、&#039;cryptdevice&#039; カーネルオプション内のbcacheデバイスの参照は正常に機能します。&lt;br /&gt;
&lt;br /&gt;
7. インストール用のマウントポイントを準備します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/sda2&lt;br /&gt;
 # mkfs.fat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
ここで {{Pkg|arch-install-scripts}} パッケージをインストールします。そうしたら:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/&lt;br /&gt;
 # mount --mkdir /dev/bcache0 -o subvol=home,compress=lzo /mnt/home&lt;br /&gt;
 # mount --mkdir /dev/sda2 /mnt/boot&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/efi&lt;br /&gt;
&lt;br /&gt;
8. 下記以外は通常通り [[インストールガイド]] に従ってシステムをインストールします:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集して {{ic|mkinitcpio -p linux}} を実行する前に:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|bcache-tools}} パッケージを[[インストール]]する。&lt;br /&gt;
* {{ic|/etc/mkinitcpio.conf}} を編集し:&lt;br /&gt;
** &amp;quot;bcache&amp;quot; モジュールを追加する&lt;br /&gt;
** &amp;quot;bcache&amp;quot; フックを block と filesystem フックの間に追加する&lt;br /&gt;
&lt;br /&gt;
{{Note| リブート後に何らかの理由でインストールメディアからバッキングデバイスを開きたい場合、手動で登録する必要があります。bcache モジュールがロードされていることを確認してから、関連するデバイスを /sys/bcache/register に echo します。[[dmesg]] を使って機能したかどうか確認すべきです。}}&lt;br /&gt;
&lt;br /&gt;
== インストールディスクからのアクセス ==&lt;br /&gt;
&lt;br /&gt;
ここではインストールディスクが起動する前に存在していた bcache パーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AUR から {{AUR|bcache-tools}} をインストールします。そして、モジュールをカーネルに追加します:&lt;br /&gt;
&lt;br /&gt;
 # modprobe bcache&lt;br /&gt;
&lt;br /&gt;
デバイスは {{ic|/dev/bcache*}} にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache*}} が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。&lt;br /&gt;
&lt;br /&gt;
インターネットを設定し {{AUR|bcache-tools}} をインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sdX &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdY &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # ...&lt;br /&gt;
&lt;br /&gt;
最後に必要なスレーブデバイスが登録された直後に bcache デバイスが現れます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;writethrough&#039;&#039; バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/bcache/running&lt;br /&gt;
&lt;br /&gt;
Bcache は実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで &amp;quot;機能&amp;quot; しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|discard}} オプションを有効にしないでください! 回復不能な破損を引き起こす可能性があります。 [https://bugzilla.kernel.org/show_bug.cgi?id=197377][https://lore.kernel.org/linux-bcache/CAJ+L6qeOVY_KofXsZKihHrbHaYzQTKYAh0Shm7Givj+f8=PiBg@mail.gmail.com/]}}&lt;br /&gt;
&lt;br /&gt;
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。{{ic|/sys}} のファイルに書き込むことで設定します。詳しくは [https://docs.kernel.org/admin-guide/bcache.html bcache ユーザードキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
キャッシュモードを切り替えるには {{ic|/sys/block/bcache[0-9]/bcache/cache_mode}} に {{ic|writethrough}}, {{ic|writeback}}, {{ic|writearound}} または {{ic|none}} のどれかを書き込みます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys}} の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには {{ic|/etc/tmpfile.d}} に .conf ファイルを作成してください。永続的な方法で、{{ic|bcache0}} のシーケンシャルカットオフを 1 MB にしてキャッシュモードを writeback に設定するには、{{ic|/etc/tmpfiles.d/my-bcache.conf}} ファイルを以下の内容で作成します:&lt;br /&gt;
&lt;br /&gt;
 w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M&lt;br /&gt;
 w /sys/block/bcache0/bcache/cache_mode        - - - - writeback&lt;br /&gt;
&lt;br /&gt;
=== Situation: Prevent all write access to a HDD ===&lt;br /&gt;
{{Warning| &lt;br /&gt;
* When the hard drive or the SSD fails, all data is lost.&lt;br /&gt;
* Consider using BTRFS RAID to prevent data loss when a SSD / HDD fails.&lt;br /&gt;
}}&lt;br /&gt;
In this situation the goal is to keep he HDD idle as long as possible. This is achieved by absorbing all writes with the SSD. The hard drive is only activated when the SSD is full, or when something is read that&#039;s not on the SSD.&lt;br /&gt;
&lt;br /&gt;
Enable the writeback cache mode:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
Let bcache completely sync with the hard drive.&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let sequential IO bypass the cache:&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/sequential_cutoff &lt;br /&gt;
&lt;br /&gt;
Let bcache wait a week after the previous sync is done: &lt;br /&gt;
&lt;br /&gt;
 # echo $((7*24*60*60)) &amp;gt; /sys/block/bcache0/bcache/writeback_delay&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let bcache go around the cache when there&#039;s read / write congestion&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_read_threshold_us&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_write_threshold_us&lt;br /&gt;
 &lt;br /&gt;
Put the HDD to sleep after 20 minutes:&lt;br /&gt;
 # hdparm -S 240  /dev/$(cat /sys/block/bcache0/bcache/backing_dev_name)&lt;br /&gt;
 /dev/sdh1:&lt;br /&gt;
 setting standby to 240 (20 minutes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 First use lsblk to get the device names of the HDD and SSD. In this example /dev/sdh1 is the HDD, /dev/sdc1 is the SSD:&lt;br /&gt;
&lt;br /&gt;
 # lsblk -M -s&lt;br /&gt;
 bcache0   254:0    0 931.5G  0 disk &lt;br /&gt;
    ├─sdc1      8:33   0 111.8G  0 part &lt;br /&gt;
    │ └─sdc     8:32   0 111.8G  0 disk &lt;br /&gt;
    └─sdh1      8:113  0 931.5G  0 part &lt;br /&gt;
      └─sdh     8:112  0 931.5G  0 disk&lt;br /&gt;
&lt;br /&gt;
Now Dstat can be used to monitor disk access to the members of the bcache set.&lt;br /&gt;
&lt;br /&gt;
 $ dstat -D sdc1,sdh1&lt;br /&gt;
&lt;br /&gt;
== 高度な操作 ==&lt;br /&gt;
&lt;br /&gt;
=== バッキングデバイスのリサイズ ===&lt;br /&gt;
&lt;br /&gt;
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは [https://lore.kernel.org/linux-bcache/CAH+dOxJv-ajvLfbUSo8dqG0a8_grNBhfxJ1EbmSrYZz0YXJM2w@mail.gmail.com/T/ メーリングリスト] で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。&lt;br /&gt;
&lt;br /&gt;
==== 拡大例 ====&lt;br /&gt;
&lt;br /&gt;
以下の例では、ファイルシステムを 4GB 拡大します。&lt;br /&gt;
&lt;br /&gt;
1.ライブ CD/USB ドライブ（bcacheを有効にする必要はありません）で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが 4G 大きい状態で再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfs の場合、こうします&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
==== 縮小例 ====&lt;br /&gt;
&lt;br /&gt;
この例では、ファイルシステムを 4GB 縮小します。&lt;br /&gt;
&lt;br /&gt;
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。&lt;br /&gt;
&lt;br /&gt;
 # echo writethrough &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 $ watch cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
状態が &amp;quot;clean&amp;quot; になるまで待ってください。しばらく時間がかかります。&lt;br /&gt;
&lt;br /&gt;
===== キャッシュをバッキングデバイスに強制的にフラッシュする =====&lt;br /&gt;
&lt;br /&gt;
こうすることを推奨します&lt;br /&gt;
&lt;br /&gt;
  # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。&lt;br /&gt;
&lt;br /&gt;
その後値を元に戻します&lt;br /&gt;
&lt;br /&gt;
 # echo 10 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrsfs filesystem resize -5G /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合は &#039;&#039;resize2fs&#039;&#039; を使用しますが、パーティションがアンマウントされている場合に限ります&lt;br /&gt;
&lt;br /&gt;
{{hc|$ df -h /home|&lt;br /&gt;
/dev/bcache0    290G   20G   270G   1% /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # umount /home&lt;br /&gt;
 # resize2fs /dev/bcache0 283G&lt;br /&gt;
&lt;br /&gt;
3. LiveCD/USB ドライブ(bcache をサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを 4G 小さくして再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|非常に注意深くすれば、手順2でファイルシステムを正確なサイズまで縮小することで手順4を回避できます。ただし、多くのパーティションツールは希望どおりに動作せず、代わりにセクター境界の終端まで要求されたパーティションの開始点/終了点を調整します。これを事前に計算するのは難しいかもしれません}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動時に /dev/bcache デバイスが存在しない ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーが busy box シェルに表示される場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
ERROR: Unable to find root device &#039;UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15&#039;.&lt;br /&gt;
You are being dropped to a recovery shell&lt;br /&gt;
    Type &#039;exit&#039; to try and continue booting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスが &amp;quot;writeback&amp;quot; モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。&amp;quot;writeback&amp;quot; モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ブートを続行するには、次のいずれかを試してください:&lt;br /&gt;
&lt;br /&gt;
* バッキングデバイスとキャッシュデバイスの両方を登録する&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sda3 &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
&lt;br /&gt;
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &amp;quot;sh: echo: write error: Invalid argument&amp;quot; というエラーは、デバイスが既に登録されているか bcache のバッキングデバイスあるいはキャッシュデバイスとして認識されていないことを意味します。起動時に udev ルールを使っているのであれば、bcache のスーパーブロックが見つかった場合にのみデバイスの登録を試行すべきです。&lt;br /&gt;
* これはインストールのステップ7で udev の 69-bcache.rules を使用し、不正なスーパーブロックが原因で blkid とbcache-probe が &amp;quot;一致しない&amp;quot; 場合にも発生する可能性があります。考えられる説明/解決策については、[https://bcache.evilpiepirate.org/#index6h1 bcache の wiki] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュデバイスをバッキングデバイスに再アタッチする:&lt;br /&gt;
&lt;br /&gt;
キャッシュデバイスが登録されている場合、キャッシュの UUID を含むフォルダが {{ic|/sys/fs/bcache}} に存在する必要があります。以下の例ではその UUID を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# ls /sys/fs/bcache/|&lt;br /&gt;
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15     register     register_quiet&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 &amp;gt; /sys/block/sda/sda3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスが現れたら、exit と入力して起動を続行します。再度行う必要はありません。これが続く場合、bcache メーリングリストで質問してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sh: echo: write error: Invalid argument}} というエラーは、デバイスが既に登録されていることを意味します。{{ic|sh: echo: write error: No such file or directory}} というエラーは UUID が有効なキャッシュではないことを意味します(正しく入力したことを確認してください)。}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。&amp;quot;dirty_data&amp;quot; などの統計情報を確認して、失われるデータの量を把握することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/dirty_data|&lt;br /&gt;
-3.9M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/running|&lt;br /&gt;
0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sda/sda3/bcache/running&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスが現れます。exit と入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcache を再度実行することをお勧めします。{{ic|/dev/bcache0}} への fsck も賢明でしょう。[https://docs.kernel.org/admin-guide/bcache.html bcache ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記の2つのオプションのいずれかが機能しなかった場合にのみ、キャッシュを無効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
=== /sys/fs/bcache/ が存在しない ===&lt;br /&gt;
&lt;br /&gt;
起動したカーネルで bcache が有効になっていないか、bcache [[カーネルモジュール#手動でモジュールを扱う|モジュールがロードされていません]]&lt;br /&gt;
&lt;br /&gt;
=== write error: Invalid argument when trying to attach a device due to mismatched block parameter ===&lt;br /&gt;
&lt;br /&gt;
デバイスをアタッチしようとしたときに {{ic|bash: echo: write error: Invalid argument}} となり、実際のエラーは [[dmesg]] で表示されます:&lt;br /&gt;
&lt;br /&gt;
 bcache: bch_cached_dev_attach() Couldn&#039;t attach sdc: block size less than set&#039;s block size&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|--block 4k}} パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== Device or resource busy ===&lt;br /&gt;
デバイスが bcache バッキングデバイスとして使用されている場合、フォーマットもパーティション化もできません:&lt;br /&gt;
 # make-bcache -C /dev/sdb1&lt;br /&gt;
 Can&#039;t open dev /dev/sdb1: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 This disk is currently in use - repartitioning is probably a bad idea.&lt;br /&gt;
 It&#039;s recommended to umount all file systems, and swapoff all swap&lt;br /&gt;
 partitions on this disk.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
&lt;br /&gt;
これを修正するには、まずこのコマンドを実行して、ディスクが実際に bcache バッキングデバイスとして使用されていることを確認します:&lt;br /&gt;
 # bcache-super-show /dev/sdb1&lt;br /&gt;
 sb.magic		ok&lt;br /&gt;
 sb.first_sector		8 [match]&lt;br /&gt;
 sb.csum			A3D2B8610F6C5E35 [match]&lt;br /&gt;
 sb.version		1 [backing device]&lt;br /&gt;
 &lt;br /&gt;
 dev.label		(empty)&lt;br /&gt;
 dev.uuid		5a868788-65a2-4564-b4b7-c1817d0b6080&lt;br /&gt;
 dev.sectors_per_block	1&lt;br /&gt;
 dev.sectors_per_bucket	1024&lt;br /&gt;
 dev.data.first_sector	16&lt;br /&gt;
 dev.data.cache_mode	1 [writeback]&lt;br /&gt;
 dev.data.cache_state	2 [dirty]&lt;br /&gt;
 &lt;br /&gt;
 cset.uuid		42dcb651-6b53-4b65-bc49-9b1ca0acc5b1&lt;br /&gt;
&lt;br /&gt;
次に、バッキングデバイスを停止します。これにより、対応する /dev/bcache デバイスも削除されます。&lt;br /&gt;
 # echo 1 &amp;gt; /sys/class/block/sdb1/bcache/stop&lt;br /&gt;
&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3171.263577] bcache: bcache_device_free() bcache0 stopped&lt;br /&gt;
これで、デバイスをパーティション化できるようになりました:&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
fdisk が終了すると、カーネルはドライブを再度スキャンし、それが bcache バッキングデバイスであることを認識し、そのドライブをバッキングデバイスとして使用します。&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3190.643270]  sdb: sdb1&lt;br /&gt;
 [ 3190.833029] bcache: register_bdev() registered backing device sdb1&lt;br /&gt;
これにより、/sys/class/block/sdb1/ の下にディレクトリ bcache が作成されます&lt;br /&gt;
 # ls /sys/class/block/sdb1/&lt;br /&gt;
 alignment_offset  bcache  dev  discard_alignment  holders  inflight  partition	power  ro  size  start	stat  subsystem  uevent&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://bcache.evilpiepirate.org Bcache ホームページ]&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/bcache.html Bcache マニュアル]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bcache|2024-07-25|814839}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37553</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37553"/>
		<updated>2024-05-27T13:17:16Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 参照 */ 翻訳ステータスを更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-05-27|804107}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37552</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37552"/>
		<updated>2024-05-27T13:15:11Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* qemu-vdagent */ en:Special:PermanentLink/804107 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[Arch build system|ソースから]] QEMU をコンパイルする必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37551</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37551"/>
		<updated>2024-05-27T13:13:50Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* ブリッジを手動で作成する */ en:Special:PermanentLink/804107 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [https://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効にすることをお勧めします:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37550</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37550"/>
		<updated>2024-05-27T13:12:18Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* リニア RAID を使う */ en:Special:PermanentLink/804107 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[https://github.com/torvalds/linux/commit/849d18e27be9a1253f2318cb4549cc857219d991 CONFIG_MD_LINEAR Removal] Linear RAID has been deprecated since 2021 and removed on Kernel Version 6.8.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37549</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37549"/>
		<updated>2024-05-27T13:11:32Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* device-mapper を使う */ en:Special:PermanentLink/804107 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VMDK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37548</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=37548"/>
		<updated>2024-05-27T13:10:00Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* UEFI モードでの起動 */ en:Special:PermanentLink/804107 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、q35 マシンタイプを使用し、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36345</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36345"/>
		<updated>2024-02-23T02:55:57Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 参照 */ TranslationStatus 更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-23|800965}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36344</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36344"/>
		<updated>2024-02-23T02:54:55Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* インストール */ en:Special:PermanentLink/800965 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}} とデフォルトで x86 エミュレーションのみの {{Pkg|qemu-desktop}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-19|800002}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=36298</id>
		<title>Bcache</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=36298"/>
		<updated>2024-02-18T15:49:00Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/790715 をインポート&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[en:Bcache]]&lt;br /&gt;
[[zh-hans:Bcache]]&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Some first-person comments, see [[Help:Style]].}} --&amp;gt;&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bcachefs}}&lt;br /&gt;
{{Related|LVM2}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://bcache.evilpiepirate.org/ Bcache] (block cache) を使うことで SSD を他のブロックデバイス (通常は回転する HDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は [https://bcache.evilpiepirate.org/ bcache のホームページ] を読んでください。必ず [https://docs.kernel.org/admin-guide/bcache.html bcache のマニュアル] を読んで参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Bcache の代わりになるものは [[LVM#Cache|LVM cache]]です。}}&lt;br /&gt;
&lt;br /&gt;
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、[https://github.com/g2p/blocks blocks to-bcache] でインプレース変換を実行できます。&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Linux 3.18 の on-disk フォーマットの後方互換性のない変更は誤りであると報告されています。bcache on-disk フォーマットの変更は 3.19 の時点ではまだアップストリームに反映されていません. その後、Linux はバージョン 6.2 になっていますが、関連する文章はいつ壊れた変更がなされたか正確に反映していますか? その言及はまだ必要ですか?}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 最初に重要なデータをバックアップしてください。&lt;br /&gt;
* bcache-dev ブランチは活発に開発されています。on-disk フォーマットは 3.18 で変更されており、以前のフォーマットとの後方互換性はありません [https://lore.kernel.org/linux-bcache/20150104004621.GA4460@kmo-pixel/]。注: これは bcache-dev をコンパイルするユーザにのみ該当します。上流の Linux カーネルに組み込まれているバージョンには影響はありません [https://lore.kernel.org/linux-bcache/CACHGV4KV-y3JD=i6jy_0jaapZYBKxOYr1+PL=0dsAe+M83Y_Ew@mail.gmail.com/]。&lt;br /&gt;
* Bcache と [[btrfs]] を組み合わせるとファイルシステムが壊れてしまう可能性があります。詳しくは [https://www.hdevalence.ca/blog/2013-09-21-notes-on-my-archlinux-install こちらの記事] を参照してください。Btrfs wiki によればカーネル 3.19 以上では修正されているとのことです [https://btrfs.wiki.kernel.org/index.php/Gotchas#Historical_references]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 既存のシステムに bcached btrfs ファイルシステムをセットアップ ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|make-bcache は既存のドライブやパーティションをインポート &#039;&#039;&#039;しません&#039;&#039;&#039; - 再フォーマットします。}}&lt;br /&gt;
&lt;br /&gt;
=== 準備 ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|bcache-tools}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
キャッシュとバッキングデータを保持するために fdisk を使用して SSD とハードドライブに適切なパーティションを作成します。&lt;br /&gt;
{{Tip| 1台のドライブに多数のパーティションを作成することが可能です。これにより、コミットする前に複雑なセットアップをテストできます。ドライブに障害が発生すると全てのデータが失われることに注意してください。好ましくないアクセスパターンためドライブのパフォーマンスも低下します。}}&lt;br /&gt;
&lt;br /&gt;
=== 状況: 1台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 1台のドライブが故障すると、すべてのデータが失われます。&lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | btrfs /mnt   |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | /dev/Bcache0 |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Cache        |&lt;br /&gt;
 | /dev/sdk1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Data         |&lt;br /&gt;
 | /dev/sdv1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります&lt;br /&gt;
&lt;br /&gt;
 # make-bcache --block 4k --bucket 2M -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|--block 4k}} オプションを省略する必要があるかもしれません。 [https://unix.stackexchange.com/questions/359508/cannot-attach-cache-device-to-backing-device キャッシュデバイスをバッキングデバイスにアタッチできない]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid に置き換えてください。Udev ルールが再起動時にこの処理を行うため一回だけ実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、&#039;bcache&#039; フックをリスト内の block と filesystems の間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に &#039;bcache&#039; を追加する必要があります。それから [[initramfs を再生成する]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 状況: 4台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +-----------------------------------------------------------+&lt;br /&gt;
 |                         btrfs /mnt                        |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 |                           Cache                           |  &lt;br /&gt;
 |                         /dev/sdk1                         |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid と置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 &lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 3台のハードドライブと3台の読み書きキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの SSD に障害が発生した場合のデータ損失を回避するために、各 HDD にはそれぞれの SSD が必要です。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------+&lt;br /&gt;
 |                  btrfs /mnt                |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Cache        | Cache        | Cache        |  &lt;br /&gt;
 | /dev/sdk1    | /dev/sdl1    | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
 # echo &#039;&#039;&#039;cset.uuid&#039;&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. ライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。&lt;br /&gt;
* Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。&lt;br /&gt;
* すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。&lt;br /&gt;
* 自己責任で btrfs とライトバックモードの bcache を使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache1/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache2/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 5台のハードドライブと3台のキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの各キャッシュデバイスは、SSD に障害が発生した場合のデータ損失を回避するために、単一のバッキングドライブをキャッシュするためにのみ使用する必要があります。ライトスルーとライトアラウンドの SSD は共有できます。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------------------------------------+&lt;br /&gt;
 |                                btrfs /mnt                                |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | WriteB Cache |     Writethrough or writearound Cache      | WriteB Cache |  &lt;br /&gt;
 | /dev/sdk1    |                 /dev/sdl1                  | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    | /dev/sdz1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
 # make-bcache -B /dev/sdz1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache4/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. 非共有キャッシュでライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache4/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== Bcache の管理 ===&lt;br /&gt;
&lt;br /&gt;
1. 正しくセットアップされていることを確認する&lt;br /&gt;
&lt;br /&gt;
 # cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
出力は以下のどれかになります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|no cache}}: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: 全て問題ないことを意味します。キャッシュはクリーンです。&lt;br /&gt;
* &#039;&#039;&#039;dirty&#039;&#039;&#039;: 全て正しくセットアップされており &#039;&#039;writeback&#039;&#039; が有効になっていてキャッシュがダーティであることを意味します。&lt;br /&gt;
* &#039;&#039;&#039;inconsistent&#039;&#039;&#039;: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。&lt;br /&gt;
&lt;br /&gt;
2. 使用しているキャッシュモードを確認する&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/bcache0/bcache/cache_mode|&lt;br /&gt;
[writethrough] writeback writearound none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の例では &#039;&#039;writethrough&#039;&#039; モードが有効になっています。&lt;br /&gt;
&lt;br /&gt;
3. bcached デバイスについての情報を表示する:&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスを停止する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/stop&lt;br /&gt;
&lt;br /&gt;
5. キャッシュデバイスを登録解除する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/detach&lt;br /&gt;
&lt;br /&gt;
6. キャッシュデバイスを安全に除去する&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;cache-set-uuid&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/detach&lt;br /&gt;
&lt;br /&gt;
7. アタッチされたデバイスを開放する&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/bcache/&#039;&#039;cache-set-uuid&#039;&#039;/stop&lt;br /&gt;
&lt;br /&gt;
== bcache デバイスへのインストール ==&lt;br /&gt;
&lt;br /&gt;
1. インストールディスク (2013.08.01 以上) を起動。&lt;br /&gt;
&lt;br /&gt;
2. [[AUR]] から {{AUR|bcache-tools}} パッケージをインストール。&lt;br /&gt;
&lt;br /&gt;
3. HDD をパーティション分割します&lt;br /&gt;
&lt;br /&gt;
{{Note|Grub2 が以下に述べるように bcache をサポートしていないことは事実かもしれませんが、UEFI は完全にサポートしています。つまり、Linux カーネルがブートデバイスを適切に処理するために必要なモジュールがカーネルにコンパイルされているか initramfs に含まれており、これらのファイルを initramfs に含めることができれば、下記で説明する個別のブートパーティションを省略して FAT EFI システムパーティションを使えます。詳細は [[GRUB]] および/または [[UEFI]] を参照してください。}}&lt;br /&gt;
grub は bcache を扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、[[EFI System Partition]] (ESP) も必要です。例:&lt;br /&gt;
      1            2048           22527   10.0 MiB    EF00  EFI System&lt;br /&gt;
      2           22528          432127   200.0 MiB   8300  arch_boot&lt;br /&gt;
      3          432128       625142414   297.9 GiB   8300  bcache_backing&lt;br /&gt;
&lt;br /&gt;
{{Note|この例には、swapfile/partition はありません。キャッシュ上のスワップパーティションには、手順7の LVM を使用してください。キャッシュ外のスワップパーティションには、ここでスワップパーティションを作成してください。}}&lt;br /&gt;
&lt;br /&gt;
4. HDD を bcache のバッキングデバイスとして設定します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sda3&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ブートディスクの準備では、決定した結果の影響を知ることが重要です。選択したブートローダー/マネージャーのドキュメントを何度も確認し、bcache との関連を真剣に検討してください。&lt;br /&gt;
* 以下のように、関連付けられているすべてのディスクが一度にパーティション化された場合、bcache は自動的に &amp;quot;-B バッキングストア&amp;quot; を &amp;quot;-C ssd キャッシュ&amp;quot; にアタッチし、手順5は不要となります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスができました。&lt;br /&gt;
&lt;br /&gt;
5. SSD を設定します&lt;br /&gt;
&lt;br /&gt;
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdb&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register &lt;br /&gt;
 # echo &#039;&#039;UUID__from_previous_command&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{Note|UUID を忘れた場合、キャッシュデバイスの登録後に {{ic|ls /sys/fs/bcache/}} で見つけることができます。}}&lt;br /&gt;
&lt;br /&gt;
6. bcache デバイスをフォーマットします。{{ic|/dev/bcache0}} デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください ({{ic|/}}, {{ic|/home}}, {{ic|/var}} などを分けたい場合など):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
 # mount /dev/bcache0 /mnt/&lt;br /&gt;
 # btrfs subvolume create /mnt/root&lt;br /&gt;
 # btrfs subvolume create /mnt/home&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
&lt;br /&gt;
cryptsetupなどを使用したい場合は、LUKS をセットアップすることもできます。例えば、&#039;cryptdevice&#039; カーネルオプション内のbcacheデバイスの参照は正常に機能します。&lt;br /&gt;
&lt;br /&gt;
7. インストール用のマウントポイントを準備します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/sda2&lt;br /&gt;
 # mkfs.msdos /dev/sda1 (ESP が 500MB 以上の場合、代わりに mkfs.vfat を使って FAT32 パーティションを作成してください)&lt;br /&gt;
&lt;br /&gt;
ここで {{Pkg|arch-install-scripts}} パッケージをインストールします。そうしたら:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/&lt;br /&gt;
 # mount --mkdir /dev/bcache0 -o subvol=home,compress=lzo /mnt/home&lt;br /&gt;
 # mount --mkdir /dev/sda2 /mnt/boot&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/efi&lt;br /&gt;
&lt;br /&gt;
8. 下記以外は通常通り [[インストールガイド]] に従ってシステムをインストールします:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集して {{ic|mkinitcpio -p linux}} を実行する前に:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|bcache-tools}} パッケージを[[インストール]]する。&lt;br /&gt;
* {{ic|/etc/mkinitcpio.conf}} を編集し:&lt;br /&gt;
** &amp;quot;bcache&amp;quot; モジュールを追加する&lt;br /&gt;
** &amp;quot;bcache&amp;quot; フックを block と filesystem フックの間に追加する&lt;br /&gt;
&lt;br /&gt;
{{Note| リブート後に何らかの理由でインストールメディアからバッキングデバイスを開きたい場合、手動で登録する必要があります。bcache モジュールがロードされていることを確認してから、関連するデバイスを /sys/bcache/register に echo します。[[dmesg]] を使って機能したかどうか確認すべきです。}}&lt;br /&gt;
&lt;br /&gt;
== インストールディスクからのアクセス ==&lt;br /&gt;
&lt;br /&gt;
ここではインストールディスクが起動する前に存在していた bcache パーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AUR から {{AUR|bcache-tools}} をインストールします。そして、モジュールをカーネルに追加します:&lt;br /&gt;
&lt;br /&gt;
 # modprobe bcache&lt;br /&gt;
&lt;br /&gt;
デバイスは {{ic|/dev/bcache*}} にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache*}} が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。&lt;br /&gt;
&lt;br /&gt;
インターネットを設定し {{AUR|bcache-tools}} をインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sdX &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdY &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # ...&lt;br /&gt;
&lt;br /&gt;
最後に必要なスレーブデバイスが登録された直後に bcache デバイスが現れます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;writethrough&#039;&#039; バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/bcache/running&lt;br /&gt;
&lt;br /&gt;
Bcache は実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで &amp;quot;機能&amp;quot; しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|discard}} オプションを有効にしないでください! 回復不能な破損を引き起こす可能性があります。 [https://bugzilla.kernel.org/show_bug.cgi?id=197377][https://lore.kernel.org/linux-bcache/CAJ+L6qeOVY_KofXsZKihHrbHaYzQTKYAh0Shm7Givj+f8=PiBg@mail.gmail.com/]}}&lt;br /&gt;
&lt;br /&gt;
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。{{ic|/sys}} のファイルに書き込むことで設定します。詳しくは [https://docs.kernel.org/admin-guide/bcache.html bcache ユーザードキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
キャッシュモードを切り替えるには {{ic|/sys/block/bcache[0-9]/bcache/cache_mode}} に {{ic|writethrough}}, {{ic|writeback}}, {{ic|writearound}} または {{ic|none}} のどれかを書き込みます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys}} の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには {{ic|/etc/tmpfile.d}} に .conf ファイルを作成してください。永続的な方法で、{{ic|bcache0}} のシーケンシャルカットオフを 1 MB にしてキャッシュモードを writeback に設定するには、{{ic|/etc/tmpfiles.d/my-bcache.conf}} ファイルを以下の内容で作成します:&lt;br /&gt;
&lt;br /&gt;
 w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M&lt;br /&gt;
 w /sys/block/bcache0/bcache/cache_mode        - - - - writeback&lt;br /&gt;
&lt;br /&gt;
=== Situation: Prevent all write access to a HDD ===&lt;br /&gt;
{{Warning| &lt;br /&gt;
* When the hard drive or the SSD fails, all data is lost.&lt;br /&gt;
* Consider using BTRFS RAID to prevent data loss when a SSD / HDD fails.&lt;br /&gt;
}}&lt;br /&gt;
In this situation the goal is to keep he HDD idle as long as possible. This is achieved by absorbing all writes with the SSD. The hard drive is only activated when the SSD is full, or when something is read that&#039;s not on the SSD.&lt;br /&gt;
&lt;br /&gt;
Enable the writeback cache mode:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
Let bcache completely sync with the hard drive.&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let sequential IO bypass the cache:&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/block/bcache0/bcache/sequential_cutoff &lt;br /&gt;
&lt;br /&gt;
Let bcache wait a week after the previous sync is done: &lt;br /&gt;
&lt;br /&gt;
 # echo $((7*24*60*60)) &amp;gt; /sys/block/bcache0/bcache/writeback_delay&lt;br /&gt;
&lt;br /&gt;
Don&#039;t let bcache go around the cache when there&#039;s read / write congestion&lt;br /&gt;
&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_read_threshold_us&lt;br /&gt;
 # echo 0 &amp;gt; /sys/fs/bcache/&amp;lt;cache set&amp;gt;/congested_write_threshold_us&lt;br /&gt;
 &lt;br /&gt;
Put the HDD to sleep after 20 minutes:&lt;br /&gt;
 # hdparm -S 240  /dev/$(cat /sys/block/bcache0/bcache/backing_dev_name)&lt;br /&gt;
 /dev/sdh1:&lt;br /&gt;
 setting standby to 240 (20 minutes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 First use lsblk to get the device names of the HDD and SSD. In this example /dev/sdh1 is the HDD, /dev/sdc1 is the SSD:&lt;br /&gt;
&lt;br /&gt;
 # lsblk -M -s&lt;br /&gt;
 bcache0   254:0    0 931.5G  0 disk &lt;br /&gt;
    ├─sdc1      8:33   0 111.8G  0 part &lt;br /&gt;
    │ └─sdc     8:32   0 111.8G  0 disk &lt;br /&gt;
    └─sdh1      8:113  0 931.5G  0 part &lt;br /&gt;
      └─sdh     8:112  0 931.5G  0 disk&lt;br /&gt;
&lt;br /&gt;
Now Dstat can be used to monitor disk access to the members of the bcache set.&lt;br /&gt;
&lt;br /&gt;
 $ dstat -D sdc1,sdh1&lt;br /&gt;
&lt;br /&gt;
== 高度な操作 ==&lt;br /&gt;
&lt;br /&gt;
=== バッキングデバイスのリサイズ ===&lt;br /&gt;
&lt;br /&gt;
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは [https://lore.kernel.org/linux-bcache/CAH+dOxJv-ajvLfbUSo8dqG0a8_grNBhfxJ1EbmSrYZz0YXJM2w@mail.gmail.com/T/ メーリングリスト] で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。&lt;br /&gt;
&lt;br /&gt;
==== 拡大例 ====&lt;br /&gt;
&lt;br /&gt;
以下の例では、ファイルシステムを 4GB 拡大します。&lt;br /&gt;
&lt;br /&gt;
1.ライブ CD/USB ドライブ（bcacheを有効にする必要はありません）で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが 4G 大きい状態で再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfs の場合、こうします&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
==== 縮小例 ====&lt;br /&gt;
&lt;br /&gt;
この例では、ファイルシステムを 4GB 縮小します。&lt;br /&gt;
&lt;br /&gt;
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。&lt;br /&gt;
&lt;br /&gt;
 # echo writethrough &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 $ watch cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
状態が &amp;quot;clean&amp;quot; になるまで待ってください。しばらく時間がかかります。&lt;br /&gt;
&lt;br /&gt;
===== キャッシュをバッキングデバイスに強制的にフラッシュする =====&lt;br /&gt;
&lt;br /&gt;
こうすることを推奨します&lt;br /&gt;
&lt;br /&gt;
  # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。&lt;br /&gt;
&lt;br /&gt;
その後値を元に戻します&lt;br /&gt;
&lt;br /&gt;
 # echo 10 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrsfs filesystem resize -5G /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合は &#039;&#039;resize2fs&#039;&#039; を使用しますが、パーティションがアンマウントされている場合に限ります&lt;br /&gt;
&lt;br /&gt;
{{hc|$ df -h /home|&lt;br /&gt;
/dev/bcache0    290G   20G   270G   1% /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # umount /home&lt;br /&gt;
 # resize2fs /dev/bcache0 283G&lt;br /&gt;
&lt;br /&gt;
3. LiveCD/USB ドライブ(bcache をサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを 4G 小さくして再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|非常に注意深くすれば、手順2でファイルシステムを正確なサイズまで縮小することで手順4を回避できます。ただし、多くのパーティションツールは希望どおりに動作せず、代わりにセクター境界の終端まで要求されたパーティションの開始点/終了点を調整します。これを事前に計算するのは難しいかもしれません}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動時に /dev/bcache デバイスが存在しない ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーが busy box シェルに表示される場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
ERROR: Unable to find root device &#039;UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15&#039;.&lt;br /&gt;
You are being dropped to a recovery shell&lt;br /&gt;
    Type &#039;exit&#039; to try and continue booting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスが &amp;quot;writeback&amp;quot; モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。&amp;quot;writeback&amp;quot; モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ブートを続行するには、次のいずれかを試してください:&lt;br /&gt;
&lt;br /&gt;
* バッキングデバイスとキャッシュデバイスの両方を登録する&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sda3 &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
&lt;br /&gt;
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &amp;quot;sh: echo: write error: Invalid argument&amp;quot; というエラーは、デバイスが既に登録されているか bcache のバッキングデバイスあるいはキャッシュデバイスとして認識されていないことを意味します。起動時に udev ルールを使っているのであれば、bcache のスーパーブロックが見つかった場合にのみデバイスの登録を試行すべきです。&lt;br /&gt;
* これはインストールのステップ7で udev の 69-bcache.rules を使用し、不正なスーパーブロックが原因で blkid とbcache-probe が &amp;quot;一致しない&amp;quot; 場合にも発生する可能性があります。考えられる説明/解決策については、[https://bcache.evilpiepirate.org/#index6h1 bcache の wiki] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュデバイスをバッキングデバイスに再アタッチする:&lt;br /&gt;
&lt;br /&gt;
キャッシュデバイスが登録されている場合、キャッシュの UUID を含むフォルダが {{ic|/sys/fs/bcache}} に存在する必要があります。以下の例ではその UUID を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# ls /sys/fs/bcache/|&lt;br /&gt;
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15     register     register_quiet&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 &amp;gt; /sys/block/sda/sda3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスが現れたら、exit と入力して起動を続行します。再度行う必要はありません。これが続く場合、bcache メーリングリストで質問してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sh: echo: write error: Invalid argument}} というエラーは、デバイスが既に登録されていることを意味します。{{ic|sh: echo: write error: No such file or directory}} というエラーは UUID が有効なキャッシュではないことを意味します(正しく入力したことを確認してください)。}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。&amp;quot;dirty_data&amp;quot; などの統計情報を確認して、失われるデータの量を把握することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/dirty_data|&lt;br /&gt;
-3.9M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/running|&lt;br /&gt;
0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sda/sda3/bcache/running&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスが現れます。exit と入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcache を再度実行することをお勧めします。{{ic|/dev/bcache0}} への fsck も賢明でしょう。[https://docs.kernel.org/admin-guide/bcache.html bcache ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記の2つのオプションのいずれかが機能しなかった場合にのみ、キャッシュを無効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
=== /sys/fs/bcache/ が存在しない ===&lt;br /&gt;
&lt;br /&gt;
起動したカーネルで bcache が有効になっていないか、bcache [[カーネルモジュール#手動でモジュールを扱う|モジュールがロードされていません]]&lt;br /&gt;
&lt;br /&gt;
=== write error: Invalid argument when trying to attach a device due to mismatched block parameter ===&lt;br /&gt;
&lt;br /&gt;
デバイスをアタッチしようとしたときに {{ic|bash: echo: write error: Invalid argument}} となり、実際のエラーは [[dmesg]] で表示されます:&lt;br /&gt;
&lt;br /&gt;
 bcache: bch_cached_dev_attach() Couldn&#039;t attach sdc: block size less than set&#039;s block size&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|--block 4k}} パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== Device or resource busy ===&lt;br /&gt;
デバイスが bcache バッキングデバイスとして使用されている場合、フォーマットもパーティション化もできません:&lt;br /&gt;
 # make-bcache -C /dev/sdb1&lt;br /&gt;
 Can&#039;t open dev /dev/sdb1: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 This disk is currently in use - repartitioning is probably a bad idea.&lt;br /&gt;
 It&#039;s recommended to umount all file systems, and swapoff all swap&lt;br /&gt;
 partitions on this disk.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
&lt;br /&gt;
これを修正するには、まずこのコマンドを実行して、ディスクが実際に bcache バッキングデバイスとして使用されていることを確認します:&lt;br /&gt;
 # bcache-super-show /dev/sdb1&lt;br /&gt;
 sb.magic		ok&lt;br /&gt;
 sb.first_sector		8 [match]&lt;br /&gt;
 sb.csum			A3D2B8610F6C5E35 [match]&lt;br /&gt;
 sb.version		1 [backing device]&lt;br /&gt;
 &lt;br /&gt;
 dev.label		(empty)&lt;br /&gt;
 dev.uuid		5a868788-65a2-4564-b4b7-c1817d0b6080&lt;br /&gt;
 dev.sectors_per_block	1&lt;br /&gt;
 dev.sectors_per_bucket	1024&lt;br /&gt;
 dev.data.first_sector	16&lt;br /&gt;
 dev.data.cache_mode	1 [writeback]&lt;br /&gt;
 dev.data.cache_state	2 [dirty]&lt;br /&gt;
 &lt;br /&gt;
 cset.uuid		42dcb651-6b53-4b65-bc49-9b1ca0acc5b1&lt;br /&gt;
&lt;br /&gt;
次に、バッキングデバイスを停止します。これにより、対応する /dev/bcache デバイスも削除されます。&lt;br /&gt;
 # echo 1 &amp;gt; /sys/class/block/sdb1/bcache/stop&lt;br /&gt;
&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3171.263577] bcache: bcache_device_free() bcache0 stopped&lt;br /&gt;
これで、デバイスをパーティション化できるようになりました:&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
fdisk が終了すると、カーネルはドライブを再度スキャンし、それが bcache バッキングデバイスであることを認識し、そのドライブをバッキングデバイスとして使用します。&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3190.643270]  sdb: sdb1&lt;br /&gt;
 [ 3190.833029] bcache: register_bdev() registered backing device sdb1&lt;br /&gt;
これにより、/sys/class/block/sdb1/ の下にディレクトリ bcache が作成されます&lt;br /&gt;
 # ls /sys/class/block/sdb1/&lt;br /&gt;
 alignment_offset  bcache  dev  discard_alignment  holders  inflight  partition	power  ro  size  start	stat  subsystem  uevent&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://bcache.evilpiepirate.org Bcache ホームページ]&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/bcache.html Bcache マニュアル]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bcache|2024-02-19|790715}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36297</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=36297"/>
		<updated>2024-02-18T15:38:10Z</updated>

		<summary type="html">&lt;p&gt;K9i: en:Special:PermanentLink/800002 に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト (CoW)|Copy-on-Write]] を無効にするべきでしょう。イメージ作成時に qcow2 形式へ nocow オプションを指定できます: {{bc|1=$ qemu-img create -f qcow2 &#039;&#039;image_file&#039;&#039; -o nocow=on 4G}}}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2/x64/OVMF.4m.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を最初のリードオンリーの pflash ドライブとして使用します。{{ic|/usr/share/edk2/x64/OVMF_VARS.4m.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.4m.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2/x64/OVMF_CODE.4m.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11 (TPM 2.0 が必要)などの一部のシステムで必要とされる [[Trusted Platform Module]] をエミュレートできます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。&lt;br /&gt;
* {{ic|1=restrict=y}} を追加することで、ユーザモードネットワーキングをホストと外部から隔離できます。例: {{ic|1=-net user,restrict=y}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-display curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。成熟しており、現在はオプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinux ゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
* {{AUR|x-resize}}: GNOME 以外のデスクトップ環境では、SPICE クライアントウィンドウのサイズが変更されても自動的には反応しません。このパッケージは、[[udev]] ルールと [[xrandr]] を使用して、すべての X11 ベースのデスクトップ環境とウィンドウマネージャに自動リサイズ機能を実装します。&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
そして、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです:&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== VirtIO sound ====&lt;br /&gt;
&lt;br /&gt;
VirtIO sound も QEMU 8.2.0 より利用できます。使い方は:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-sound-pci,audiodev=my_audiodev -audiodev alsa,id=my_audiodev&lt;br /&gt;
&lt;br /&gt;
詳細な情報が [https://qemu-project.gitlab.io/qemu/system/devices/virtio-snd.html QEMU documentation] にあります。&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。詳細とフラグについては [https://www.qemu.org/docs/master/system/i386/hyperv.html QEMU documentation] を参照。&lt;br /&gt;
* {{ic|-smp cores{{=}}x,threads{{=}}y,sockets{{=}}1,maxcpus{{=}}z}} オプションを使用して、複数のコアをゲストに割り当てることができます。threads パラメータは、[https://www.tomshardware.com/reviews/simultaneous-multithreading-definition,5762.html SMT コア] の割り当てに使用されます。QEMU、ハイパーバイザ、およびホストシステムがスムーズに動作できるように物理コアを残しておくことは、非常に有益です。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。この実装は、スパイス-vdagent ゲストサービスとのインタフェースとなり、ゲストとホストがクリップボードを共有できるようにします。&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 公式パッケージで機能を有効にするための機能リクエスト {{Bug|79716}} が提出されました。&lt;br /&gt;
* qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。アップストリームでこの問題を解決するための修正が提案されています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
これらの引数は、[[Libvirt#QEMU command line arguments|libvirt 形式]] に変換した場合にも有効です。&lt;br /&gt;
&lt;br /&gt;
{{Note|spicevmc chardev はゲストの spice-vdagent サービスを自動的に開始しますが、qemu-vdagent chardev は開始しない場合があります。}}&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、spice-vdagent.service [[ユーザーユニット]] を手動で [[開始]] できます。Windows ゲストでは、spice-agent のスタートアップタイプを自動に設定します。&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
==== sudo in chroot ====&lt;br /&gt;
&lt;br /&gt;
chroot に [[sudo]] をインストールし、使用する際に次ののエラーが発生した場合:&lt;br /&gt;
&lt;br /&gt;
 sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the &#039;nosuid&#039; option set or an NFS file system without root privileges?&lt;br /&gt;
&lt;br /&gt;
binfmt フラグを変更する必要がある場合があります。例えば、{{ic|aarch64}} の場合:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/&lt;br /&gt;
 # vi /etc/binfmt.d/qemu-aarch64-static.conf&lt;br /&gt;
&lt;br /&gt;
このファイルの最後に {{ic|C}} を追加:&lt;br /&gt;
&lt;br /&gt;
 :qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:FPC&lt;br /&gt;
&lt;br /&gt;
次に、{{ic|systemd-binfmt.service}} を [[再起動]] し、変更が有効になっていることを確認します(flags 行の {{ic|C}} に注意してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /proc/sys/fs/binfmt_misc/qemu-aarch64|&lt;br /&gt;
enabled&lt;br /&gt;
interpreter /usr/bin/qemu-aarch64-static&lt;br /&gt;
flags: POCF&lt;br /&gt;
offset 0&lt;br /&gt;
magic 7f454c460201010000000000000000000200b700&lt;br /&gt;
mask ffffffffffffff00fffffffffffffffffeffffff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳細については、[https://docs.kernel.org/admin-guide/binfmt-misc.html カーネル binfmt ドキュメント] の &amp;quot;flags&amp;quot; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|OVMF_CODE.secboot.4m.fd}} と {{ic|OVMF_CODE.secboot.fd}} ファイルは [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2024-02-19|800002}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=34039</id>
		<title>Bcache</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=34039"/>
		<updated>2023-09-18T12:25:58Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Device or resource busy */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[en:Bcache]]&lt;br /&gt;
[[zh-hans:Bcache]]&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Some first-person comments, see [[Help:Style]].}} --&amp;gt;&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bcachefs}}&lt;br /&gt;
{{Related|Flashcache}}&lt;br /&gt;
{{Related|LVM2}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://bcache.evilpiepirate.org/ Bcache] (block cache) を使うことで SSD を他のブロックデバイス (通常は回転する HDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は [https://bcache.evilpiepirate.org/ bcache のホームページ] を読んでください。必ず [https://docs.kernel.org/admin-guide/bcache.html bcache のマニュアル] を読んで参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Bcache の代わりになるものは [[LVM#Cache|LVM cache]]です。}}&lt;br /&gt;
&lt;br /&gt;
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、[https://github.com/g2p/blocks blocks to-bcache] でインプレース変換を実行できます。&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Linux 3.18 の on-disk フォーマットの後方互換性のない変更は誤りであると報告されています。bcache on-disk フォーマットの変更は 3.19 の時点ではまだアップストリームに反映されていません. その後、Linux はバージョン 6.2 になっていますが、関連する文章はいつ壊れた変更がなされたか正確に反映していますか? その言及はまだ必要ですか?}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 最初に重要なデータをバックアップしてください。&lt;br /&gt;
* bcache-dev ブランチは活発に開発されています。on-disk フォーマットは 3.18 で変更されており、以前のフォーマットとの後方互換性はありません [https://lore.kernel.org/linux-bcache/20150104004621.GA4460@kmo-pixel/]。注: これは bcache-dev をコンパイルするユーザにのみ該当します。上流の Linux カーネルに組み込まれているバージョンには影響はありません [https://lore.kernel.org/linux-bcache/CACHGV4KV-y3JD=i6jy_0jaapZYBKxOYr1+PL=0dsAe+M83Y_Ew@mail.gmail.com/]。&lt;br /&gt;
* Bcache と [[btrfs]] を組み合わせるとファイルシステムが壊れてしまう可能性があります。詳しくは [https://www.hdevalence.ca/blog/2013-09-21-notes-on-my-archlinux-install こちらの記事] を参照してください。Btrfs wiki によればカーネル 3.19 以上では修正されているとのことです [https://btrfs.wiki.kernel.org/index.php/Gotchas#Historical_references]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 既存のシステムに bcached btrfs ファイルシステムをセットアップ ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|make-bcache は既存のドライブやパーティションをインポート &#039;&#039;&#039;しません&#039;&#039;&#039; - 再フォーマットします。}}&lt;br /&gt;
&lt;br /&gt;
=== 準備 ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|bcache-tools}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
キャッシュとバッキングデータを保持するために fdisk を使用して SSD とハードドライブに適切なパーティションを作成します。&lt;br /&gt;
{{Tip| 1台のドライブに多数のパーティションを作成することが可能です。これにより、コミットする前に複雑なセットアップをテストできます。ドライブに障害が発生すると全てのデータが失われることに注意してください。好ましくないアクセスパターンためドライブのパフォーマンスも低下します。}}&lt;br /&gt;
&lt;br /&gt;
=== 状況: 1台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 1台のドライブが故障すると、すべてのデータが失われます。&lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | btrfs /mnt   |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | /dev/Bcache0 |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Cache        |&lt;br /&gt;
 | /dev/sdk1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Data         |&lt;br /&gt;
 | /dev/sdv1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります&lt;br /&gt;
&lt;br /&gt;
 # make-bcache --block 4k --bucket 2M -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|--block 4k}} オプションを省略する必要があるかもしれません。 [https://unix.stackexchange.com/questions/359508/cannot-attach-cache-device-to-backing-device キャッシュデバイスをバッキングデバイスにアタッチできない]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid に置き換えてください。Udev ルールが再起動時にこの処理を行うため一回だけ実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、&#039;bcache&#039; フックをリスト内の block と filesystems の間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に &#039;bcache&#039; を追加する必要があります。それから [[initramfs を再生成する]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 状況: 4台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +-----------------------------------------------------------+&lt;br /&gt;
 |                         btrfs /mnt                        |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 |                           Cache                           |  &lt;br /&gt;
 |                         /dev/sdk1                         |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid と置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 &lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 3台のハードドライブと3台の読み書きキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの SSD に障害が発生した場合のデータ損失を回避するために、各 HDD にはそれぞれの SSD が必要です。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------+&lt;br /&gt;
 |                  btrfs /mnt                |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Cache        | Cache        | Cache        |  &lt;br /&gt;
 | /dev/sdk1    | /dev/sdl1    | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
 # echo &#039;&#039;&#039;cset.uuid&#039;&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. ライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。&lt;br /&gt;
* Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。&lt;br /&gt;
* すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。&lt;br /&gt;
* 自己責任で btrfs とライトバックモードの bcache を使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache1/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache2/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 5台のハードドライブと3台のキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの各キャッシュデバイスは、SSD に障害が発生した場合のデータ損失を回避するために、単一のバッキングドライブをキャッシュするためにのみ使用する必要があります。ライトスルーとライトアラウンドの SSD は共有できます。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------------------------------------+&lt;br /&gt;
 |                                btrfs /mnt                                |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | WriteB Cache |     Writethrough or writearound Cache      | WriteB Cache |  &lt;br /&gt;
 | /dev/sdk1    |                 /dev/sdl1                  | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    | /dev/sdz1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
 # make-bcache -B /dev/sdz1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache4/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. 非共有キャッシュでライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache4/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== Bcache の管理 ===&lt;br /&gt;
&lt;br /&gt;
1. 正しくセットアップされていることを確認する&lt;br /&gt;
&lt;br /&gt;
 # cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
出力は以下のどれかになります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|no cache}}: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: 全て問題ないことを意味します。キャッシュはクリーンです。&lt;br /&gt;
* &#039;&#039;&#039;dirty&#039;&#039;&#039;: 全て正しくセットアップされており &#039;&#039;writeback&#039;&#039; が有効になっていてキャッシュがダーティであることを意味します。&lt;br /&gt;
* &#039;&#039;&#039;inconsistent&#039;&#039;&#039;: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。&lt;br /&gt;
&lt;br /&gt;
2. 使用しているキャッシュモードを確認する&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/bcache0/bcache/cache_mode|&lt;br /&gt;
[writethrough] writeback writearound none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の例では &#039;&#039;writethrough&#039;&#039; モードが有効になっています。&lt;br /&gt;
&lt;br /&gt;
3. bcached デバイスについての情報を表示する:&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスを停止する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/stop&lt;br /&gt;
&lt;br /&gt;
5. キャッシュデバイスを登録解除する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/detach&lt;br /&gt;
&lt;br /&gt;
6. キャッシュデバイスを安全に除去する&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;cache-set-uuid&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/detach&lt;br /&gt;
&lt;br /&gt;
7. アタッチされたデバイスを開放する&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/bcache/&#039;&#039;cache-set-uuid&#039;&#039;/stop&lt;br /&gt;
&lt;br /&gt;
== bcache デバイスへのインストール ==&lt;br /&gt;
&lt;br /&gt;
1. インストールディスク (2013.08.01 以上) を起動。&lt;br /&gt;
&lt;br /&gt;
2. [[AUR]] から {{AUR|bcache-tools}} パッケージをインストール。&lt;br /&gt;
&lt;br /&gt;
3. HDD をパーティション分割します&lt;br /&gt;
&lt;br /&gt;
{{Note|Grub2 が以下に述べるように bcache をサポートしていないことは事実かもしれませんが、UEFI は完全にサポートしています。つまり、Linux カーネルがブートデバイスを適切に処理するために必要なモジュールがカーネルにコンパイルされているか initramfs に含まれており、これらのファイルを initramfs に含めることができれば、下記で説明する個別のブートパーティションを省略して FAT EFI システムパーティションを使えます。詳細は [[GRUB]] および/または [[UEFI]] を参照してください。}}&lt;br /&gt;
grub は bcache を扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、[[EFI System Partition]] (ESP) も必要です。例:&lt;br /&gt;
      1            2048           22527   10.0 MiB    EF00  EFI System&lt;br /&gt;
      2           22528          432127   200.0 MiB   8300  arch_boot&lt;br /&gt;
      3          432128       625142414   297.9 GiB   8300  bcache_backing&lt;br /&gt;
&lt;br /&gt;
{{Note|この例には、swapfile/partition はありません。キャッシュ上のスワップパーティションには、手順7の LVM を使用してください。キャッシュ外のスワップパーティションには、ここでスワップパーティションを作成してください。}}&lt;br /&gt;
&lt;br /&gt;
4. HDD を bcache のバッキングデバイスとして設定します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sda3&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ブートディスクの準備では、決定した結果の影響を知ることが重要です。選択したブートローダー/マネージャーのドキュメントを何度も確認し、bcache との関連を真剣に検討してください。&lt;br /&gt;
* 以下のように、関連付けられているすべてのディスクが一度にパーティション化された場合、bcache は自動的に &amp;quot;-B バッキングストア&amp;quot; を &amp;quot;-C ssd キャッシュ&amp;quot; にアタッチし、手順5は不要となります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスができました。&lt;br /&gt;
&lt;br /&gt;
5. SSD を設定します&lt;br /&gt;
&lt;br /&gt;
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdb&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register &lt;br /&gt;
 # echo &#039;&#039;UUID__from_previous_command&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{Note|UUID を忘れた場合、キャッシュデバイスの登録後に {{ic|ls /sys/fs/bcache/}} で見つけることができます。}}&lt;br /&gt;
&lt;br /&gt;
6. bcache デバイスをフォーマットします。{{ic|/dev/bcache0}} デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください ({{ic|/}}, {{ic|/home}}, {{ic|/var}} などを分けたい場合など):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
 # mount /dev/bcache0 /mnt/&lt;br /&gt;
 # btrfs subvolume create /mnt/root&lt;br /&gt;
 # btrfs subvolume create /mnt/home&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
&lt;br /&gt;
cryptsetupなどを使用したい場合は、LUKS をセットアップすることもできます。例えば、&#039;cryptdevice&#039; カーネルオプション内のbcacheデバイスの参照は正常に機能します。&lt;br /&gt;
&lt;br /&gt;
7. インストール用のマウントポイントを準備します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/sda2&lt;br /&gt;
 # mkfs.msdos /dev/sda1 (ESP が 500MB 以上の場合、代わりに mkfs.vfat を使って FAT32 パーティションを作成してください)&lt;br /&gt;
&lt;br /&gt;
ここで {{Pkg|arch-install-scripts}} パッケージをインストールします。そうしたら:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/&lt;br /&gt;
 # mount --mkdir /dev/bcache0 -o subvol=home,compress=lzo /mnt/home&lt;br /&gt;
 # mount --mkdir /dev/sda2 /mnt/boot&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/efi&lt;br /&gt;
&lt;br /&gt;
8. 下記以外は通常通り [[インストールガイド]] に従ってシステムをインストールします:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集して {{ic|mkinitcpio -p linux}} を実行する前に:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|bcache-tools}} パッケージを[[インストール]]する。&lt;br /&gt;
* {{ic|/etc/mkinitcpio.conf}} を編集し:&lt;br /&gt;
** &amp;quot;bcache&amp;quot; モジュールを追加する&lt;br /&gt;
** &amp;quot;bcache&amp;quot; フックを block と filesystem フックの間に追加する&lt;br /&gt;
&lt;br /&gt;
{{Note| リブート後に何らかの理由でインストールメディアからバッキングデバイスを開きたい場合、手動で登録する必要があります。bcache モジュールがロードされていることを確認してから、関連するデバイスを /sys/bcache/register に echo します。[[dmesg]] を使って機能したかどうか確認すべきです。}}&lt;br /&gt;
&lt;br /&gt;
== インストールディスクからのアクセス ==&lt;br /&gt;
&lt;br /&gt;
ここではインストールディスクが起動する前に存在していた bcache パーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AUR から {{AUR|bcache-tools}} をインストールします。そして、モジュールをカーネルに追加します:&lt;br /&gt;
&lt;br /&gt;
 # modprobe bcache&lt;br /&gt;
&lt;br /&gt;
デバイスは {{ic|/dev/bcache*}} にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache*}} が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。&lt;br /&gt;
&lt;br /&gt;
インターネットを設定し {{AUR|bcache-tools}} をインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sdX &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdY &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # ...&lt;br /&gt;
&lt;br /&gt;
最後に必要なスレーブデバイスが登録された直後に bcache デバイスが現れます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;writethrough&#039;&#039; バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/bcache/running&lt;br /&gt;
&lt;br /&gt;
Bcache は実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで &amp;quot;機能&amp;quot; しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|discard}} オプションを有効にしないでください! 回復不能な破損を引き起こす可能性があります。 [https://bugzilla.kernel.org/show_bug.cgi?id=197377][https://lore.kernel.org/linux-bcache/CAJ+L6qeOVY_KofXsZKihHrbHaYzQTKYAh0Shm7Givj+f8=PiBg@mail.gmail.com/]}}&lt;br /&gt;
&lt;br /&gt;
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。{{ic|/sys}} のファイルに書き込むことで設定します。詳しくは [https://docs.kernel.org/admin-guide/bcache.html bcache ユーザードキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
キャッシュモードを切り替えるには {{ic|/sys/block/bcache[0-9]/bcache/cache_mode}} に {{ic|writethrough}}, {{ic|writeback}}, {{ic|writearound}} または {{ic|none}} のどれかを書き込みます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys}} の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには {{ic|/etc/tmpfile.d}} に .conf ファイルを作成してください。永続的な方法で、{{ic|bcache0}} のシーケンシャルカットオフを 1 MB にしてキャッシュモードを writeback に設定するには、{{ic|/etc/tmpfiles.d/my-bcache.conf}} ファイルを以下の内容で作成します:&lt;br /&gt;
&lt;br /&gt;
 w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M&lt;br /&gt;
 w /sys/block/bcache0/bcache/cache_mode        - - - - writeback&lt;br /&gt;
&lt;br /&gt;
== 高度な操作 ==&lt;br /&gt;
&lt;br /&gt;
=== バッキングデバイスのリサイズ ===&lt;br /&gt;
&lt;br /&gt;
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは [https://lore.kernel.org/linux-bcache/CAH+dOxJv-ajvLfbUSo8dqG0a8_grNBhfxJ1EbmSrYZz0YXJM2w@mail.gmail.com/T/ メーリングリスト] で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。&lt;br /&gt;
&lt;br /&gt;
==== 拡大例 ====&lt;br /&gt;
&lt;br /&gt;
以下の例では、ファイルシステムを 4GB 拡大します。&lt;br /&gt;
&lt;br /&gt;
1.ライブ CD/USB ドライブ（bcacheを有効にする必要はありません）で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが 4G 大きい状態で再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfs の場合、こうします&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
==== 縮小例 ====&lt;br /&gt;
&lt;br /&gt;
この例では、ファイルシステムを 4GB 縮小します。&lt;br /&gt;
&lt;br /&gt;
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。&lt;br /&gt;
&lt;br /&gt;
 # echo writethrough &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 $ watch cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
状態が &amp;quot;clean&amp;quot; になるまで待ってください。しばらく時間がかかります。&lt;br /&gt;
&lt;br /&gt;
===== キャッシュをバッキングデバイスに強制的にフラッシュする =====&lt;br /&gt;
&lt;br /&gt;
こうすることを推奨します&lt;br /&gt;
&lt;br /&gt;
  # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。&lt;br /&gt;
&lt;br /&gt;
その後値を元に戻します&lt;br /&gt;
&lt;br /&gt;
 # echo 10 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrsfs filesystem resize -5G /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合は &#039;&#039;resize2fs&#039;&#039; を使用しますが、パーティションがアンマウントされている場合に限ります&lt;br /&gt;
&lt;br /&gt;
{{hc|$ df -h /home|&lt;br /&gt;
/dev/bcache0    290G   20G   270G   1% /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # umount /home&lt;br /&gt;
 # resize2fs /dev/bcache0 283G&lt;br /&gt;
&lt;br /&gt;
3. LiveCD/USB ドライブ(bcache をサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを 4G 小さくして再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|非常に注意深くすれば、手順2でファイルシステムを正確なサイズまで縮小することで手順4を回避できます。ただし、多くのパーティションツールは希望どおりに動作せず、代わりにセクター境界の終端まで要求されたパーティションの開始点/終了点を調整します。これを事前に計算するのは難しいかもしれません}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動時に /dev/bcache デバイスが存在しない ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーが busy box シェルに表示される場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
ERROR: Unable to find root device &#039;UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15&#039;.&lt;br /&gt;
You are being dropped to a recovery shell&lt;br /&gt;
    Type &#039;exit&#039; to try and continue booting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスが &amp;quot;writeback&amp;quot; モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。&amp;quot;writeback&amp;quot; モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ブートを続行するには、次のいずれかを試してください:&lt;br /&gt;
&lt;br /&gt;
* バッキングデバイスとキャッシュデバイスの両方を登録する&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sda3 &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
&lt;br /&gt;
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &amp;quot;sh: echo: write error: Invalid argument&amp;quot; というエラーは、デバイスが既に登録されているか bcache のバッキングデバイスあるいはキャッシュデバイスとして認識されていないことを意味します。起動時に udev ルールを使っているのであれば、bcache のスーパーブロックが見つかった場合にのみデバイスの登録を試行すべきです。&lt;br /&gt;
* これはインストールのステップ7で udev の 69-bcache.rules を使用し、不正なスーパーブロックが原因で blkid とbcache-probe が &amp;quot;一致しない&amp;quot; 場合にも発生する可能性があります。考えられる説明/解決策については、[https://bcache.evilpiepirate.org/#index6h1 bcache の wiki] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュデバイスをバッキングデバイスに再アタッチする:&lt;br /&gt;
&lt;br /&gt;
キャッシュデバイスが登録されている場合、キャッシュの UUID を含むフォルダが {{ic|/sys/fs/bcache}} に存在する必要があります。以下の例ではその UUID を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# ls /sys/fs/bcache/|&lt;br /&gt;
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15     register     register_quiet&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 &amp;gt; /sys/block/sda/sda3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスが現れたら、exit と入力して起動を続行します。再度行う必要はありません。これが続く場合、bcache メーリングリストで質問してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sh: echo: write error: Invalid argument}} というエラーは、デバイスが既に登録されていることを意味します。{{ic|sh: echo: write error: No such file or directory}} というエラーは UUID が有効なキャッシュではないことを意味します(正しく入力したことを確認してください)。}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。&amp;quot;dirty_data&amp;quot; などの統計情報を確認して、失われるデータの量を把握することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/dirty_data|&lt;br /&gt;
-3.9M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/running|&lt;br /&gt;
0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sda/sda3/bcache/running&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスが現れます。exit と入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcache を再度実行することをお勧めします。{{ic|/dev/bcache0}} への fsck も賢明でしょう。[https://docs.kernel.org/admin-guide/bcache.html bcache ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記の2つのオプションのいずれかが機能しなかった場合にのみ、キャッシュを無効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
=== /sys/fs/bcache/ が存在しない ===&lt;br /&gt;
&lt;br /&gt;
起動したカーネルで bcache が有効になっていないか、bcache [[カーネルモジュール#手動でモジュールを扱う|モジュールがロードされていません]]&lt;br /&gt;
&lt;br /&gt;
=== write error: Invalid argument when trying to attach a device due to mismatched block parameter ===&lt;br /&gt;
&lt;br /&gt;
デバイスをアタッチしようとしたときに {{ic|bash: echo: write error: Invalid argument}} となり、実際のエラーは [[dmesg]] で表示されます:&lt;br /&gt;
&lt;br /&gt;
 bcache: bch_cached_dev_attach() Couldn&#039;t attach sdc: block size less than set&#039;s block size&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|--block 4k}} パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== Device or resource busy ===&lt;br /&gt;
デバイスが bcache バッキングデバイスとして使用されている場合、フォーマットもパーティション化もできません:&lt;br /&gt;
 # make-bcache -C /dev/sdb1&lt;br /&gt;
 Can&#039;t open dev /dev/sdb1: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 This disk is currently in use - repartitioning is probably a bad idea.&lt;br /&gt;
 It&#039;s recommended to umount all file systems, and swapoff all swap&lt;br /&gt;
 partitions on this disk.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
&lt;br /&gt;
これを修正するには、まずこのコマンドを実行して、ディスクが実際に bcache バッキングデバイスとして使用されていることを確認します:&lt;br /&gt;
 # bcache-super-show /dev/sdb1&lt;br /&gt;
 sb.magic		ok&lt;br /&gt;
 sb.first_sector		8 [match]&lt;br /&gt;
 sb.csum			A3D2B8610F6C5E35 [match]&lt;br /&gt;
 sb.version		1 [backing device]&lt;br /&gt;
 &lt;br /&gt;
 dev.label		(empty)&lt;br /&gt;
 dev.uuid		5a868788-65a2-4564-b4b7-c1817d0b6080&lt;br /&gt;
 dev.sectors_per_block	1&lt;br /&gt;
 dev.sectors_per_bucket	1024&lt;br /&gt;
 dev.data.first_sector	16&lt;br /&gt;
 dev.data.cache_mode	1 [writeback]&lt;br /&gt;
 dev.data.cache_state	2 [dirty]&lt;br /&gt;
 &lt;br /&gt;
 cset.uuid		42dcb651-6b53-4b65-bc49-9b1ca0acc5b1&lt;br /&gt;
&lt;br /&gt;
次に、バッキングデバイスを停止します。これにより、対応する /dev/bcache デバイスも削除されます。&lt;br /&gt;
 # echo 1 &amp;gt; /sys/class/block/sdb1/bcache/stop&lt;br /&gt;
&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3171.263577] bcache: bcache_device_free() bcache0 stopped&lt;br /&gt;
これで、デバイスをパーティション化できるようになりました:&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
fdisk が終了すると、カーネルはドライブを再度スキャンし、それが bcache バッキングデバイスであることを認識し、そのドライブをバッキングデバイスとして使用します。&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3190.643270]  sdb: sdb1&lt;br /&gt;
 [ 3190.833029] bcache: register_bdev() registered backing device sdb1&lt;br /&gt;
これにより、/sys/class/block/sdb1/ の下にディレクトリ bcache が作成されます&lt;br /&gt;
 # ls /sys/class/block/sdb1/&lt;br /&gt;
 alignment_offset  bcache  dev  discard_alignment  holders  inflight  partition	power  ro  size  start	stat  subsystem  uevent&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://bcache.evilpiepirate.org Bcache ホームページ]&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/bcache.html Bcache マニュアル]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bcache|2023-09-18|780772}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=34038</id>
		<title>Bcache</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Bcache&amp;diff=34038"/>
		<updated>2023-09-18T12:15:50Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 全体 */ en:Special:PermanentLink/780772 をインポート、一部更新; 英単語区切り文字間にスペース挿入&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[en:Bcache]]&lt;br /&gt;
[[zh-hans:Bcache]]&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Some first-person comments, see [[Help:Style]].}} --&amp;gt;&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Bcachefs}}&lt;br /&gt;
{{Related|Flashcache}}&lt;br /&gt;
{{Related|LVM2}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://bcache.evilpiepirate.org/ Bcache] (block cache) を使うことで SSD を他のブロックデバイス (通常は回転する HDD やアレイ) の読み書きキャッシュ (writeback モード) あるいは読み取りキャッシュ (writethrough または writearound) として活用できます。この記事ではルートパーティションとして Bcache を使って Arch をインストールする方法を説明します。bcache 自体の説明は [https://bcache.evilpiepirate.org/ bcache のホームページ] を読んでください。必ず [https://docs.kernel.org/admin-guide/bcache.html bcache のマニュアル] を読んで参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Bcache の代わりになるものは [[LVM#Cache|LVM cache]]です。}}&lt;br /&gt;
&lt;br /&gt;
Bcache を使うにはバッキングデバイスを bcache ブロックデバイスとしてフォーマットする必要があります。大抵の場合、[https://github.com/g2p/blocks blocks to-bcache] でインプレース変換を実行できます。&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Linux 3.18 の on-disk フォーマットの後方互換性のない変更は誤りであると報告されています。bcache on-disk フォーマットの変更は 3.19 の時点ではまだアップストリームに反映されていません. その後、Linux はバージョン 6.2 になっていますが、関連する文章はいつ壊れた変更がなされたか正確に反映していますか? その言及はまだ必要ですか?}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* 最初に重要なデータをバックアップしてください。&lt;br /&gt;
* bcache-dev ブランチは活発に開発されています。on-disk フォーマットは 3.18 で変更されており、以前のフォーマットとの後方互換性はありません [https://lore.kernel.org/linux-bcache/20150104004621.GA4460@kmo-pixel/]。注: これは bcache-dev をコンパイルするユーザにのみ該当します。上流の Linux カーネルに組み込まれているバージョンには影響はありません [https://lore.kernel.org/linux-bcache/CACHGV4KV-y3JD=i6jy_0jaapZYBKxOYr1+PL=0dsAe+M83Y_Ew@mail.gmail.com/]。&lt;br /&gt;
* Bcache と [[btrfs]] を組み合わせるとファイルシステムが壊れてしまう可能性があります。詳しくは [https://www.hdevalence.ca/blog/2013-09-21-notes-on-my-archlinux-install こちらの記事] を参照してください。Btrfs wiki によればカーネル 3.19 以上では修正されているとのことです [https://btrfs.wiki.kernel.org/index.php/Gotchas#Historical_references]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 既存のシステムに bcached btrfs ファイルシステムをセットアップ ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|make-bcache は既存のドライブやパーティションをインポート &#039;&#039;&#039;しません&#039;&#039;&#039; - 再フォーマットします。}}&lt;br /&gt;
&lt;br /&gt;
=== 準備 ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|bcache-tools}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
キャッシュとバッキングデータを保持するために fdisk を使用して SSD とハードドライブに適切なパーティションを作成します。&lt;br /&gt;
{{Tip| 1台のドライブに多数のパーティションを作成することが可能です。これにより、コミットする前に複雑なセットアップをテストできます。ドライブに障害が発生すると全てのデータが失われることに注意してください。好ましくないアクセスパターンためドライブのパフォーマンスも低下します。}}&lt;br /&gt;
&lt;br /&gt;
=== 状況: 1台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 1台のドライブが故障すると、すべてのデータが失われます。&lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | btrfs /mnt   |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | /dev/Bcache0 |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Cache        |&lt;br /&gt;
 | /dev/sdk1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
 | Data         |&lt;br /&gt;
 | /dev/sdv1    |&lt;br /&gt;
 +--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
この例ではデフォルトのブロックサイズとバケットサイズである 512B と 128kB が使われています。ブロックサイズはバッキングデバイスのセクタサイズに一致すべきで、通常は 512 あるいは 4k です。バケットサイズはライトアンプリフィケーションを避けるためにキャッシュデバイスの消去ブロックサイズに一致すべきです。例えば、4k セクタの HDD と 2MB の消去ブロックサイズの SSD を使用する場合、コマンドは以下になります&lt;br /&gt;
&lt;br /&gt;
 # make-bcache --block 4k --bucket 2M -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|--block 4k}} オプションを省略する必要があるかもしれません。 [https://unix.stackexchange.com/questions/359508/cannot-attach-cache-device-to-backing-device キャッシュデバイスをバッキングデバイスにアタッチできない]を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid に置き換えてください。Udev ルールが再起動時にこの処理を行うため一回だけ実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
7. initcpio 中にこのパーティションを使用可能にしたい場合(つまり、ブートプロセスのある時点で必要とする場合)、&#039;bcache&#039; フックをリスト内の block と filesystems の間に追加するのと同様に /etc/mkinitcpio.conf のモジュール配列に &#039;bcache&#039; を追加する必要があります。それから [[initramfs を再生成する]] 必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 状況: 4台のハードドライブと1台の読み取りキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* 書き込みキャッシュを有効にしないでください。SSD が故障するとデータが失われる可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
 +-----------------------------------------------------------+&lt;br /&gt;
 |                         btrfs /mnt                        |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 |                           Cache                           |  &lt;br /&gt;
 |                         /dev/sdk1                         |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、 /dev/bcache1、 /dev/bcache2 と /dev/bcache3 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。バッキングデバイスのグループに追加できるのは一つのキャッシュデバイスだけです。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスにキャッシュデバイスを登録します。例示の uuid をあなたのキャッシュの uuid と置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 &lt;br /&gt;
&lt;br /&gt;
6. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 3台のハードドライブと3台の読み書きキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの SSD に障害が発生した場合のデータ損失を回避するために、各 HDD にはそれぞれの SSD が必要です。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------+&lt;br /&gt;
 |                  btrfs /mnt                |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Cache        | Cache        | Cache        |  &lt;br /&gt;
 | /dev/sdk1    | /dev/sdl1    | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    |&lt;br /&gt;
 +--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1 と /dev/bcache2 を作成します&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
 # echo &#039;&#039;&#039;cset.uuid&#039;&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. ライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* Bcache 書き込みキャッシュは btrfs ファイルシステムに壊滅的な障害を引き起こす可能性があります。&lt;br /&gt;
* Btrfs は配下のデバイスが順番に書き込みを実行すると想定していますが、bcache ライトバックはこの前提に違反する恐れがあり、これを使う btrfs ファイルシステムを崩壊させるかもしれません。&lt;br /&gt;
* すべてのレイヤーまたはライト・キャッシュは停電時にデータを失うリスクを高めます。&lt;br /&gt;
* 自己責任で btrfs とライトバックモードの bcache を使用してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache1/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache2/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== 状況: 5台のハードドライブと3台のキャッシュ SSD ===&lt;br /&gt;
&lt;br /&gt;
{{Warning| &lt;br /&gt;
* ライトバックモードの各キャッシュデバイスは、SSD に障害が発生した場合のデータ損失を回避するために、単一のバッキングドライブをキャッシュするためにのみ使用する必要があります。ライトスルーとライトアラウンドの SSD は共有できます。&lt;br /&gt;
}}&lt;br /&gt;
 +--------------------------------------------------------------------------+&lt;br /&gt;
 |                                btrfs /mnt                                |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | /dev/Bcache0 | /dev/Bcache1 | /dev/Bcache2 | /dev/Bcache3 | /dev/Bcache4 |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | WriteB Cache |     Writethrough or writearound Cache      | WriteB Cache |  &lt;br /&gt;
 | /dev/sdk1    |                 /dev/sdl1                  | /dev/sdm1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
 | Data         | Data         | Data         | Data         | Data         |&lt;br /&gt;
 | /dev/sdv1    | /dev/sdw1    | /dev/sdx1    | /dev/sdy1    | /dev/sdz1    |&lt;br /&gt;
 +--------------+--------------+--------------+--------------+--------------+&lt;br /&gt;
&lt;br /&gt;
1. バッキングデバイスをフォーマットします (通常はメカニカルなドライブになります)。バッキングデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。以下は /dev/bcache0、/dev/bcache1、/dev/bcache2、/dev/bcache3 と /dev/bcache4 を作成します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sdv1&lt;br /&gt;
 # make-bcache -B /dev/sdw1&lt;br /&gt;
 # make-bcache -B /dev/sdx1&lt;br /&gt;
 # make-bcache -B /dev/sdy1&lt;br /&gt;
 # make-bcache -B /dev/sdz1&lt;br /&gt;
&lt;br /&gt;
2. キャッシュデバイスをフォーマットします (通常は SSD になります)。キャッシュデバイスはデバイス全体でもパーティションでも、あるいは他の標準ブロックデバイスでもかまいません。SSD に障害が発生した場合のデータ損失を回避するために、ライトバックモードの場合、各バッキングデバイスにはそれぞれの SSD が必要です。ライトスルーとライトアラウンドモードのキャッシュ SSD は、障害が発生してもデータが失われないため、複数のバッキングデバイスで共有できます。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdk1&lt;br /&gt;
 # make-bcache -C /dev/sdl1&lt;br /&gt;
 # make-bcache -C /dev/sdm1&lt;br /&gt;
&lt;br /&gt;
3. キャッシュデバイスの uuid を取得します&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdk1 | grep cset&lt;br /&gt;
 cset.uuid		f0e01318-f4fd-4fab-abbb-d76d870503ec&lt;br /&gt;
 # bcache-super-show /dev/sdl1 | grep cset&lt;br /&gt;
 cset.uuid		4b05ce02-19f4-4cc6-8ca0-1f765671ceda&lt;br /&gt;
 # bcache-super-show /dev/sdm1 | grep cset&lt;br /&gt;
 cset.uuid		75ff0598-7624-46f6-bcac-c27a3cf1a09f&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスに対してキャッシュデバイスを登録します。例示の uuid はあなたのキャッシュの uuid に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
 # echo f0e01318-f4fd-4fab-abbb-d76d870503ec &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache1/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache2/bcache/attach&lt;br /&gt;
 # echo 4b05ce02-19f4-4cc6-8ca0-1f765671ceda &amp;gt; /sys/block/bcache3/bcache/attach&lt;br /&gt;
 # echo 75ff0598-7624-46f6-bcac-c27a3cf1a09f &amp;gt; /sys/block/bcache4/bcache/attach&lt;br /&gt;
&lt;br /&gt;
5. 非共有キャッシュでライトバックモードを有効にします&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache4/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
6. btrfs ファイルシステムを作成します。データとメタデータの両方がアレイに2回保存されるため、1台のハードドライブに障害が発生してもデータが失われることはありません。-L 引数はファイルシステムのラベルを定義します。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L STORAGE -f -d raid1 -m raid1 /dev/bcache0 /dev/bcache1 /dev/bcache2 /dev/bcache3 /dev/bcache4&lt;br /&gt;
&lt;br /&gt;
7. ファイルシステムをマウントします&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 /mnt&lt;br /&gt;
&lt;br /&gt;
=== Bcache の管理 ===&lt;br /&gt;
&lt;br /&gt;
1. 正しくセットアップされていることを確認する&lt;br /&gt;
&lt;br /&gt;
 # cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
出力は以下のどれかになります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|no cache}}: bcache のバッキングデバイスにキャッシュデバイスが登録されていないことを意味します。&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: 全て問題ないことを意味します。キャッシュはクリーンです。&lt;br /&gt;
* &#039;&#039;&#039;dirty&#039;&#039;&#039;: 全て正しくセットアップされており &#039;&#039;writeback&#039;&#039; が有効になっていてキャッシュがダーティであることを意味します。&lt;br /&gt;
* &#039;&#039;&#039;inconsistent&#039;&#039;&#039;: バッキングデバイスがキャッシュデバイスと同期されていないため問題が発生しています。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスをキャッシュデバイスがアタッチされていないバッキングデバイスに関連付けることもできます。全ての I/O (読み書き) が直接バッキングデバイスに直接渡されることを意味します (パススルーモード)。&lt;br /&gt;
&lt;br /&gt;
2. 使用しているキャッシュモードを確認する&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/bcache0/bcache/cache_mode|&lt;br /&gt;
[writethrough] writeback writearound none&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の例では &#039;&#039;writethrough&#039;&#039; モードが有効になっています。&lt;br /&gt;
&lt;br /&gt;
3. bcached デバイスについての情報を表示する:&lt;br /&gt;
&lt;br /&gt;
 # bcache-super-show /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
4. バッキングデバイスを停止する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/stop&lt;br /&gt;
&lt;br /&gt;
5. キャッシュデバイスを登録解除する:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/sdX[Y]/bcache/detach&lt;br /&gt;
&lt;br /&gt;
6. キャッシュデバイスを安全に除去する&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;cache-set-uuid&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/detach&lt;br /&gt;
&lt;br /&gt;
7. アタッチされたデバイスを開放する&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/bcache/&#039;&#039;cache-set-uuid&#039;&#039;/stop&lt;br /&gt;
&lt;br /&gt;
== bcache デバイスへのインストール ==&lt;br /&gt;
&lt;br /&gt;
1. インストールディスク (2013.08.01 以上) を起動。&lt;br /&gt;
&lt;br /&gt;
2. [[AUR]] から {{AUR|bcache-tools}} パッケージをインストール。&lt;br /&gt;
&lt;br /&gt;
3. HDD をパーティション分割します&lt;br /&gt;
&lt;br /&gt;
{{Note|Grub2 が以下に述べるように bcache をサポートしていないことは事実かもしれませんが、UEFI は完全にサポートしています。つまり、Linux カーネルがブートデバイスを適切に処理するために必要なモジュールがカーネルにコンパイルされているか initramfs に含まれており、これらのファイルを initramfs に含めることができれば、下記で説明する個別のブートパーティションを省略して FAT EFI システムパーティションを使えます。詳細は [[GRUB]] および/または [[UEFI]] を参照してください。}}&lt;br /&gt;
grub は bcache を扱えないため、最低でも2つのパーティションが必要です (起動用と bcache バッキングデバイス用のパーティション)。UEFI を使っている場合、[[EFI System Partition]] (ESP) も必要です。例:&lt;br /&gt;
      1            2048           22527   10.0 MiB    EF00  EFI System&lt;br /&gt;
      2           22528          432127   200.0 MiB   8300  arch_boot&lt;br /&gt;
      3          432128       625142414   297.9 GiB   8300  bcache_backing&lt;br /&gt;
&lt;br /&gt;
{{Note|この例には、swapfile/partition はありません。キャッシュ上のスワップパーティションには、手順7の LVM を使用してください。キャッシュ外のスワップパーティションには、ここでスワップパーティションを作成してください。}}&lt;br /&gt;
&lt;br /&gt;
4. HDD を bcache のバッキングデバイスとして設定します。&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sda3&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ブートディスクの準備では、決定した結果の影響を知ることが重要です。選択したブートローダー/マネージャーのドキュメントを何度も確認し、bcache との関連を真剣に検討してください。&lt;br /&gt;
* 以下のように、関連付けられているすべてのディスクが一度にパーティション化された場合、bcache は自動的に &amp;quot;-B バッキングストア&amp;quot; を &amp;quot;-C ssd キャッシュ&amp;quot; にアタッチし、手順5は不要となります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -B /dev/sd? /dev/sd? -C /dev/sd?&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスができました。&lt;br /&gt;
&lt;br /&gt;
5. SSD を設定します&lt;br /&gt;
&lt;br /&gt;
SSD をキャッシュデバイスとしてフォーマットしてバッキングデバイスにリンクします&lt;br /&gt;
&lt;br /&gt;
 # make-bcache -C /dev/sdb&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register &lt;br /&gt;
 # echo &#039;&#039;UUID__from_previous_command&#039;&#039; &amp;gt; /sys/block/bcache0/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{Note|UUID を忘れた場合、キャッシュデバイスの登録後に {{ic|ls /sys/fs/bcache/}} で見つけることができます。}}&lt;br /&gt;
&lt;br /&gt;
6. bcache デバイスをフォーマットします。{{ic|/dev/bcache0}} デバイスを自由に分割したい場合は LVM あるいは btrfs のサブボリュームを使ってください ({{ic|/}}, {{ic|/home}}, {{ic|/var}} などを分けたい場合など):&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/bcache0&lt;br /&gt;
 # mount /dev/bcache0 /mnt/&lt;br /&gt;
 # btrfs subvolume create /mnt/root&lt;br /&gt;
 # btrfs subvolume create /mnt/home&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
&lt;br /&gt;
cryptsetupなどを使用したい場合は、LUKS をセットアップすることもできます。例えば、&#039;cryptdevice&#039; カーネルオプション内のbcacheデバイスの参照は正常に機能します。&lt;br /&gt;
&lt;br /&gt;
7. インストール用のマウントポイントを準備します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/sda2&lt;br /&gt;
 # mkfs.msdos /dev/sda1 (ESP が 500MB 以上の場合、代わりに mkfs.vfat を使って FAT32 パーティションを作成してください)&lt;br /&gt;
&lt;br /&gt;
ここで {{Pkg|arch-install-scripts}} パッケージをインストールします。そうしたら:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/bcache0 -o subvol=root,compress=lzo /mnt/&lt;br /&gt;
 # mount --mkdir /dev/bcache0 -o subvol=home,compress=lzo /mnt/home&lt;br /&gt;
 # mount --mkdir /dev/sda2 /mnt/boot&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/efi&lt;br /&gt;
&lt;br /&gt;
8. 下記以外は通常通り [[インストールガイド]] に従ってシステムをインストールします:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} を編集して {{ic|mkinitcpio -p linux}} を実行する前に:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|bcache-tools}} パッケージを[[インストール]]する。&lt;br /&gt;
* {{ic|/etc/mkinitcpio.conf}} を編集し:&lt;br /&gt;
** &amp;quot;bcache&amp;quot; モジュールを追加する&lt;br /&gt;
** &amp;quot;bcache&amp;quot; フックを block と filesystem フックの間に追加する&lt;br /&gt;
&lt;br /&gt;
{{Note| リブート後に何らかの理由でインストールメディアからバッキングデバイスを開きたい場合、手動で登録する必要があります。bcache モジュールがロードされていることを確認してから、関連するデバイスを /sys/bcache/register に echo します。[[dmesg]] を使って機能したかどうか確認すべきです。}}&lt;br /&gt;
&lt;br /&gt;
== インストールディスクからのアクセス ==&lt;br /&gt;
&lt;br /&gt;
ここではインストールディスクが起動する前に存在していた bcache パーティションにインストールディスクからアクセスする方法を示します。前のセクションと同様に、インストールディスクを起動し、AUR から {{AUR|bcache-tools}} をインストールします。そして、モジュールをカーネルに追加します:&lt;br /&gt;
&lt;br /&gt;
 # modprobe bcache&lt;br /&gt;
&lt;br /&gt;
デバイスは {{ic|/dev/bcache*}} にすぐには表示されません。カーネルに強制的に見つけさせるために、パーティションテーブルの再読み込みを指示します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache*}} が存在するはずなので、マウント、再フォーマットなどを続けることができるようになります。&lt;br /&gt;
&lt;br /&gt;
インターネットを設定し {{AUR|bcache-tools}} をインストールすることなくキャッシュを開始するには、メインラインカーネルに含まれているカーネルモジュールを前述の様にロードします。それから全てのスレーブデバイスを登録することでキャッシュを開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sdX &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdY &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # ...&lt;br /&gt;
&lt;br /&gt;
最後に必要なスレーブデバイスが登録された直後に bcache デバイスが現れます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;writethrough&#039;&#039; バッキングデバイスは、キャッシュを登録しなくても開始することができます。これは、デバイスが多数ありあなたが急いでいる場合、または一部のキャッシュに何らかの理由でアクセスできない場合に実行できます。上述のように、デバイスを登録し、それから開始します:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sdX/bcache/running&lt;br /&gt;
&lt;br /&gt;
Bcache は実際にはキャッシュを切り離しておらず、登録されている場合は引き続きキャッシュデバイスを追加します。このコマンドはライトバックバッキングデバイスで &amp;quot;機能&amp;quot; しますが、データが大幅に破損します。見つからないキャッシュが完全に回復不能な場合にのみ実行してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|discard}} オプションを有効にしないでください! 回復不能な破損を引き起こす可能性があります。 [https://bugzilla.kernel.org/show_bug.cgi?id=197377][https://lore.kernel.org/linux-bcache/CAJ+L6qeOVY_KofXsZKihHrbHaYzQTKYAh0Shm7Givj+f8=PiBg@mail.gmail.com/]}}&lt;br /&gt;
&lt;br /&gt;
設定できるオプションは多数存在します (キャッシュモードやキャッシュのフラッシュ間隔、シーケンシャル書き込みのヒューリスティックなど)。{{ic|/sys}} のファイルに書き込むことで設定します。詳しくは [https://docs.kernel.org/admin-guide/bcache.html bcache ユーザードキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
キャッシュモードを切り替えるには {{ic|/sys/block/bcache[0-9]/bcache/cache_mode}} に {{ic|writethrough}}, {{ic|writeback}}, {{ic|writearound}} または {{ic|none}} のどれかを書き込みます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/sys}} の変更は一時的なものであり、再起動すると元に戻ってしまうので注意してください(少なくとも cache_mode にはこの回避策は必要ないようです)。起動時にカスタム設定を行うには {{ic|/etc/tmpfile.d}} に .conf ファイルを作成してください。永続的な方法で、{{ic|bcache0}} のシーケンシャルカットオフを 1 MB にしてキャッシュモードを writeback に設定するには、{{ic|/etc/tmpfiles.d/my-bcache.conf}} ファイルを以下の内容で作成します:&lt;br /&gt;
&lt;br /&gt;
 w /sys/block/bcache0/bcache/sequential_cutoff - - - - 1M&lt;br /&gt;
 w /sys/block/bcache0/bcache/cache_mode        - - - - writeback&lt;br /&gt;
&lt;br /&gt;
== 高度な操作 ==&lt;br /&gt;
&lt;br /&gt;
=== バッキングデバイスのリサイズ ===&lt;br /&gt;
&lt;br /&gt;
パーティションの開始位置を移動しない限り、バッキングデバイスのサイズを変更することができます。このプロセスは [https://lore.kernel.org/linux-bcache/CAH+dOxJv-ajvLfbUSo8dqG0a8_grNBhfxJ1EbmSrYZz0YXJM2w@mail.gmail.com/T/ メーリングリスト] で説明されています。以下の例では bcache0 上で直接 btrfs ボリュームを使用しています。LVM コンテナや他のファイルシステムの場合、手順は異なります。&lt;br /&gt;
&lt;br /&gt;
==== 拡大例 ====&lt;br /&gt;
&lt;br /&gt;
以下の例では、ファイルシステムを 4GB 拡大します。&lt;br /&gt;
&lt;br /&gt;
1.ライブ CD/USB ドライブ（bcacheを有効にする必要はありません）で再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズが 4G 大きい状態で再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
2. 通常のインストールで再起動します。あなたのファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します。btrfs の場合、こうします&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
==== 縮小例 ====&lt;br /&gt;
&lt;br /&gt;
この例では、ファイルシステムを 4GB 縮小します。&lt;br /&gt;
&lt;br /&gt;
1. writeback キャッシュを無効化 (writethrough キャッシュに切り替え) してディスクが消去されるまで待機してください。&lt;br /&gt;
&lt;br /&gt;
 # echo writethrough &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
 $ watch cat /sys/block/bcache0/bcache/state&lt;br /&gt;
&lt;br /&gt;
状態が &amp;quot;clean&amp;quot; になるまで待ってください。しばらく時間がかかります。&lt;br /&gt;
&lt;br /&gt;
===== キャッシュをバッキングデバイスに強制的にフラッシュする =====&lt;br /&gt;
&lt;br /&gt;
こうすることを推奨します&lt;br /&gt;
&lt;br /&gt;
  # echo 0 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
これにより、キャッシュのダーティデータが1分以内にフラッシュされます。&lt;br /&gt;
&lt;br /&gt;
その後値を元に戻します&lt;br /&gt;
&lt;br /&gt;
 # echo 10 &amp;gt; /sys/block/bcache0/bcache/writeback_percent&lt;br /&gt;
&lt;br /&gt;
2. マウントされたファイルシステムを希望する容量よりいくらか縮小し、後で誤ってクリップしないようにします。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrsfs filesystem resize -5G /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合は &#039;&#039;resize2fs&#039;&#039; を使用しますが、パーティションがアンマウントされている場合に限ります&lt;br /&gt;
&lt;br /&gt;
{{hc|$ df -h /home|&lt;br /&gt;
/dev/bcache0    290G   20G   270G   1% /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # umount /home&lt;br /&gt;
 # resize2fs /dev/bcache0 283G&lt;br /&gt;
&lt;br /&gt;
3. LiveCD/USB ドライブ(bcache をサポートする必要はありません)を再起動し、fdisk、gdisk、parted、またはその他のお気に入りのツールを使用してバッキングパーティションを削除し、同じ開始位置で合計サイズを 4G 小さくして再作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ファイルシステム操作を実行する可能性のある GParted のようなツールは使用しないでください! bcache パーティションを認識せず、その一部を上書きする可能性があります!!}}&lt;br /&gt;
&lt;br /&gt;
4. 通常のインストールで再起動します。あなたファイルシステムは現在マウントされているでしょう。それで大丈夫です。パーティションを最大にリサイズするコマンドを発行します(つまり、手順3で実際のパーティションを縮小したサイズ)。btrfs の場合、こうします：&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ext3/4 の場合はこうです:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs /dev/bcache0&lt;br /&gt;
&lt;br /&gt;
5. 有効にしたい場合、ライトバックキャッシュを再度有効にします:&lt;br /&gt;
&lt;br /&gt;
 # echo writeback &amp;gt; /sys/block/bcache0/bcache/cache_mode&lt;br /&gt;
&lt;br /&gt;
{{Note|非常に注意深くすれば、手順2でファイルシステムを正確なサイズまで縮小することで手順4を回避できます。ただし、多くのパーティションツールは希望どおりに動作せず、代わりにセクター境界の終端まで要求されたパーティションの開始点/終了点を調整します。これを事前に計算するのは難しいかもしれません}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動時に /dev/bcache デバイスが存在しない ===&lt;br /&gt;
&lt;br /&gt;
以下のようなエラーが busy box シェルに表示される場合:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
ERROR: Unable to find root device &#039;UUID=b6b2d82b-f87e-44d5-bbc5-c51dd7aace15&#039;.&lt;br /&gt;
You are being dropped to a recovery shell&lt;br /&gt;
    Type &#039;exit&#039; to try and continue booting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスが &amp;quot;writeback&amp;quot; モードに設定されていると上記のエラーが発生することがあります (デフォルトは writearound です)。&amp;quot;writeback&amp;quot; モードでは、キャッシュデバイスが登録・アタッチされるまで /dev/bcache0 デバイスは開始しません。登録は起動するたびに行う必要がありますが、アタッチは一度だけ行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ブートを続行するには、次のいずれかを試してください:&lt;br /&gt;
&lt;br /&gt;
* バッキングデバイスとキャッシュデバイスの両方を登録する&lt;br /&gt;
&lt;br /&gt;
 # echo /dev/sda3 &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
 # echo /dev/sdb &amp;gt; /sys/fs/bcache/register&lt;br /&gt;
&lt;br /&gt;
/dev/bcache0 デバイスが存在する場合、exit と入力して起動を続行してください。ルートデバイスをマウントする前にデバイスが登録されるように initcpio を修正する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* &amp;quot;sh: echo: write error: Invalid argument&amp;quot; というエラーは、デバイスが既に登録されているか bcache のバッキングデバイスあるいはキャッシュデバイスとして認識されていないことを意味します。起動時に udev ルールを使っているのであれば、bcache のスーパーブロックが見つかった場合にのみデバイスの登録を試行すべきです。&lt;br /&gt;
* これはインストールのステップ7で udev の 69-bcache.rules を使用し、不正なスーパーブロックが原因で blkid とbcache-probe が &amp;quot;一致しない&amp;quot; 場合にも発生する可能性があります。考えられる説明/解決策については、[https://bcache.evilpiepirate.org/#index6h1 bcache の wiki] を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュデバイスをバッキングデバイスに再アタッチする:&lt;br /&gt;
&lt;br /&gt;
キャッシュデバイスが登録されている場合、キャッシュの UUID を含むフォルダが {{ic|/sys/fs/bcache}} に存在する必要があります。以下の例ではその UUID を使ってください:&lt;br /&gt;
&lt;br /&gt;
{{hc|# ls /sys/fs/bcache/|&lt;br /&gt;
b6b2d82b-f87e-44d5-bbc5-c51dd7aace15     register     register_quiet&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo b6b2d82b-f87e-44d5-bbc5-c51dd7aace15 &amp;gt; /sys/block/sda/sda3/bcache/attach&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/bcache0}} デバイスが現れたら、exit と入力して起動を続行します。再度行う必要はありません。これが続く場合、bcache メーリングリストで質問してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sh: echo: write error: Invalid argument}} というエラーは、デバイスが既に登録されていることを意味します。{{ic|sh: echo: write error: No such file or directory}} というエラーは UUID が有効なキャッシュではないことを意味します(正しく入力したことを確認してください)。}}&lt;br /&gt;
&lt;br /&gt;
* キャッシュを無効にし、バッキングデバイスをキャッシュなしで強制的に実行します。&amp;quot;dirty_data&amp;quot; などの統計情報を確認して、失われるデータの量を把握することをお勧めします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/dirty_data|&lt;br /&gt;
-3.9M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ダーティデータは、バッキングデバイスに書き込まれていないキャッシュ内のデータです。バッキングデバイスを強制的に実行すると、後でキャッシュを再接続しても、このデータは失われます。&lt;br /&gt;
&lt;br /&gt;
{{hc|# cat /sys/block/sda/sda3/bcache/running|&lt;br /&gt;
0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/block/sda/sda3/bcache/running&lt;br /&gt;
&lt;br /&gt;
これで {{ic|/dev/bcache0}} デバイスが現れます。exit と入力して、起動を続行します。キャッシュデバイスの登録を解除して、make-bcache を再度実行することをお勧めします。{{ic|/dev/bcache0}} への fsck も賢明でしょう。[https://docs.kernel.org/admin-guide/bcache.html bcache ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|上記の2つのオプションのいずれかが機能しなかった場合にのみ、キャッシュを無効にしてください。}}&lt;br /&gt;
&lt;br /&gt;
=== /sys/fs/bcache/ が存在しない ===&lt;br /&gt;
&lt;br /&gt;
起動したカーネルで bcache が有効になっていないか、bcache [[カーネルモジュール#手動でモジュールを扱う|モジュールがロードされていません]]&lt;br /&gt;
&lt;br /&gt;
=== write error: Invalid argument when trying to attach a device due to mismatched block parameter ===&lt;br /&gt;
&lt;br /&gt;
デバイスをアタッチしようとしたときに {{ic|bash: echo: write error: Invalid argument}} となり、実際のエラーは [[dmesg]] で表示されます:&lt;br /&gt;
&lt;br /&gt;
 bcache: bch_cached_dev_attach() Couldn&#039;t attach sdc: block size less than set&#039;s block size&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|--block 4k}} パラメータがどちらのデバイスにも設定されておらず、デフォルトと不一致になる場合があるために発生します。&lt;br /&gt;
&lt;br /&gt;
バッキングデバイスとキャッシングデバイスの両方を1つのコマンドで作成すると問題は自動的に解決しますが、別々のコマンドを使用する場合はブロックサイズパラメータを両方のデバイスに手動で設定する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== Device or resource busy ===&lt;br /&gt;
When a device is in use as a bcache backing device, it can not be formatted nor partitioned: &lt;br /&gt;
 # make-bcache -C /dev/sdb1&lt;br /&gt;
 Can&#039;t open dev /dev/sdb1: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 This disk is currently in use - repartitioning is probably a bad idea.&lt;br /&gt;
 It&#039;s recommended to umount all file systems, and swapoff all swap&lt;br /&gt;
 partitions on this disk.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
&lt;br /&gt;
To fix this, first run this command to confirm the disk is actually used as a bcache backing device:&lt;br /&gt;
 # bcache-super-show /dev/sdb1&lt;br /&gt;
 sb.magic		ok&lt;br /&gt;
 sb.first_sector		8 [match]&lt;br /&gt;
 sb.csum			A3D2B8610F6C5E35 [match]&lt;br /&gt;
 sb.version		1 [backing device]&lt;br /&gt;
 &lt;br /&gt;
 dev.label		(empty)&lt;br /&gt;
 dev.uuid		5a868788-65a2-4564-b4b7-c1817d0b6080&lt;br /&gt;
 dev.sectors_per_block	1&lt;br /&gt;
 dev.sectors_per_bucket	1024&lt;br /&gt;
 dev.data.first_sector	16&lt;br /&gt;
 dev.data.cache_mode	1 [writeback]&lt;br /&gt;
 dev.data.cache_state	2 [dirty]&lt;br /&gt;
 &lt;br /&gt;
 cset.uuid		42dcb651-6b53-4b65-bc49-9b1ca0acc5b1&lt;br /&gt;
&lt;br /&gt;
Then stop the backing device. This will also remove the corresponding /dev/bcache device.&lt;br /&gt;
 # echo 1 &amp;gt; /sys/class/block/sdb1/bcache/stop&lt;br /&gt;
&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3171.263577] bcache: bcache_device_free() bcache0 stopped&lt;br /&gt;
Now the device can be partitioned:&lt;br /&gt;
 # fdisk /dev/sdb&lt;br /&gt;
 &lt;br /&gt;
 Welcome to fdisk (util-linux 2.37.2).&lt;br /&gt;
 Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
 Be careful before using the write command.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Command (m for help): q&lt;br /&gt;
When fdisk exits, the kernel scans the drive again, notices it&#039;s a bcache backing device, and uses the drive as a backing device.&lt;br /&gt;
 # dmesg&lt;br /&gt;
 [ 3190.643270]  sdb: sdb1&lt;br /&gt;
 [ 3190.833029] bcache: register_bdev() registered backing device sdb1&lt;br /&gt;
This creates the directory bcache under /sys/class/block/sdb1/&lt;br /&gt;
 # ls /sys/class/block/sdb1/&lt;br /&gt;
 alignment_offset  bcache  dev  discard_alignment  holders  inflight  partition	power  ro  size  start	stat  subsystem  uevent&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://bcache.evilpiepirate.org Bcache ホームページ]&lt;br /&gt;
* [https://docs.kernel.org/admin-guide/bcache.html Bcache マニュアル]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Bcache|2023-09-18|780772}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34037</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34037"/>
		<updated>2023-09-18T11:41:16Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* Error starting domain: Requested operation is not valid: network &amp;#039;default&amp;#039; is not active */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
=== Custom build ===&lt;br /&gt;
&lt;br /&gt;
{{Remove|Explaining how to use the [[Arch build system]] is out of scope here. There is no motivation for the customization in the first place.}}&lt;br /&gt;
&lt;br /&gt;
To obtain a customized version of QEMU, [[Git#Getting_a_Git_repository|clone]] the package source of {{Pkg|qemu-common}} or {{AUR|qemu-git}}.&lt;br /&gt;
&lt;br /&gt;
The respective [[PKGBUILD]] file calls QEMU&#039;s [https://www.gnu.org/prep/standards/html_node/Configuration.html configure script] which accepts parameters obtainable by first manually running --help on it. &lt;br /&gt;
To access this help beforehand, you may [[Makepkg#Usage|use makepkg]] to let it download and extract the QEMU source, canceling the build process as soon as the configure script begins.&lt;br /&gt;
&lt;br /&gt;
With the PKGBUILD file&#039;s configure script calls modified as desired, you may [[Makepkg#Usage|use makepkg]] (again) to let it build the packages, though it is inadvisable to let it install them as conflicting headless / static packages will be built as well and a typical user certainly won&#039;t need the additional system emulators for the other architectures.&lt;br /&gt;
&lt;br /&gt;
When the build process completes, it is advisable to instead copy your desired packages (see the [[QEMU#Removal|list for qemu-desktop in &amp;quot;Removal&amp;quot;]]) to a different directory, [[Pacman#Additional_commands|let pacman install them all]] and add them to the [[Pacman#Skip_package_from_being_upgraded|IgnorePkg]] list so you get to upgrade them manually.&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト_.28CoW.29|Copy-on-Write]] を無効にするべきでしょう。}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2-ovmf/x64/OVMF.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を最初のリードオンリーな pflash ドライブとして使用します。{{ic|/usr/share/edk2-ovmf/x64/OVMF_VARS.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11などの一部のシステムで必要とされる[[Trusted Platform Module]] をエミュレートすることができます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。現在開発中で、オプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinuxゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
また、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。&lt;br /&gt;
* ホストマシンに複数のコアがある場合は、{{ic|-smp}} オプションを使用してゲストにより多くのコアを割り当てる。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。これはゲストとホストがクリップボードを共有することを可能にします。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Feature request submitted [https://bugs.archlinux.org/task/79716] to enable the functionality in the official package.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom_build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd}} は [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由でデフォルトネットワークが非アクティブになっている場合、そのネットワークを使用するように設定されているゲスト仮想マシンを開始することはできません。最初の試みは、virsh でネットワークを開始することです。&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
その他のトラブルシューティング手順については、[https://www.xmodulo.com/network-default-is-not-active.html] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2023-09-18|788022}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34036</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34036"/>
		<updated>2023-09-18T11:38:33Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる */ 原文と行数を合わせるため Talk など訳出しない行をコメントアウト&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
=== Custom build ===&lt;br /&gt;
&lt;br /&gt;
{{Remove|Explaining how to use the [[Arch build system]] is out of scope here. There is no motivation for the customization in the first place.}}&lt;br /&gt;
&lt;br /&gt;
To obtain a customized version of QEMU, [[Git#Getting_a_Git_repository|clone]] the package source of {{Pkg|qemu-common}} or {{AUR|qemu-git}}.&lt;br /&gt;
&lt;br /&gt;
The respective [[PKGBUILD]] file calls QEMU&#039;s [https://www.gnu.org/prep/standards/html_node/Configuration.html configure script] which accepts parameters obtainable by first manually running --help on it. &lt;br /&gt;
To access this help beforehand, you may [[Makepkg#Usage|use makepkg]] to let it download and extract the QEMU source, canceling the build process as soon as the configure script begins.&lt;br /&gt;
&lt;br /&gt;
With the PKGBUILD file&#039;s configure script calls modified as desired, you may [[Makepkg#Usage|use makepkg]] (again) to let it build the packages, though it is inadvisable to let it install them as conflicting headless / static packages will be built as well and a typical user certainly won&#039;t need the additional system emulators for the other architectures.&lt;br /&gt;
&lt;br /&gt;
When the build process completes, it is advisable to instead copy your desired packages (see the [[QEMU#Removal|list for qemu-desktop in &amp;quot;Removal&amp;quot;]]) to a different directory, [[Pacman#Additional_commands|let pacman install them all]] and add them to the [[Pacman#Skip_package_from_being_upgraded|IgnorePkg]] list so you get to upgrade them manually.&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト_.28CoW.29|Copy-on-Write]] を無効にするべきでしょう。}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2-ovmf/x64/OVMF.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を最初のリードオンリーな pflash ドライブとして使用します。{{ic|/usr/share/edk2-ovmf/x64/OVMF_VARS.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11などの一部のシステムで必要とされる[[Trusted Platform Module]] をエミュレートすることができます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。現在開発中で、オプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinuxゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
また、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。&lt;br /&gt;
* ホストマシンに複数のコアがある場合は、{{ic|-smp}} オプションを使用してゲストにより多くのコアを割り当てる。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。これはゲストとホストがクリップボードを共有することを可能にします。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Feature request submitted [https://bugs.archlinux.org/task/79716] to enable the functionality in the official package.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom_build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|No longer true since kernel 5.6}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd}} は [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
If for any reason the default network is deactivated, you will not be able to start any guest virtual machines which are configured to use the network. Your first attempt can be simply trying to start the network with virsh.&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
For additional troubleshooting steps, see [https://www.xmodulo.com/network-default-is-not-active.html].&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2023-09-18|788022}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34035</id>
		<title>QEMU</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=QEMU&amp;diff=34035"/>
		<updated>2023-09-18T11:37:57Z</updated>

		<summary type="html">&lt;p&gt;K9i: /* マウス入力をつかまない */ 原文と行数を合わせるため Talk など訳出しない行をコメントアウト&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:エミュレーション]]&lt;br /&gt;
[[Category:ハイパーバイザ]]&lt;br /&gt;
[[de:QEMU]]&lt;br /&gt;
[[en:QEMU]]&lt;br /&gt;
[[es:QEMU]]&lt;br /&gt;
[[fr:QEMU]]&lt;br /&gt;
[[zh-hans:QEMU]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|:カテゴリ:ハイパーバイザ}}&lt;br /&gt;
{{Related|Libvirt}}&lt;br /&gt;
{{Related|QEMU/Guest graphics acceleration}}&lt;br /&gt;
{{Related|OVMF による PCI パススルー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Main_Page QEMU about page] によると、&amp;quot;QEMU は汎用的なオープンソースのマシンエミュレータでありバーチャライザです。&amp;quot;&lt;br /&gt;
&lt;br /&gt;
マシンエミュレータとして使う場合、QEMU はあるマシン (例: ARM ボード) 用に作られた OS やプログラムを他のマシン (例: x86 PC) で動かすことができます。動的変換を利用することによって、素晴らしいパフォーマンスを実現します。&lt;br /&gt;
&lt;br /&gt;
QEMU は [[Xen]] や [[KVM]] などの他のハイパーバイザを使用して、仮想化のための CPU 拡張命令 ([[Wikipedia:Hardware-assisted virtualization|HVM]]) を利用することができます。バーチャライザとして使う場合、ゲストコードをホスト CPU で直接実行することにより QEMU はネイティブに近いパフォーマンスを得ることができます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-full}} パッケージ (または GUI が必要ない場合は {{Pkg|qemu-base}}) を[[インストール]]してください。また、任意で以下のパッケージもインストールしてください:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-block-gluster}} - [[GlusterFS]] ブロックのサポート&lt;br /&gt;
* {{Pkg|qemu-block-iscsi}} - [[iSCSI]] ブロックのサポート&lt;br /&gt;
* {{Pkg|samba}} - [[Samba|SMB/CIFS]] サーバーのサポート&lt;br /&gt;
&lt;br /&gt;
あるいは、ユーザーモードと静的のバリアントとして {{Pkg|qemu-user-static}} が存在します。&lt;br /&gt;
&lt;br /&gt;
=== QEMU バリアンツ ===&lt;br /&gt;
&lt;br /&gt;
QEMUには、さまざまなユースケースに適したいくつかのバリアンツが用意されています。&lt;br /&gt;
&lt;br /&gt;
最初の分類として、QEMU はフルシステムエミュレーションモードとユーザーモードエミュレーションモードの 2 種類を提供しています:&lt;br /&gt;
&lt;br /&gt;
; フルシステムエミュレーション&lt;br /&gt;
: このモードでは、QEMU は 1 つまたは複数のプロセッサとさまざまな周辺機器を含むフルシステムをエミュレートします。より正確ですが速度は遅く、エミュレートする OS は Linux である必要がありません。&lt;br /&gt;
: フルシステムエミュレーション用の QEMU コマンドは {{ic|qemu-system-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられています。例えば [[Wikipedia:x86_64|x86_64]] CPU のエミュレーション用の {{ic|qemu-system-x86_64}} 、インテル [[Wikipedia:i386|32-bit x86]] CPU 用の {{ic|qemu-system-i386}} 、[[Wikipedia:ARM architecture family#32-bit architecture|ARM (32 bits)]] 用の {{ic|qemu-system-arm}}、[[Wikipedia:AArch64|ARM64]] 用の {{ic|qemu-system-aarch64}} などです。&lt;br /&gt;
: ターゲットアーキテクチャがホスト CPU と一致する場合、このモードでも [[#Enabling KVM|KVM]] や Xen のようなハイパーバイザを使うことで大幅なスピードアップの恩恵を受けられるかもしれません。&lt;br /&gt;
; [https://www.qemu.org/docs/master/user/main.html ユーザーモードエミュレーション]&lt;br /&gt;
: このモードでは、QEMU はホストシステムのリソースを利用することで、(潜在的に)異なるアーキテクチャ用にコンパイルされた Linux 実行ファイルを呼び出すことができます。互換性の問題がある場合があります。例えば、一部の機能が実装されていない、動的リンクされた実行ファイルがそのままでは動作しない(これについては [[#x86_64 から arm/arm64 環境への Chrooting]] を参照)、そして Linux のみがサポートされています(ただし Windows 実行ファイルの実行には [https://wiki.winehq.org/Emulation Wine が使用できる] 場合があります)。&lt;br /&gt;
: ユーザーモードエミュレーション用の QEMU コマンドには {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;}} という名前が付けられており、例えば 64 ビット CPU のエミュレーション用は {{ic|qemu-x86_64}} になります。&lt;br /&gt;
&lt;br /&gt;
QEMU には動的リンク型と静的リンク型のバリアンツが提供されています:&lt;br /&gt;
&lt;br /&gt;
; 動的リンク型(デフォルト): {{ic|qemu-*}} コマンドはホストOSのライブラリに依存し、このため実行ファイルのサイズが小さくなっています。&lt;br /&gt;
; 静的リンク型: {{ic|qemu-*}} コマンドは同じアーキテクチャの Linux システムにコピーすることができます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux の場合、フルシステムエミュレーションは以下のように提供されます:&lt;br /&gt;
&lt;br /&gt;
; 非ヘッドレス (デフォルト): このバリアントでは、追加の依存関係(SDL や GTK など)を必要とする GUI 機能を使用できます。&lt;br /&gt;
; ヘッドレス: GUI を必要としないスリムなバリアントです(サーバなどに適しています)。&lt;br /&gt;
&lt;br /&gt;
ヘッドレス版と非ヘッドレス版は同じ名前のコマンド(例: {{ic|qemu-system-x86_64}})をインストールするため、両方を同時にインストールすることはできないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux で利用可能なパッケージの詳細 ===&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|qemu-desktop}} パッケージはフルシステムエミュレーション用の {{ic|x86_64}} アーキテクチャエミュレータを提供します({{ic|qemu-system-x86_64}})。 {{Pkg|qemu-emulators-full}} パッケージは、{{ic|x86_64}} ユーザモード版 ({{ic|qemu-x86_64}}) を提供し、サポートされている他のアーキテクチャについても、フルシステム版と ユーザモード版の両方(例: {{ic|qemu-system-arm}} および {{ic|qemu-arm}} )が含まれています。&lt;br /&gt;
* これらのパッケージのヘッドレスバージョン (フルシステムエミュレーションにのみ適用可能) は、 {{Pkg|qemu-base}} ({{ic|x86_64}}-のみ) および {{Pkg|qemu-emulators-full}} (その他のアーキテクチャ) です。&lt;br /&gt;
* フルシステムエミュレーションは、別のパッケージに含まれるいくつかの QEMU モジュールを使用して拡張することができます: {{Pkg|qemu-block-gluster}}, {{Pkg|qemu-block-iscsi}}, {{Pkg|qemu-guest-agent}}.&lt;br /&gt;
* {{Pkg|qemu-user-static}} は QEMU がサポートする全てのターゲットアーキテクチャにユーザーモードと静的バリアントを提供します。インストールされる QEMU コマンドは {{ic|qemu-&#039;&#039;target_architecture&#039;&#039;-static}} という名前で、例えば intel 64-bit CPU 用は {{ic|qemu-x86_64-static}} です。&lt;br /&gt;
&lt;br /&gt;
{{Note|現在のところ、Arch はフルシステムモードと静的リンクのバリアントを提供していません(公式にも AUR 経由でも)。これは通常は必要ないためです。}}&lt;br /&gt;
&lt;br /&gt;
=== Custom build ===&lt;br /&gt;
&lt;br /&gt;
{{Remove|Explaining how to use the [[Arch build system]] is out of scope here. There is no motivation for the customization in the first place.}}&lt;br /&gt;
&lt;br /&gt;
To obtain a customized version of QEMU, [[Git#Getting_a_Git_repository|clone]] the package source of {{Pkg|qemu-common}} or {{AUR|qemu-git}}.&lt;br /&gt;
&lt;br /&gt;
The respective [[PKGBUILD]] file calls QEMU&#039;s [https://www.gnu.org/prep/standards/html_node/Configuration.html configure script] which accepts parameters obtainable by first manually running --help on it. &lt;br /&gt;
To access this help beforehand, you may [[Makepkg#Usage|use makepkg]] to let it download and extract the QEMU source, canceling the build process as soon as the configure script begins.&lt;br /&gt;
&lt;br /&gt;
With the PKGBUILD file&#039;s configure script calls modified as desired, you may [[Makepkg#Usage|use makepkg]] (again) to let it build the packages, though it is inadvisable to let it install them as conflicting headless / static packages will be built as well and a typical user certainly won&#039;t need the additional system emulators for the other architectures.&lt;br /&gt;
&lt;br /&gt;
When the build process completes, it is advisable to instead copy your desired packages (see the [[QEMU#Removal|list for qemu-desktop in &amp;quot;Removal&amp;quot;]]) to a different directory, [[Pacman#Additional_commands|let pacman install them all]] and add them to the [[Pacman#Skip_package_from_being_upgraded|IgnorePkg]] list so you get to upgrade them manually.&lt;br /&gt;
&lt;br /&gt;
== QEMU のグラフィカルフロントエンド ==&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]] や [[VMware]] などの他の仮想化プログラムと違って、QEMU は仮想マシンを管理するための GUI(仮想マシン実行時に表示されるウィンドウを除く)を提供せず、保存された設定を使って永続的な仮想マシンを作成する方法も提供しません。仮想マシンを起動するためのカスタムスクリプトを作成していない限り、仮想マシンを実行するためのすべてのパラメータは、起動のたびにコマンドラインで指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
[[Libvirt]] は、QEMU 仮想マシンを管理するための便利な方法を提供します。利用可能なフロントエンドについては、[[Libvirt#Client|libvirtクライアントの一覧]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 新しい仮想化システムの作成 ==&lt;br /&gt;
&lt;br /&gt;
=== ハードディスクイメージの作成 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|If I get the man page right the raw format only allocates the full size if the filesystem does not support &amp;quot;holes&amp;quot; or it is &lt;br /&gt;
explicitly told to preallocate. See {{man|1|qemu-img|NOTES}}.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU イメージに関する詳細は [[Wikibooks:QEMU/Images]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
CD-ROM やネットワークからライブシステムを起動するのでない (そしてオペレーティングシステムをハードディスクイメージにインストールしない) 限り、QEMU を実行するにはハードディスクイメージが必要になります。ハードディスクイメージはエミュレートするハードディスクの内容を保存するファイルです。&lt;br /&gt;
&lt;br /&gt;
ハードディスクイメージを &#039;&#039;raw&#039;&#039; にすると、ゲストからは文字通りバイト単位で等しいようになり、ホスト上のゲストハードドライブをフルに使用することになります。この方法は I/O のオーバーヘッドを最小限に抑えますが、ゲスト上の未使用領域はホスト上で使用できないため、多くの領域が無駄になる可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、ハードディスクイメージを &#039;&#039;qcow2&#039;&#039; などのフォーマットにすることもできます。ゲストオペレーティングシステムが実際に仮想ハードディスク上のセクタに書き込んだ時にイメージファイルに容量を割り当てます。ホストシステムで占める容量はかなり少なくて済み、ゲストオペレーションにはフルサイズのイメージとして見えます。QEMU のスナップショット機能にも対応しています (詳しくは[[#モニタコンソールを使ってスナップショットを作成・管理]]を参照)。こちらの形式では &#039;&#039;raw&#039;&#039; と違ってパフォーマンスに多少影響を与えます。&lt;br /&gt;
&lt;br /&gt;
QEMU にはハードディスクイメージを作成するための {{ic|qemu-img}} コマンドがあります。例えば &#039;&#039;raw&#039;&#039; フォーマットで 4GiB イメージを作成するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f raw &#039;&#039;image_file&#039;&#039; 4G&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|-f qcow2}} を使って &#039;&#039;qcow2&#039;&#039; ディスクを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;raw&#039;&#039; イメージは {{ic|dd}} や {{ic|fallocate}} を使って必要なサイズのファイルを作成するだけでも作れます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|ハードディスクイメージを [[Btrfs]] ファイルシステム上に保存する場合、イメージを作成する前にディレクトリの [[Btrfs#コピーオンライト_.28CoW.29|Copy-on-Write]] を無効にするべきでしょう。}}&lt;br /&gt;
&lt;br /&gt;
==== オーバーレイストレージイメージ ====&lt;br /&gt;
&lt;br /&gt;
一度ストレージメディアを作成してから (&#039;backing&#039; イメージ)、QEMU にイメージへの変更を overlay イメージとして維持させることができます。これによってストレージメディアを前の状態に戻すことが可能になります。戻りたい時点で、オリジナルの backing イメージを元に新しい overlay イメージを作成することで戻すことができます。&lt;br /&gt;
&lt;br /&gt;
overlay イメージを作成するには、次のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -o backing_file=&#039;&#039;img1.raw&#039;&#039;,backing_fmt=&#039;&#039;raw&#039;&#039; -f &#039;&#039;qcow2&#039;&#039; &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
その後通常通り QEMU 仮想マシンを起動することができます ([[#仮想化システムを実行する|仮想化システムを実行する]]を参照):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
backing イメージには変更が加えられず、ストレージへの追記は overlay イメージファイルに保存されるようになります。&lt;br /&gt;
&lt;br /&gt;
backing イメージのパスが変更された場合、修正が必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|backing イメージの絶対ファイルシステムパスは (バイナリの) overlay イメージファイルに保存されます。backing イメージのパスを変更するのは大変です。}}&lt;br /&gt;
&lt;br /&gt;
オリジナルの backing イメージのパスからこのイメージに繋がるようにしてください。必要ならば、オリジナルのパスに新しいパスへのシンボリックリンクを作成します。次のようなコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あなたの判断で、backing イメージの古いパスがチェックされない &#039;安全でない&#039; rebase を実行することもできます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img rebase -u -b &#039;&#039;/new/img1.raw&#039;&#039; &#039;&#039;/new/img1.cow&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== イメージのリサイズ ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|NTFS ブートファイルシステムを含むイメージのリサイズはそこにインストールされているオペレーティングシステムが起動できなくなる可能性があります。最初にバックアップを作成することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img}} 実行可能ファイルには {{ic|resize}} オプションがあり、ハードドライブイメージの簡単なリサイズができます。このコマンドは &#039;&#039;raw&#039;&#039; と &#039;&#039;qcow2&#039;&#039; の両方で使えます。例えば、イメージ容量を 10GiB 増やすには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize &#039;&#039;disk_image&#039;&#039; +10G&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを拡大した後、仮想マシン内でファイルシステムおよびパーティションツールを使用して、新しいスペースを実際に使い始める必要があります。&lt;br /&gt;
&lt;br /&gt;
===== イメージの縮小 =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージを縮小する場合は、仮想マシン内のファイルシステムおよびパーティションツールを使用してまず割り当てられたファイル・システムとパーティション・サイズを縮小し、それに応じてディスクイメージを縮小する必要があります。Windows ゲストの場合、&amp;quot;ハードディスクパーティションの作成とフォーマット&amp;quot; コントロールパネルを開きます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ゲストパーティションのサイズを縮小せずにディスクイメージを縮小すると、データが失われます。}}&lt;br /&gt;
&lt;br /&gt;
イメージ領域を 10 GiB 減らすために、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img resize --shrink &#039;&#039;disk_image&#039;&#039; -10G&lt;br /&gt;
&lt;br /&gt;
==== イメージの変換 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-img convert}} を使用して、イメージを他のフォーマットに変換できます。次の例では、 &#039;&#039;raw&#039;&#039; イメージを &#039;&#039;qcow2&#039;&#039; に変換する方法を示します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img convert -f raw -O qcow2 &#039;&#039;input&#039;&#039;.img &#039;&#039;output&#039;&#039;.qcow2&lt;br /&gt;
&lt;br /&gt;
元の入力ファイルは削除されません。&lt;br /&gt;
&lt;br /&gt;
=== インストールメディアを準備する ===&lt;br /&gt;
&lt;br /&gt;
ディスクイメージにオペレーティングシステムをインストールするには、オペレーティングシステムのインストールメディア (例: 光ディスク、USB ドライブ、ISO イメージ) が必要です。QEMU はメディアに直接アクセスできないのでインストールメディアをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|光ディスクを使う場合、最初にメディアをファイルにダンプすることをお薦めします。これによりパフォーマンスが向上するとともにデバイスに直接アクセスする必要がなくなります(つまり、メディアのデバイスファイルのアクセス権を変更しなくても、通常のユーザーとして QEMU を実行できます)。例えば、CD-ROM デバイスノードの名前が {{ic|/dev/cdrom}} の場合、次のコマンドでファイルにダンプできます: {{bc|1=$ dd if=/dev/cdrom of=&#039;&#039;cd_image.iso&#039;&#039; bs=4k}}}}&lt;br /&gt;
&lt;br /&gt;
=== オペレーティングシステムのインストール ===&lt;br /&gt;
&lt;br /&gt;
ここで初めてエミュレータを起動することになります。ディスクイメージにオペレーティングをインストールするには、ディスクイメージとインストールメディアの両方を仮想マシンに結びつけて、インストールメディアから起動するようにする必要があります。&lt;br /&gt;
&lt;br /&gt;
例えば i386 ゲストで、CD-ROM としてのブータブル ISO ファイルと raw ディスクイメージからインストールするには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -cdrom &#039;&#039;iso_image&#039;&#039; -boot order=d -drive file=&#039;&#039;disk_image&#039;&#039;,format=raw&lt;br /&gt;
&lt;br /&gt;
他のメディアタイプ(フロッピー、ディスクイメージ、物理ドライブなど)の読み込みについては {{man|1|qemu}} を、その他の便利なオプションについては [[#仮想化システムを実行する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
オペレーティングシステムのインストールが終了したら、直接 QEMU イメージを起動することができます( [[#仮想化システムを実行する]] を参照)。&lt;br /&gt;
&lt;br /&gt;
{{Note|デフォルトではマシンに割り当てられるメモリは 128MiB だけです。メモリの量は {{ic|-m}} スイッチで調整できます。例えば {{ic|-m 512M}} や {{ic|-m 2G}} 。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 少なくとも設定中や実験中は、 {{ic|1=-boot order=x}} を指定する代わりにブートメニュー: {{ic|1=-boot menu=on}} を使う方が快適だと感じるユーザもいるかもしれません。&lt;br /&gt;
* QEMUをヘッドレスモードで実行する場合、QEMU はデフォルトでポート 5900 でローカル VNC サーバを起動します。ゲスト OS への接続に [[TigerVNC]] を使用することができます: {{ic|vncviewer :5900}}&lt;br /&gt;
* インストールプロセスでフロッピーや CD を替える必要がある場合、QEMU マシンモニター (仮想マシンのウィンドウで {{ic|Ctrl+Alt+2}} を押す) を使って仮想マシンからストレージデバイスを取り外したりアタッチすることができます。ブロックデバイスを見るには {{ic|info block}} を、デバイスをスワップアウトするには {{ic|change}} コマンドを使って下さい。{{ic|Ctrl+Alt+1}} を押せば仮想マシンに戻ります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 仮想化システムを実行する ==&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-system-*}} バイナリ (例えば {{ic|qemu-system-i386}} や {{ic|qemu-system-x86_64}} など、エミュレートするアーキテクチャによって異なります) を使って仮想化システムを実行します。使用方法は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;options&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
全ての {{ic|qemu-system-*}} バイナリでオプションは共通です、全てのオプションのドキュメントは {{man|1|qemu}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
通常、オプションに多くの可能な値がある場合は、&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、すべての可能な値をリストアップできます。プロパティをサポートしている場合は&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;option&#039;&#039; &#039;&#039;value,help&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
を使って、使用可能なプロパティをすべて一覧表示できます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
 $ qemu-system-x86_64 -machine help&lt;br /&gt;
 $ qemu-system-x86_64 -machine q35,help&lt;br /&gt;
 $ qemu-system-x86_64 -device help&lt;br /&gt;
 $ qemu-system-x86_64 -device qxl,help&lt;br /&gt;
&lt;br /&gt;
これらのメソッドと {{man|1|qemu}} ドキュメントを使用して、以降のセクションで使用されるオプションを理解できます。&lt;br /&gt;
&lt;br /&gt;
デフォルトで、QEMU は仮想マシンのビデオ出力をウィンドウに表示します。注意: QEMU ウィンドウの中をクリックすると、マウスポインタが取り込まれます。ポインタを戻すには、{{ic|Ctrl+Alt+g}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|QEMU を root で実行しないでください。スクリプト内で root で実行する必要があるときは、{{ic|-runas}} オプションを使って QEMU の root 特権を外して下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== KVM を有効にする ===&lt;br /&gt;
&lt;br /&gt;
VM (&#039;&#039;Kernel-based Virtual Machine&#039;&#039;) による完全な仮想化をあなたの Linux カーネルとハードウェアがサポートし、必要な[[カーネルモジュール]]がロードされている必要があります。詳細については、[[KVM]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
QEMU を KVM モードで開始するには、開始オプションに {{ic|-accel kvm}} を追加してください。実行中の仮想マシンで KVM が有効になっているかどうか確認するには、{{ic|Ctrl+Alt+Shift+2}} を使って [[#QEMU モニタ]] に入り、{{ic|info kvm}} と入力してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|-machine}} オプションの引数 {{ic|1=accel=kvm}} は {{ic|-enable-kvm}} または {{ic|-accel kvm}} オプションと同等です。&lt;br /&gt;
* CPU モデル {{ic|host}} は KVM を必要とします。&lt;br /&gt;
* GUI ツールを使って仮想マシンを開始した時にパフォーマンスが出ない場合、KVM サポートを確認してください。QEMU がソフトウェアエミュレーションにフォールバックしている可能性があります。&lt;br /&gt;
* &#039;&#039;ブルースクリーン&#039;&#039;を出さずに Windows 7 や Windows 8 を正しく起動するには KVM を有効にする必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== IOMMU (Intel VT-d/AMD-Vi) サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
最初に IOMMU を有効にします。[[OVMF による PCI パススルー#IOMMU の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|-device intel-iommu}} を追加して IOMMU デバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;&#039;-enable-kvm -machine q35 -device intel-iommu&#039;&#039;&#039; -cpu host ..&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
Intel ベースの CPU が搭載されている場合、{{ic|-device intel-iommu}} を使って QEMU ゲストに IOMMU デバイスを作成すると PCI パススルーが無効化されて以下のようなエラーが表示されることがあります: {{bc|Device at bus pcie.0 addr 09.0 requires iommu notifier which is currently not supported by intel-iommu emulation}} IO のリマップ([[OVMF による PCI パススルー#vfio-pci を使う|vfio-pci による PCI パススルー]]など)には {{ic|1=intel_iommu=on}} カーネルパラメータの追加が必要ですが、PCI パススルーを使う場合は {{ic|-device intel-iommu}} は設定してはいけません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== UEFI モードでの起動 ===&lt;br /&gt;
&lt;br /&gt;
QEMU が使用するデフォルトのファームウェアは [https://www.coreboot.org/SeaBIOS SeaBIOS] で、これはレガシー BIOS の実装です。QEMU はデフォルトの読み取り専用(ROM)イメージとして {{ic|/usr/share/qemu/bios-256k.bin}} ({{Pkg|seabios}} で提供される) を使用します。他のファームウェアファイルを選択するには {{ic|-bios}} 引数を使用します。しかし、UEFI が正しく動作するためには書き込み可能なメモリが必要であるため、代わりに [https://wiki.qemu.org/Features/PC_System_Flash PC システムフラッシュ] をエミュレートする必要があります。&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tianocore/tianocore.github.io/wiki/OVMF OVMF] は仮想マシンの UEFI サポートを有効にするための TianoCore プロジェクトです。 {{Pkg|edk2-ovmf}} パッケージで [[インストール]] することができます。&lt;br /&gt;
&lt;br /&gt;
OVMF をファームウェアとして使うには 2 つの方法があります。一つは {{ic|/usr/share/edk2-ovmf/x64/OVMF.fd}} をコピーして書き込み可能にし、pflash ドライブとして利用する方法です:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
UEFI 設定への全ての変更はこのファイルに直接保存されます。&lt;br /&gt;
&lt;br /&gt;
もう一つのより好ましい方法は OVMF を二つのファイルに分割することです。最初のファイルは読み込み専用でファームウェアの実行ファイルを保存し、2番目のファイルは書き込み可能な変数ストアとして使われます。利点はファームウェアファイルをコピーせずに直接使うことができ、 [[pacman]] によって自動的にアップデートされることです。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を最初のリードオンリーな pflash ドライブとして使用します。{{ic|/usr/share/edk2-ovmf/x64/OVMF_VARS.fd}} をコピーして書き込み可能にし、2台目の書き込み可能な pflash ドライブとして使用します:&lt;br /&gt;
&lt;br /&gt;
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd \&lt;br /&gt;
 -drive if=pflash,format=raw,file=&#039;&#039;/copy/of/OVMF_VARS.fd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
セキュアブートが必要な場合、{{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.fd}} を {{ic|/usr/share/edk2/x64/OVMF_CODE.secboot.fd}} に置き換えます。&lt;br /&gt;
&lt;br /&gt;
=== Trusted Platform Module のエミュレーション ===&lt;br /&gt;
&lt;br /&gt;
QEMU は、Windows 11などの一部のシステムで必要とされる[[Trusted Platform Module]] をエミュレートすることができます。&lt;br /&gt;
&lt;br /&gt;
ソフトウェア TPM の実装を提供する {{Pkg|swtpm}} パッケージを[[インストール]] します。 TPM のデータを格納するディレクトリを作成します({{ic|&#039;&#039;/path/to/mytpm&#039;&#039;}}を例として使用します)。以下のコマンドを実行し、エミュレータを起動します:&lt;br /&gt;
&lt;br /&gt;
 $ swtpm socket --tpm2 --tpmstate dir=&#039;&#039;/path/to/mytpm&#039;&#039; --ctrl type=unixio,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039;}} は &#039;&#039;swtpm&#039;&#039; が作成します: これはQEMUが接続する UNIX ソケットです。どのディレクトリに置いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、&#039;&#039;swtpm&#039;&#039; は TPM バージョン 1.2 エミュレータを起動します。 {{ic|--tpm2}} オプションを指定すると、TPM 2.0 のエミュレーションが有効になります。&lt;br /&gt;
&lt;br /&gt;
最後に、QEMU に以下のオプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -chardev socket,id=chrtpm,path=&#039;&#039;/path/to/mytpm/swtpm-sock&#039;&#039; \&lt;br /&gt;
 -tpmdev emulator,id=tpm0,chardev=chrtpm \&lt;br /&gt;
 -device tpm-tis,tpmdev=tpm0&lt;br /&gt;
&lt;br /&gt;
すると、仮想マシン内で TPM が使用できるようになります。仮想マシンをシャットダウンすると、&#039;&#039;swtpm&#039;&#039; は自動的に終了します。&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://qemu-project.gitlab.io/qemu/specs/tpm.html the QEMU documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
もしゲスト OS が TPM デバイスを認識しない場合、&#039;&#039;CPU モデルとトポロジー&#039;&#039; オプションを調整してみてください。問題を引き起こしているかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ホスト・ゲスト OS 間でデータを移動する ==&lt;br /&gt;
&lt;br /&gt;
=== ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
ファイルを転送できるネットワークプロトコルであれば [[NFS]], [[Samba|SMB]], [[Wikipedia:Network Block Device|NBD]], HTTP, [[Very Secure FTP Daemon|FTP]], [[Secure Shell|SSH]] など何でも使ってホストとゲスト OS 間でデータを共有することができます、ただしネットワークを適切に設定して適切なサービスを有効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザーモードネットワークは IP アドレス 10.0.2.2 でゲストがホスト OS にアクセスするのを許可します。ホスト OS で動作する全てのサーバー、SSH サーバーや SMB サーバーなどは、この IP アドレスでアクセスすることが可能になります。そしてゲストでは、[[Samba|SMB]] や [[NFS]] でホストのディレクトリをマウントしたり、ホストの HTTP サーバーなどにアクセスすることが可能です。&lt;br /&gt;
ゲスト OS で動作しているサーバーにホスト OS がアクセスすることはできませんが、他のネットワーク設定を使えば不可能ではありません ([[#QEMU の Tap ネットワーク]] を参照)。&lt;br /&gt;
&lt;br /&gt;
=== QEMU のポートフォワーディング ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU のポートフォワーディングは IPv4 のみです。IPv6 ポート転送は実装されておらず、最後のパッチは 2018 年に提案されました [https://lore.kernel.org/qemu-devel/1540512223-21199-1-git-send-email-max7255@yandex-team.ru/T/#u]}}&lt;br /&gt;
&lt;br /&gt;
QEMU はホストからゲストへポートを転送し、例えばホストからゲスト上で動作している SSH サーバーへの接続を可能にします。&lt;br /&gt;
&lt;br /&gt;
例えば、ホストのポート 60022 とゲストのポート 22(SSH) をバインドするには、次のようなコマンドで QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22&lt;br /&gt;
&lt;br /&gt;
ゲストで sshd が動いていることを確認し、接続します:&lt;br /&gt;
&lt;br /&gt;
 $ ssh &#039;&#039;guest-user&#039;&#039;@127.0.0.1 -p 60022&lt;br /&gt;
&lt;br /&gt;
[[SSHFS]] を使って共有読み込みと書き込みのためにゲストのファイルシステムをホストにマウントできます。&lt;br /&gt;
&lt;br /&gt;
複数のポートを転送するには、{{ic|hostfwd}} を {{ic|-nic}} 引数で繰り返すだけです、例えば VNC のポートは次のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;disk_image&#039;&#039; -nic user,hostfwd=tcp::60022-:22,hostfwd=tcp::5900-:5900&lt;br /&gt;
&lt;br /&gt;
=== QEMU の内蔵 SMB サーバ ===&lt;br /&gt;
&lt;br /&gt;
QEMUのドキュメントには &amp;quot;内蔵の&amp;quot; SMB サーバーがあると書かれていますが、実際は {{ic|/tmp/qemu-smb.&#039;&#039;ランダムな文字列&#039;&#039;}} にある自動生成の {{ic|smb.conf}} ファイルでホスト上で [[Samba]] を起動し、別の IP アドレス(デフォルトでは 10.0.2.4)でゲストからアクセス可能にするだけのものです。これはユーザーネットワークでのみ動作し、ホスト上で通常の [[Samba]] サービスを起動したくない場合に便利です。ホスト上で共有を設定した場合、ゲストもアクセスすることができます。&lt;br /&gt;
&lt;br /&gt;
オプション {{ic|1=smb=}} で共有設定できるのは1つのディレクトリだけですが、QEMU がシンボリックリンクに従うように SMB を設定すれば、(仮想マシン実行中でも)共有ディレクトリにシンボリックリンクを作成するだけで簡単に他のディレクトリを追加できます。このようなことをすることはありませんが、実行中の SMB サーバーの設定を後述のように変更することができます。&lt;br /&gt;
&lt;br /&gt;
ホスト上に &#039;&#039;Samba&#039;&#039; がインストールされている必要があります。この機能を有効にするには、次のようなコマンドで QEMU を起動します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,id=nic0,smb=&#039;&#039;shared_dir_path&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;shared_dir_path&#039;&#039;}} はゲストとホストで共有したいディレクトリです。&lt;br /&gt;
&lt;br /&gt;
これで、ゲストから、ホスト 10.0.2.4 上の共有ディレクトリに 共有名 &amp;quot;qemu&amp;quot; でアクセスできるようになります。例えば、Windowsエクスプローラで {{ic|\\10.0.2.4\qemu}} に移動します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039; -net user,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} や {{ic|1=-net user,smb=&#039;&#039;shared_dir_path1&#039;&#039;,smb=&#039;&#039;shared_dir_path2&#039;&#039;}} のように共有オプションを複数回使用した場合、最後に定義したものだけが共有されます。&lt;br /&gt;
* ゲストシステムが Windows で共有フォルダにアクセスできない場合、[http://ecross.mvps.org/howto/enable-netbios-over-tcp-ip-with-windows.htm NetBIOSプロトコルが有効になっているかどうか]{{Dead link|2023|05|06|status=domain name not resolved}} と NetBIOS プロトコルが使用する [https://technet.microsoft.com/en-us/library/cc940063.aspx ポート] がファイアウォールでブロックされていないか確認してください。&lt;br /&gt;
* 共有フォルダーにアクセスできず、ゲストシステムが Windows 10 Enterprise または Education、Windows Server 2016 の場合、[https://support.microsoft.com/en-us/help/4046019 ゲストアクセスを有効にします] 。&lt;br /&gt;
* [[#QEMU の Tap ネットワーク]] を使用する場合、SMB を取得するには  {{ic|1=-device virtio-net,netdev=vmnic -netdev user,id=vmnic,smb=&#039;&#039;shared_dir_path&#039;&#039;}} を使います。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
複数のディレクトリを共有し、仮想マシンの実行中にディレクトリの追加や削除を行う方法として、空のディレクトリを共有し、共有ディレクトリ内のディレクトリへのシンボリックリンクを作成/削除する方法があります。これを機能させるには、実行中の SMB サーバーの設定を以下のスクリプトで変更します。これは、ホスト側で実行可能に設定されていないファイルのゲスト側での実行も許可します。&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 eval $(ps h -C smbd -o pid,args | grep /tmp/qemu-smb | gawk &#039;{print &amp;quot;pid=&amp;quot;$1&amp;quot;;conf=&amp;quot;$6}&#039;)&lt;br /&gt;
 echo &amp;quot;[global]&lt;br /&gt;
 allow insecure wide links = yes&lt;br /&gt;
 [qemu]&lt;br /&gt;
 follow symlinks = yes&lt;br /&gt;
 wide links = yes&lt;br /&gt;
 acl allow execute always = yes&amp;quot; &amp;gt;&amp;gt; &amp;quot;$conf&amp;quot;&lt;br /&gt;
 # in case the change is not detected automatically:&lt;br /&gt;
 smbcontrol --configfile=&amp;quot;$conf&amp;quot; &amp;quot;$pid&amp;quot; reload-config&lt;br /&gt;
&lt;br /&gt;
これはゲストが初めてネットワークドライブに接続した後にのみ、qemu によって起動された実行中のサーバーに適用することができます。この代わりに、次のように設定ファイルに追加の共有を追加する方法があります:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;[&#039;&#039;myshare&#039;&#039;]&lt;br /&gt;
 path=&#039;&#039;another_path&#039;&#039;&lt;br /&gt;
 read only=no&lt;br /&gt;
 guest ok=yes&lt;br /&gt;
 force user=&#039;&#039;username&#039;&#039;&amp;quot; &amp;gt;&amp;gt; $conf&lt;br /&gt;
&lt;br /&gt;
この共有はゲスト上で {{ic|\\10.0.2.4\&#039;&#039;myshare&#039;&#039;}} として利用可能になります。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステムパススルーと VirtFS を使う ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.qemu.org/Documentation/9psetup QEMU ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== virtiofsd によるホストファイル共有 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|See [[Help:Style/Formatting and punctuation]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd は QEMU パッケージに同梱されています。ドキュメントは [https://qemu-stsquad.readthedocs.io/en/docs-next/tools/virtiofsd.html オンライン]{{Dead link|2023|05|06|status=404}} または {{ic|/usr/share/doc/qemu/qemu/tools/virtiofsd.html}} が {{Pkg|qemu-docs}} がインストールされたローカルファイルシステムにあります。&lt;br /&gt;
&lt;br /&gt;
virtiofsd ソケットにアクセスする必要があるため、qemu を実行するユーザを &#039;kvm&#039; [[ユーザーグループ]] に追加します。変更を反映するにはログアウトする必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Accuracy|root としてサービスを実行することは安全ではありません。また、プロセスは systemd サービスでラップする必要があります。}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
virtiofsd を root で開始します:&lt;br /&gt;
&lt;br /&gt;
 # /usr/lib/virtiofsd --socket-path=/var/run/qemu-vm-001.sock --shared-dir /tmp/vm-001 --cache always&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} はソケットファイルです。&lt;br /&gt;
* {{ic|/tmp/vm-001}} はホストとゲスト仮想マシン間の共有ディレクトリです。&lt;br /&gt;
&lt;br /&gt;
作成されたソケットファイルは root のみアクセス権を持っています。以下のようにグループ kvm にアクセス権を与えます:&lt;br /&gt;
&lt;br /&gt;
 # chgrp kvm qemu-vm-001.sock; chmod g+rxw qemu-vm-001.sock&lt;br /&gt;
&lt;br /&gt;
仮想マシン開始時に以下の設定オプションを追加します:&lt;br /&gt;
&lt;br /&gt;
 -object memory-backend-memfd,id=mem,size=4G,share=on \&lt;br /&gt;
 -numa node,memdev=mem \&lt;br /&gt;
 -chardev socket,id=char0,path=/var/run/qemu-vm-001.sock \&lt;br /&gt;
 -device vhost-user-fs-pci,chardev=char0,tag=myfs&lt;br /&gt;
&lt;br /&gt;
ここで&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Expansion|Explain the remaining options (or remove them if they are not necessary).}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{ic|1=size=4G}} は {{ic|-m 4G}} オプションで指定したサイズと一致する必要があります。&lt;br /&gt;
* {{ic|/var/run/qemu-vm-001.sock}} は先に起動されたソケットファイルを指します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|The section should not be specific to Windows.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ゲストでは共有が有効となるように設定されている必要があることに注意してください。 Windows の場合、[https://virtio-fs.gitlab.io/howto-windows.html 手順書] があります。一度設定すると、Windows の {{ic|Z:}} ドライブに共有ディレクトリの内容が自動的にマップされます。 &lt;br /&gt;
&lt;br /&gt;
以下のものがあれば、Windows 10 ゲストシステムは適切に設定されています。&lt;br /&gt;
&lt;br /&gt;
* VirtioFSSService windows サービス&lt;br /&gt;
* WinFsp.Launcher windows サービス&lt;br /&gt;
* Windows の &amp;quot;デバイスマネージャー&amp;quot; の &amp;quot;システムデバイス&amp;quot; の下の VirtIO FS Device driver&lt;br /&gt;
&lt;br /&gt;
上記がインストールされていても {{ic|Z:}} ドライブが表示されない場合は、Windows の &#039;&#039;プログラムの追加と削除&#039;&#039; から &amp;quot;Virtio-win-guest-tools&amp;quot; を修復してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ゲストのパーティションをホストにマウントする ===&lt;br /&gt;
&lt;br /&gt;
ホストシステムの下にドライブイメージをマウントすると、ゲストへのファイルの出し入れに便利な場合があります。これは仮想マシンが動作していないときに行う必要があります。&lt;br /&gt;
&lt;br /&gt;
ホストにドライブをマウントする手順は、qemu イメージの &#039;&#039;raw&#039;&#039; や &#039;&#039;qcow2&#039;&#039; といった種類によって異なります。この2つの形式のドライブをマウントする手順については、[[#rawイメージからのパーティションのマウント]] と [[#qcow2イメージからのパーティションのマウント]] で詳しく説明します。完全なドキュメントは [[Wikibooks:QEMU/Images#Mounting an image on the host]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|仮想マシンを再実行する前に、パーティションをアンマウントする必要があります。さもないと、データの破損が発生する可能性が非常に高くなります。}}&lt;br /&gt;
&lt;br /&gt;
==== raw イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
ループバックデバイスとして設定することで、 raw ディスクイメージファイル内のパーティションをマウントできます。&lt;br /&gt;
&lt;br /&gt;
===== 手動でバイトオフセットを指定する =====&lt;br /&gt;
&lt;br /&gt;
ディスクイメージのパーティションをマウントする一つの方法として、次のようなコマンドを使って特定のオフセットでディスクイメージをマウントする方法があります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o loop,offset=32256 &#039;&#039;disk_image&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|1=offset=32256}} オプションは、実際には {{ic|losetup}} プログラムに渡され、ファイルのバイトオフセット 32256 から始まり最後まで続くループバックデバイスをセットアップします。そしてこのループバックデバイスがマウントされます。パーティションの正確なサイズを指定するために {{ic|sizelimit}} オプションを使うこともできますが、これは通常は不要です。&lt;br /&gt;
&lt;br /&gt;
ディスクイメージによっては、必要なパーティションがオフセット 32256 から始まってない可能性があります。 {{ic|fdisk -l &#039;&#039;disk_image&#039;&#039;}} を実行してイメージ内のパーティションを確認してください。fdisk は 512 バイトセクタ単位で起点と終点を表示するので、512 を掛けて正しいオフセットを {{ic|mount}} に渡してください。&lt;br /&gt;
&lt;br /&gt;
===== loop モジュールでパーティションを自動検出する =====&lt;br /&gt;
&lt;br /&gt;
Linux の loop ドライバは、実際にはループバックデバイスのパーティションをサポートしていますが、デフォルトでは無効になっています。有効にするには、以下のようにしてください:&lt;br /&gt;
&lt;br /&gt;
* ループバックデバイスを全て取り除いてください (マウントされているイメージをすべてアンマウントするなど)。&lt;br /&gt;
* {{ic|loop}} カーネルモジュールを [[カーネルモジュール#手動でモジュールを扱う|アンロード]] し、 {{ic|1=max_part=15}} パラメータを設定してロードしてください。また、loop デバイスの最大数は {{ic|max_loop}} パラメータで制御できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|毎回 {{ic|1=max_part=15}} で loop モジュールをロードするには、カーネルに {{ic|loop.ko}} モジュールが組み込まれているかどうかにあわせて、 {{ic|/etc/modprobe.d}} にエントリを記述するか、カーネルコマンドラインに {{ic|1=loop.max_part=15}} と記述します。}}&lt;br /&gt;
&lt;br /&gt;
イメージをループバックデバイスとして設定:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f -P &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これで、作成されたデバイスが {{ic|/dev/loop0}} の場合、追加のデバイス {{ic|/dev/loop0p&#039;&#039;X&#039;&#039;}} が自動的に作成されます。X はパーティションの番号です。これらのパーティションのループバックデバイスは直接マウントすることができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/loop0p1 &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;udisksctl&#039;&#039; でディスクイメージをマウントする方法は [[Udisks#ループデバイスのマウント]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== kpartx を使う =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|multipath-tools}} パッケージの &#039;&#039;kpartx&#039;&#039; はデバイス上のパーティションテーブルを読み込んでパーティションごとに新しいデバイスを作成することができます。例えば:&lt;br /&gt;
&lt;br /&gt;
 # kpartx -a &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これでループバックデバイスがセットアップされ、{{ic|/dev/mapper/}} に必要なパーティションデバイスが作成されます。&lt;br /&gt;
&lt;br /&gt;
==== qcow2 イメージからパーティションをマウントする ====&lt;br /&gt;
&lt;br /&gt;
NBD (&#039;&#039;network block device&#039;&#039;) プロトコルを使ってディスクイメージを共有することができる {{ic|qemu-nbd}} を使用してみます。&lt;br /&gt;
&lt;br /&gt;
まず、&#039;&#039;nbd&#039;&#039;モジュールをロードする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # modprobe nbd max_part=16&lt;br /&gt;
&lt;br /&gt;
次に、ディスクを共有してデバイスエントリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # qemu-nbd -c /dev/nbd0 &#039;&#039;/path/to/image.qcow2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションを検出します:&lt;br /&gt;
&lt;br /&gt;
 # partprobe /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fdisk&#039;&#039; を使用して {{ic|&#039;&#039;nbd0&#039;&#039;}} 内のさまざまなパーティションに関する情報を取得できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# fdisk -l /dev/nbd0|2=&lt;br /&gt;
Disk /dev/nbd0: 25.2 GiB, 27074281472 bytes, 52879456 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disklabel type: dos&lt;br /&gt;
Disk identifier: 0xa6a4d542&lt;br /&gt;
&lt;br /&gt;
Device      Boot   Start      End  Sectors  Size Id Type&lt;br /&gt;
/dev/nbd0p1 *       2048  1026047  1024000  500M  7 HPFS/NTFS/exFAT&lt;br /&gt;
/dev/nbd0p2      1026048 52877311 51851264 24.7G  7 HPFS/NTFS/exFAT}}&lt;br /&gt;
&lt;br /&gt;
次に、ドライブイメージの任意のパーティション、例えばパーティション 2 をマウントします:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/nbd0&#039;&#039;&#039;p2&#039;&#039;&#039; &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
使用後は、イメージをアンマウントし、前の手順を逆にすることが重要です。つまり、パーティションをアンマウントし nbd デバイスを切断します:&lt;br /&gt;
&lt;br /&gt;
 # umount &#039;&#039;mountpoint&#039;&#039;&lt;br /&gt;
 # qemu-nbd -d /dev/nbd0&lt;br /&gt;
&lt;br /&gt;
=== 実際のパーティションをハードディスクイメージのシングルプライマリパーティションとして使う ===&lt;br /&gt;
&lt;br /&gt;
場合によって、QEMU の中からシステムパーティションのどれかを使いたくなることもあるでしょう。仮想マシンでの raw パーティションの使用は、読み書きの操作が物理ホストのファイルシステムレイヤーを通過しないため、パフォーマンスが高くなります。そのようなパーティションをホストとゲストでのデータの共有手段として使うこともできます。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、raw パーティションのデバイスファイルは、デフォルトで、&#039;&#039;root&#039;&#039; と &#039;&#039;disk&#039;&#039; グループが所有者です。root 以外のユーザーで raw パーティションに読み書きできるようにしたい場合は、パーティションのデバイスファイルの所有者をそのユーザーに変えるか、そのユーザーを &#039;&#039;disk&#039;&#039; グループに追加するか、[[ACL]] を使用してより詳細なアクセス制御を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* 仮想マシンにホストシステムのクリティカルなデータ (root パーティションなど) を変更する許可を与えるのは可能ではありますが、推奨はされません。&lt;br /&gt;
* ホストとゲストの両方で同時にパーティションのファイルシステムを読み書き可能でマウントしてはいけません。そうすると、データが破壊される可能性があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、パーティションを QEMU の仮想マシンに仮想ディスクとしてアタッチできます。&lt;br /&gt;
&lt;br /&gt;
ただし、仮想マシン &#039;&#039;全体&#039;&#039; をパーティションに収めたいときは、事態は多少複雑になります。そのような場合、実際に仮想マシンを起動するディスクイメージファイルがないために、MBR でパーティション分けされたデバイスではなくファイルシステムとしてフォーマットされたパーティションにブートローダーをインストールすることができません。このような仮想マシンは次のいずれかの方法でブートできます: [[#カーネルと initrd を手動で指定する]]、[[#MBR で仮想ディスクをシミュレートする]]、[[#device-mapper を使う]]、[[#リニア RAID を使う]]、または[[#ネットワークブロックデバイスを使う]]。&lt;br /&gt;
&lt;br /&gt;
==== カーネルと initrd を手動で指定する ====&lt;br /&gt;
&lt;br /&gt;
QEMU は [[GRUB]] などのブートローダーを迂回して、[[カーネル|Linux カーネル]]と [[initramfs|init ramdisk]] を直接ロードすることをサポートしています。それから root ファイルシステムを含んでいる物理パーティションで、パーティションされていない仮想ディスクとして起動することができます。以下のようなコマンドを実行することで行います:&lt;br /&gt;
&lt;br /&gt;
{{Note|この例で使用するのはゲストのイメージではなく、ホストのイメージです。ゲストのイメージを使いたい場合は、(ホストからファイルシステムを保護するために) {{ic|/dev/sda3}} を読み取り専用でマウントして {{ic|/full/path/to/images}} と指定するか、ゲストで kexec を使ってゲストのカーネルをリロードしてください (起動時間を拡張します)。}}&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd /boot/initramfs-linux.img -append root=/dev/sda /dev/sda3&lt;br /&gt;
&lt;br /&gt;
上の例では、ゲストの root ファイルシステムに使われている物理パーティションはホストの {{ic|/dev/sda3}} で、ゲストでは {{ic|/dev/sda}} として表示されます。&lt;br /&gt;
&lt;br /&gt;
もちろん、Arch Linux で使われているものとは違うカーネルや initrd を自由に指定することができます。&lt;br /&gt;
&lt;br /&gt;
複数の[[カーネルパラメータ]]を {{ic|-append}} オプションで指定するときは、クォートを使って囲む必要があります。例:&lt;br /&gt;
&lt;br /&gt;
 ... -append &#039;root=/dev/sda1 console=ttyS0&#039;&lt;br /&gt;
&lt;br /&gt;
==== MBR で仮想ディスクをシミュレートする ====&lt;br /&gt;
&lt;br /&gt;
ファイルシステムでフォーマットされたパーティションを維持しながらゲストのパーティションをまるでディスクであるかのようなパーティションにしないで、仮想マシンで物理パーティションを使用するもっと複雑な方法として、MBR をシミュレートして GRUB などのブートローダーを使って起動できるようにする方法があります。&lt;br /&gt;
&lt;br /&gt;
次の例では、マウントされていないプレーンな {{ic|/dev/hda&#039;&#039;N&#039;}} パーティションがあり、その中に QEMU ディスクイメージの一部にしたいファイルシステムがあるとします。秘訣は、 QEMU rawディスクイメージに組み込みたい実パーティションに、動的にマスターブートレコード (MBR) を付加することです。より一般的には、このパーティションは、より大きなシミュレートされたディスクの任意の部分、特に元の物理ディスクをシミュレートしますが {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけを仮想マシンに公開するブロックデバイスにすることができます。&lt;br /&gt;
&lt;br /&gt;
このタイプの仮想ディスクは、MBRとパーティションへの参照(コピー)を含む VMDK ファイルで表すことができますが、 QEMU はこの VMDK フォーマットをサポートしていません。たとえば、 [https://www.virtualbox.org/manual/ch09.html#rawdisk 以下のように作成された] 仮想ディスクは&lt;br /&gt;
&lt;br /&gt;
 $ VBoxManage internalcommands createrawvmdk -filename &#039;&#039;/path/to/file.vmdk&#039;&#039; -rawdisk /dev/hda&lt;br /&gt;
&lt;br /&gt;
以下のエラーメッセージとともに QEMU によって拒否されます&lt;br /&gt;
&lt;br /&gt;
 Unsupported image type &#039;partitionedDevice&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|VBoxManage}} は {{ic|&#039;&#039;file.vmdk&#039;&#039;}} と {{ic|&#039;&#039;file-pt.vmdk&#039;&#039;}} の2つのファイルを作成します。後者は MBR のコピーであり、テキスト・ファイル {{ic|file.vmdk}} が参照します。ターゲットパーティションまたは MBR の外側への読取り操作にはゼロが返され、書き込まれたデータは破棄されます。&lt;br /&gt;
&lt;br /&gt;
===== device-mapper を使う =====&lt;br /&gt;
&lt;br /&gt;
VMDK ディスクリプタ・ファイルを利用するのと同様の方法で、 [https://docs.kernel.org/admin-guide/device-mapper/index.html device-mapper] を利用して、 MBR ファイルに付属するループ・デバイスを対象パーティションにプリペンドする方法があります。仮想ディスクのサイズがオリジナルと同じである必要がない場合、まず MBR を保持するためのファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=2048&lt;br /&gt;
&lt;br /&gt;
これで、最新のディスクパーティションツールが使用するパーティションアライメントポリシーに従った 1 MiB (2048*512バイト) のファイルが作成されます。古いパーティショニングソフトウェアとの互換性のために、2048 セクタではなく 63 セクタが必要になる場合があります。MBR に必要なブロックは 512 バイトのみです。追加の空き領域は BIOS ブートパーティションや、ハイブリッドパーティショニングスキームの場合は GUID パーティションテーブルに使用できます。次に、ループデバイスを MBR ファイルにアタッチします:&lt;br /&gt;
&lt;br /&gt;
{{hc|# losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;|/dev/loop0}}&lt;br /&gt;
&lt;br /&gt;
この例では、結果のデバイスは {{ic|/dev/loop0}} です。device mapper を使って MBR とパーティションを結合します:&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 2048 linear /dev/loop0 0&lt;br /&gt;
 2048 `blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;` linear /dev/hda&#039;&#039;N&#039;&#039; 0&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
生成された {{ic|/dev/mapper/qemu}} は、 QEMU の raw ディスクイメージとして使用します。仮想ディスク上にパーティションテーブル(例としてリニア RAID の使用について説明したセクションを参照)とブートローダーコード({{ic|&#039;&#039;/path/to/mbr&#039;&#039;}} に保存されます)を作成するには、追加の手順が必要です。&lt;br /&gt;
&lt;br /&gt;
次の設定例では、仮想ディスク上の {ic|/dev/hda&#039;&#039;N&#039;&#039;}} の位置を物理ディスク上と同じにし、コピーとして提供される MBR を除き、ディスクの残りの部分を非表示にしています:&lt;br /&gt;
&lt;br /&gt;
 # dd if=/dev/hda count=1 of=&#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
 # loop=`losetup --show -f &#039;&#039;/path/to/mbr&#039;&#039;`&lt;br /&gt;
 # start=`blockdev --report /dev/hda&#039;&#039;N&#039;&#039; | tail -1 | awk &#039;{print $5}&#039;`&lt;br /&gt;
 # size=`blockdev --getsz /dev/hda&#039;&#039;N&#039;&#039;`&lt;br /&gt;
 # disksize=`blockdev --getsz /dev/hda`&lt;br /&gt;
 # echo &amp;quot;0 1 linear $loop 0&lt;br /&gt;
 1 $((start-1)) zero&lt;br /&gt;
 $start $size linear /dev/hda&#039;&#039;N&#039;&#039; 0&lt;br /&gt;
 $((start+size)) $((disksize-start-size)) zero&amp;quot; | dmsetup create qemu&lt;br /&gt;
&lt;br /&gt;
{{ic|dmsetup}} への標準入力として提供されるテーブルは、 {{ic|VBoxManage}} によって作成された VDMK 記述子ファイル内のテーブルと同様のフォーマットを持ち、代わりに {{ic|dmsetup create qemu--table&#039;&#039;table_file&#039;&#039;}} でファイルからロードできます。仮想マシンには {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} だけがアクセス可能で、ハードディスクの残りはゼロとして読み取られ、書き込まれたデータは最初のセクタを除いて破棄されます。 {{ic|dmsetup table qemu}} で {{ic|/dev/mapper/qemu}} のテーブルを表示できます ({{ic|udevadm info -rq name /sys/dev/block/&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} で {{ic|&#039;&#039;major&#039;&#039;:&#039;&#039;minor&#039;&#039;}} を {{ic|/dev/&#039;&#039;blockdevice&#039;&#039;}} 名に変換してください) 。作成されたデバイスを削除するには {{ic|dmsetup remove qemu}} と {{ic|losetup -d $loop}} を使います。&lt;br /&gt;
&lt;br /&gt;
この例が役に立つ状況は、マルチブート構成の既存の Windows XP インストールと、おそらくハイブリッドパーティションスキーム(物理ハードウェアでは、Windows XP が MBR パーティションテーブルを使用する唯一のオペレーティングシステムであり、同じコンピュータにインストールされた最新のオペレーティングシステムは GUID パーティションテーブルを使用できます)の場合です。Windows XP はハードウェアプロファイルをサポートしているため、同じインストールを異なるハードウェア構成で交互に使用できます(この場合はベアメタルと仮想)。Windows は新しく検出されたハードウェアのドライバをプロファイルごとに1回だけインストールする必要があります。この例ではコピーされた MBR のブートローダコードを更新して、元のシステムに存在するマルチブート対応のブートローダ(GRUB など)を起動するのではなく、 {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} から直接 Windows XP をロードする必要があることに注意してください。または、ブートローダインストールを含むブートパーティションのコピーを MBR と同じ方法で仮想ディスクに含めることもできます。&lt;br /&gt;
&lt;br /&gt;
===== リニア RAID を使う =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Out of date|[[Wikipedia:Cylinder-head-sector|CHS]] has been obsolete for decades.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
リニアモードのソフトウェア [[RAID]] ({{ic|linear.ko}} カーネルドライバが必要です)とループバックデバイスを使うこともできます:&lt;br /&gt;
&lt;br /&gt;
最初に、MBR を保持する小さなファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ dd if=/dev/zero of=&#039;&#039;/path/to/mbr&#039;&#039; count=32&lt;br /&gt;
&lt;br /&gt;
これで 16 KB (32 * 512 バイト) のファイルが作成されます。(MBR は512バイトのブロックしか必要としませんが) あまり小さくしすぎないことが重要です。なぜならファイルを小さくすればするほど、ソフトウェア RAID デバイスのチャンクサイズも小さくしなくてはならなくなり、パフォーマンスに影響を与えるからです。次に、MBR ファイルのループバックデバイスを設定します:&lt;br /&gt;
&lt;br /&gt;
 # losetup -f &#039;&#039;/path/to/mbr&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
他にループバックを使っていないために、作成されるデバイスは {{ic|/dev/loop0}} になるとします。次のステップはソフトウェア RAID を使って &amp;quot;マージされた&amp;quot; MBR + {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} ディスクイメージを作成することです:&lt;br /&gt;
&lt;br /&gt;
 # modprobe linear&lt;br /&gt;
 # mdadm --build --verbose /dev/md0 --chunk=16 --level=linear --raid-devices=2 /dev/loop0 /dev/hda&#039;&#039;N&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
作成した {{ic|/dev/md0}} は QEMU の raw ディスクイメージとして使用します (エミュレータがアクセスできるようにパーミッションを設定するのを忘れないでください)。最後にプライマリパーティションの開始位置が {{ic|/dev/md0}} の {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に一致するようにディスクの設定 (ディスクのジオメトリとパーティションテーブルの設定) を行います (上の例では 16 * 512 = 16384 バイトのオフセットです)。ホストマシンで {{ic|fdisk}} を使って行ってください。エミュレータの中で行ってはいけません: QEMU のデフォルトのディスク認識ルーチンによってキロバイトで割り切れないオフセットが生まれるとソフトウェア RAID コードで管理できなくなります。ホストから以下を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # fdisk /dev/md0&lt;br /&gt;
&lt;br /&gt;
{{ic|X}} を押してエキスパートメニューを開きます。トラック毎のセクタ数を設定 (&#039;s&#039;) してシリンダーの容量が MBR ファイルの容量に一致するようにしてください。ヘッダが 2 つでセクタサイズが 512 の場合、1 トラックあたりのセクタ数は 16 となり、シリンダのサイズは 2x16x512=16k になります。&lt;br /&gt;
&lt;br /&gt;
{{ic|R}} を押してメインメニューに戻って下さい。&lt;br /&gt;
&lt;br /&gt;
{{ic|P}} を押してシリンダーのサイズが 16k になってることを確認します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/hda&#039;&#039;N&#039;&#039;}} にあわせてシングルプライマリパーティションを作成してください。パーティションの開始位置はシリンダー 2 で終了位置はディスクの末尾になります (シリンダーの数は fdisk に入力したときの値で変わります)。&lt;br /&gt;
&lt;br /&gt;
最後に、結果をファイルに書き出してください (&#039;w&#039;)。これでホストから直接パーティションをディスクイメージとしてマウントすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hdc /dev/md0 &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
もちろん、元のパーティション {{ic|/dev/hda&#039;&#039;N&#039;&#039;}} に必要ツールが含まれていれば、QEMU を使ってディスクイメージにブートローダーを設定できます。&lt;br /&gt;
&lt;br /&gt;
===== ネットワークブロックデバイスを使う =====&lt;br /&gt;
&lt;br /&gt;
[https://docs.kernel.org/admin-guide/blockdev/nbd.html Network Block Device] によって、Linux はリモートサーバをブロックデバイスの1つとして使うことができます。 {{ic|nbd-server}} ({{Pkg|nbd}} パッケージ)を使って、QEMU 用の MBR ラッパーを作成することができます。&lt;br /&gt;
&lt;br /&gt;
上記のように MBR ラッパーファイルを設定したら、{{ic|wrapper.img.0}} に名前を変更してください。そして同じディレクトリに {{ic|wrapper.img.1}} という名前のシンボリックリンクを作成して、パーティションにリンクするようにしてください。また、同じディレクトリに以下のスクリプトを作成します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
dir=&amp;quot;$(realpath &amp;quot;$(dirname &amp;quot;$0&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
cat &amp;gt;wrapper.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
[generic]&lt;br /&gt;
allowlist = true&lt;br /&gt;
listenaddr = 127.713705&lt;br /&gt;
port = 10809&lt;br /&gt;
&lt;br /&gt;
[wrap]&lt;br /&gt;
exportname = $dir/wrapper.img&lt;br /&gt;
multifile = true&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
nbd-server \&lt;br /&gt;
    -C wrapper.conf \&lt;br /&gt;
    -p wrapper.pid \&lt;br /&gt;
    &amp;quot;$@&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|.0}} と {{ic|.1}} という拡張子が重要です。他は変えてもかまいません。上記のスクリプトを実行後 (nbd-server がパーティションにアクセスできるように root で実行してください)、以下のコマンドで QEMU を起動できます:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -drive file=nbd:127.713705:10809:exportname=wrap &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内部で物理ディスクデバイス全体を使用する ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Duplicates [[#Using any real partition as the single primary partition of a hard disk image]], libvirt instructions do not belong to this page.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
別の OS(Windows など)を搭載した2台目のディスクがあり、仮想マシン内でも起動できるようにしたいと思うかもしれません。&lt;br /&gt;
ディスクアクセスは raw のため、仮想マシン内でのディスクパフォーマンスは非常に良好です。&lt;br /&gt;
&lt;br /&gt;
==== Windows 仮想マシンブートの前提条件 ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンで起動する前に、必ずそのディスクの OS の中に [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ virtio ドライバ] をインストールしておいてください。&lt;br /&gt;
Win 7 では、バージョン [https://askubuntu.com/questions/1310440/using-virtio-win-drivers-with-win7-sp1-x64 0.1.173-4] を使用してください。&lt;br /&gt;
新しい virtio ビルドの個別ドライバは Win 7 で使用できるかもしれませんが、デバイスマネージャを使用して手動でインストールする必要があります。&lt;br /&gt;
Win 10 では、最新の virtio ビルドを使用できます。&lt;br /&gt;
&lt;br /&gt;
===== Windows ディスクインタフェースドライバを設定する =====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを起動しようとすると、{{ic|0x0000007B}} ブルースクリーンが表示されることがあります。これは、Windows が必要とするディスクインタフェースドライバがロードされていないか、手動で起動するように設定されているため、起動の初期段階でドライブにアクセスできないことを意味します。&lt;br /&gt;
&lt;br /&gt;
解決策は、[https://superuser.com/a/1032769 これらのドライバをブート時に起動するようにする] ことです。&lt;br /&gt;
&lt;br /&gt;
{{ic|HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services}} で {{ic|aliide, amdide, atapi, cmdide, iastor (無いかもしれません), iastorV, intelide, LSI_SAS, msahci, pciide and viaide}} フォルダを探します。&lt;br /&gt;
これらのそれぞれの中で、ブート時に有効にするためにすべての &amp;quot;start&amp;quot; の値を 0 に設定します。&lt;br /&gt;
ドライブが PCIe NVMe ドライブの場合、そのドライバ(存在するはずです)も有効にします。&lt;br /&gt;
&lt;br /&gt;
==== ディスクの固有パスを検索する ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ls /dev/disk/by-id/}} を実行します: 仮想マシンに挿入するドライブの ID、例えば {{ic|ata-TS512GMTS930L_C199211383}} を選択します。&lt;br /&gt;
次に、その ID を {{ic|/dev/disk/by-id/}} に追加して、{{ic|/dev/disk/by-id/ata-TS512GMTS930L_C199211383}} を取得します。&lt;br /&gt;
これが、そのディスクへの固有パスです。&lt;br /&gt;
&lt;br /&gt;
==== QEMU CLI でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
QEMU CLI では、おそらく次のようになります:&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-drive file=/dev/disk/by-id/ata-TS512GMTS930L_C199211383,format=raw,media=disk}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;file=&amp;quot; をドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== libvirt でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
libvirt XML では、次のように変換されます&lt;br /&gt;
&lt;br /&gt;
{{hc|$ virsh edit &#039;&#039;vmname&#039;&#039;|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;disk type=&amp;quot;block&amp;quot; device=&amp;quot;disk&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;driver name=&amp;quot;qemu&amp;quot; type=&amp;quot;raw&amp;quot; cache=&amp;quot;none&amp;quot; io=&amp;quot;native&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;source dev=&amp;quot;/dev/disk/by-id/ata-TS512GMTS930L_C199211383&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;target dev=&amp;quot;sda&amp;quot; bus=&amp;quot;sata&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;address type=&amp;quot;drive&amp;quot; controller=&amp;quot;0&amp;quot; bus=&amp;quot;0&amp;quot; target=&amp;quot;0&amp;quot; unit=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/disk&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;source dev&amp;quot; をあなたのドライブの固有パスに変更するだけです。&lt;br /&gt;
&lt;br /&gt;
==== virt-manager でディスクを追加する ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作成する際に、&amp;quot;既存のドライブをインポート&amp;quot; を選択し、固有パスを貼り付けるだけです。&lt;br /&gt;
すでに仮想マシンがある場合、デバイスとストレージを追加してから、カスタムストレージを選択または作成します。&lt;br /&gt;
そして固有パスを貼り付けます。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Network topologies (sections [[#Host-only networking]], [[#Internal networking]] and info spread out across other sections) should not be described alongside the various virtual interfaces implementations, such as [[#User-mode networking]], [[#Tap networking with QEMU]], [[#Networking with VDE2]].}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークのパフォーマンスはユーザーモードネットワークまたは vde よりも tap デバイスやブリッジの方が良くなるはずです。tap デバイスやブリッジはカーネル内で実装されているからです。&lt;br /&gt;
&lt;br /&gt;
加えて、デフォルトの e1000 NIC のエミュレーションではなく [https://wiki.libvirt.org/page/Virtio virtio] ネットワークデバイスを仮想マシンに指定することでネットワークのパフォーマンスを向上させることができます。詳しくは [[#virtio ドライバーのインストール]] を参照。&lt;br /&gt;
&lt;br /&gt;
=== リンク層アドレス ===&lt;br /&gt;
&lt;br /&gt;
QEMU に {{ic|-net nic}} 引数を与えると、デフォルトで、仮想マシンにリンク層アドレス {{ic|52:54:00:12:34:56}} のネットワークインターフェイスが割り当てられます。しかしながら、ブリッジネットワークで複数の仮想マシンを使用する場合、個別の仮想マシンには tap デバイスの仮想マシン側からそれぞれ固有のリンク層 (MAC) アドレスを設定しなくてはなりません。設定を行わないと、ブリッジが上手く動きません。同一のリンク層アドレスを持つ複数のソースからパケットを受け取ることになるからです。たとえ tap デバイス自体に固有のリンク層アドレスを設定していたとしても、ソースのリンク層アドレスは tap デバイスを通過するときに書き換えられないため、問題が発生します。&lt;br /&gt;
&lt;br /&gt;
個々の仮想マシンに固有のリンク層アドレスを設定、それも、どのアドレスも {{ic|52:54:}} で始まるように設定してください。以下のオプションを使って下さい (&#039;&#039;X&#039;&#039; は任意の16進数の数字に置き換えてください):&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:&#039;&#039;XX:XX:XX:XX&#039;&#039; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
固有のリンク層アドレスの生成は複数の方法で行うことができます:&lt;br /&gt;
&lt;br /&gt;
* NIC ごとに固有のリンク層アドレスを手動で指定する。仮想マシンを起動するたびに同じ IP アドレスが DHCP サーバーによって割り当てられるという利点がありますが、仮想マシンが大量にある場合は現実的ではありません。&lt;br /&gt;
* 仮想マシンを起動するたびにランダムなリンク層アドレスを生成する。衝突する可能性はほとんどゼロですが、DHCP サーバーによって割り当てられる IP アドレスが毎回異なるのが欠点です。以下のコマンドをスクリプトで使うことで {{ic|macaddr}} 変数にランダムなリンク層アドレスを生成できます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
printf -v macaddr &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=&amp;quot;$macaddr&amp;quot; -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 以下のスクリプト {{ic|qemu-mac-hasher.py}} を使ってハッシュ関数を利用し仮想マシンの名前からリンク層アドレスを生成する。仮想マシンの名前を一意なものとして、上記の方法の良いところを組み合わせています。スクリプトが実行されるたびに同一のリンク層アドレスが生成される上、衝突する可能性はほとんどありません。&lt;br /&gt;
&lt;br /&gt;
{{hc|qemu-mac-hasher.py|2=&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# usage: qemu-mac-hasher.py &amp;lt;VMName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import zlib&lt;br /&gt;
&lt;br /&gt;
crc = str(hex(zlib.crc32(sys.argv[1].encode(&amp;quot;utf-8&amp;quot;)))).replace(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)[-8:]&lt;br /&gt;
print(&amp;quot;52:54:%s%s:%s%s:%s%s:%s%s&amp;quot; % tuple(crc))&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
スクリプトでは、例えば以下のように使うことができます:&lt;br /&gt;
&lt;br /&gt;
 vm_name=&amp;quot;&#039;&#039;VM Name&#039;&#039;&amp;quot;&lt;br /&gt;
 qemu-system-x86_64 -name &amp;quot;$vm_name&amp;quot; -net nic,macaddr=$(qemu-mac-hasher.py &amp;quot;$vm_name&amp;quot;) -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ユーザーモードネットワーク ===&lt;br /&gt;
&lt;br /&gt;
デフォルトで、{{ic|-netdev}} 引数をつけていないと、QEMU は DHCP サーバーが内蔵されたユーザーモードネットワークを使用します。DHCP クライアントを実行したときに仮想マシンには IP アドレスが与えられ、QEMU による IP マスカレードを通して物理ホストのネットワークにアクセスできるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|ICMPv6 のサポートは実装されていないため、動作しません: {{ic|Slirp: 外部 icmpv6 はまだサポートされていません}}。IPv6 アドレスへの [[Ping]] は動作しません。}}&lt;br /&gt;
&lt;br /&gt;
ホストがインターネットに接続されていれば、このデフォルトの設定で簡単に仮想マシンをインターネットにアクセスさせることができますが、外部ネットワークからは仮想マシンは直接は見えず、また、複数の仮想マシンを同時に起動していても仮想マシン同士が通信することはできません。&lt;br /&gt;
&lt;br /&gt;
QEMU のユーザーモードネットワークには内蔵の TFTP や SMB サーバー、ゲストを VLAN に追加してゲストの通信を可能にするなどの機能があります。詳しくは {{ic|-net user}} フラグの QEMU ドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
ただし、ユーザーモードネットワークには有用性とパフォーマンスの両方で制約があります。より高度なネットワーク設定をするには tap デバイスや他の方法を使って下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|ホスト環境が [[systemd-networkd]] を使用している場合、[[systemd-networkd#必要なサービスと設定]]に書かれているように {{ic|/etc/resolv.conf}} ファイルのシンボリックリンクを作成してください。作成しないとゲスト環境で DNS ルックアップができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|ユーザーモードネットワークで virtio ドライバーを使用するためのオプションは次の通りです: {{ic|1=-nic user,model=virtio-net-pci}} 。}}&lt;br /&gt;
&lt;br /&gt;
=== QEMU の Tap ネットワーク ===&lt;br /&gt;
&lt;br /&gt;
[[wikipedia:ja:TUN/TAP|Tap デバイス]]は Linux カーネルの機能で、本当のネットワークインターフェイスのように見える仮想ネットワークインターフェイスを作成することができます。tap インターフェイスに送られたパケットは、そのインターフェイスに bind された、QEMU などのユーザースペースプログラムに送信されます。&lt;br /&gt;
&lt;br /&gt;
QEMU は仮想マシンで tap ネットワークを利用して、tap インターフェイスに送られたパケットを仮想マシンに送信することで仮想マシンのネットワークインターフェイス (通常は Ethernet インターフェイス) から受け取ったように見せることが可能です。逆に、仮想マシンがネットワークインターフェイスを通して送信したものは全て tap インターフェイスが受け取ります。&lt;br /&gt;
&lt;br /&gt;
Tap デバイスは Linux の bridge ドライバーによってサポートされているため、tap デバイスを互いに、または {{ic|eth0}} といったホストのインターフェイスとブリッジすることができます。これは、仮想マシンを互いに通信できるようにしたい場合や、LAN 上の他のマシンが仮想マシンに通信できるようにしたい場合に価値があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|tap デバイスとホストのインターフェイス ({{ic|eth0}} など) をブリッジすると、仮想マシンは外部ネットワークから直接認識されるようになり、攻撃を受ける可能性が出てきます。仮想マシンからアクセスできるリソースに応じて、通常のコンピュータと同じような[[ファイアウォール|対策]]を施して仮想マシンを防護するようにしてください。仮想マシンのリソースがほとんどなかったり複数の仮想マシンを立ち上げるなど危険性が高すぎる場合、[[#ホストオンリーネットワーク|ホストオンリーネットワーク]]を使って NAT を設定するほうが良いでしょう。その場合、ゲストごと複数のファイアウォールを設定する代わりにホストにファイアウォールを 1 つ設定する必要があるだけです。}}&lt;br /&gt;
&lt;br /&gt;
ユーザーモードネットワークセクションで示したように、tap デバイスはユーザーモードよりも高いネットワーク性能を提供します。ゲスト OS が virtio ネットワークドライバーをサポートする場合、ネットワーク性能も大幅に向上します。tap0 デバイスを使用し、virtio ドライバがゲストで使用され、ネットワークの開始/停止を補助するスクリプトが使用されていない場合、qemu コマンドの一部は次のようになります:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no&lt;br /&gt;
&lt;br /&gt;
しかし、すでに virtio ネットワークドライバで tap デバイスを使用している場合は、vhost を有効にすることでネットワーク性能を向上させることもできます:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-net,netdev=network0 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on&lt;br /&gt;
&lt;br /&gt;
詳細は  [https://web.archive.org/web/20160222161955/http://www.linux-kvm.com:80/content/how-maximize-virtio-net-performance-vhost-net] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== ホストオンリーネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスが与えられていてそこへのトラフィックが許可されていながら、本当のインターフェイス (例: {{ic|eth0}}) がブリッジに接続されていない場合、仮想マシンは互いに通信したりホストシステムと通信することができるようになります。しかしながら、物理ホストで IP マスカレードを設定しないかぎり外部ネットワークとは一切通信することができません。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;ホストオンリーネットワーク&#039;&#039;と呼ばれています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* IP マスカレードを設定したい場合、[[インターネット共有#NAT の有効化]]ページを参照してください。&lt;br /&gt;
* ブリッジの作成に関する情報は [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* ブリッジインターフェイスで DHCP サーバーを実行して仮想ネットワークを構築することもできます。例えば {{ic|172.20.0.1/16}} サブネットで DHCP サーバーとして [[dnsmasq]] を使うには:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
# ip addr add 172.20.0.1/16 dev br0&lt;br /&gt;
# ip link set br0 up&lt;br /&gt;
# dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 内部ネットワーク ====&lt;br /&gt;
&lt;br /&gt;
ブリッジに IP アドレスを与えずにブリッジへの全てのトラフィックを INPUT チェインで drop する [[iptables]] ルールを追加した場合、仮想マシンは互いに通信することはできても、物理ホストや外側のネットワークに接続できなくなります。この設定は [[VirtualBox]] などの他の仮想化ソフトウェアでは&#039;&#039;内部ネットワーク&#039;&#039;と呼ばれています。仮想マシンに固定 IP アドレスを割り当てるかマシンのどれか一つで DHCP サーバーを実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
デフォルトで iptables はブリッジネットワークのパケットを拒否します。ブリッジネットワークのパケットを許可する iptables のツールを使用する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== qemu-bridge-helper を使用したブリッジネットワーク ====&lt;br /&gt;
&lt;br /&gt;
この方法にはスタートアップスクリプトが必要なく、すぐに複数の tap やブリッジに対応することができます。 {{ic|/usr/lib/qemu/qemu-bridge-helper}} バイナリを使用して、既存のブリッジに tap デバイスを作成できます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* ブリッジの作成については [[ネットワークブリッジ]] を参照してください。&lt;br /&gt;
* QEMU のネットワークヘルパーの詳細は https://wiki.qemu.org/Features/HelperNetworking を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
まず、QEMU が使用するすべてのブリッジの名前を含む設定ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu/bridge.conf|&lt;br /&gt;
allow &#039;&#039;br0&#039;&#039;&lt;br /&gt;
allow &#039;&#039;br1&#039;&#039;&lt;br /&gt;
...}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/qemu/}} の [[パーミッション]] が {{ic|755}} であることを確認してください。そうでない場合、 [https://gitlab.com/qemu-project/qemu/-/issues/515 QEMU の問題] と [https://www.gns3.com/community/discussions/gns3-cannot-work-with-qemu GNS3 の問題] が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
次に仮想マシンを起動します; デフォルトのネットワークヘルパーとデフォルトのブリッジ {{ic|br0}} で QEMU を実行する最も基本的な使い方は:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ブリッジ {{ic|br1}} と virtio ドライバを使用するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nic bridge,br=&#039;&#039;br1&#039;&#039;,model=virtio-net-pci &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ブリッジを手動で作成する ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|This section needs serious cleanup and may contain out-of-date information.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|QEMU 1.1 から、スクリプトを追加することなく [http://wiki.qemu.org/Features/HelperNetworking network bridge helper] で tun/tap を設定することができます。[[#qemu-bridge-helper を使用するブリッジネットワーク]] を参照。}}&lt;br /&gt;
&lt;br /&gt;
以下では仮想マシンを {{ic|eth0}} などのホストインターフェイスにブリッジする方法を説明しています。おそらく一番よく使われている設定です。この設定では、物理的なホストマシンと同一の Ethernet セグメントに、直接外部ネットワークに仮想マシンが位置するようになります。&lt;br /&gt;
&lt;br /&gt;
通常の Ethernet アダプタをブリッジアダプタで置き換えて、通常の Ethernet アダプタをブリッジアダプタに bind することにします。&lt;br /&gt;
&lt;br /&gt;
* ブリッジを制御するための {{ic|brctl}} が入っている {{Pkg|bridge-utils}} をインストール。&lt;br /&gt;
&lt;br /&gt;
* IPv4 フォワーディングを有効にする:&lt;br /&gt;
&lt;br /&gt;
 # sysctl -w net.ipv4.ip_forward=1&lt;br /&gt;
&lt;br /&gt;
変更を永続的にするために、{{ic|/etc/sysctl.d/99-sysctl.conf}} の {{ic|1=net.ipv4.ip_forward = 0}} を {{ic|1=net.ipv4.ip_forward = 1}} に変えます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|tun}} モジュールをロードして起動時にロードするように設定してください。詳しくは[[カーネルモジュール]]を参照。&lt;br /&gt;
&lt;br /&gt;
* オプションでブリッジを作成します。詳細は [[netctl でブリッジ接続]] を参照してください。ブリッジに {{ic|br0}} という名前を付けるか、以下のスクリプトをブリッジの名前に変更してください。以下の {{ic|run-qemu}} スクリプトでは、リストにない場合は {{ic|br0}} が設定されます。これは、デフォルトではホストがブリッジを介してネットワークにアクセスしていないと想定されているからです。&lt;br /&gt;
&lt;br /&gt;
* Create the script that QEMU uses to bring up the tap adapter with {{ic|root:kvm}} 750 permissions:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/qemu-ifup|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Bringing up $1 for bridged mode...&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Adding $1 to br0...&amp;quot;&lt;br /&gt;
sudo /usr/bin/brctl addif br0 $1&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* QEMU 用に {{ic|root:kvm}} 750 パーミッションで {{ic|/etc/qemu-ifdown}} の tap アダプタを落とすスクリプトを作成:&lt;br /&gt;
{{hc|/etc/qemu-ifdown|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Executing /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
sudo /usr/bin/ip link set $1 down&lt;br /&gt;
sudo /usr/bin/brctl delif br0 $1&lt;br /&gt;
sudo /usr/bin/ip link delete dev $1&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|visudo}} を使って {{ic|sudoers}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Cmnd_Alias      QEMU=/usr/bin/ip,/usr/bin/modprobe,/usr/bin/brctl&lt;br /&gt;
%kvm     ALL=NOPASSWD: QEMU&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* 以下の {{ic|run-qemu}} スクリプトを使って QEMU を起動します:&lt;br /&gt;
&lt;br /&gt;
{{hc|run-qemu|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
: &#039;&lt;br /&gt;
e.g. with img created via:&lt;br /&gt;
qemu-img create -f qcow2 example.img 90G&lt;br /&gt;
run-qemu -cdrom archlinux-x86_64.iso -boot order=d -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
run-qemu -drive file=example.img,format=qcow2 -m 4G -enable-kvm -cpu host -smp 4&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
nicbr0() {&lt;br /&gt;
    sudo ip link set dev $1 promisc on up &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope host &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope site &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip addr flush dev $1 scope global &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
    sudo ip link set dev $1 master br0 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
_nicbr0() {&lt;br /&gt;
    sudo ip link set $1 promisc off down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $1 nomaster &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HASBR0=&amp;quot;$( ip link show | grep br0 )&amp;quot;&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    ROUTER=&amp;quot;192.168.1.1&amp;quot;&lt;br /&gt;
    SUBNET=&amp;quot;192.168.1.&amp;quot;&lt;br /&gt;
    NIC=$(ip link show | grep en | grep &#039;state UP&#039; | head -n 1 | cut -d&amp;quot;:&amp;quot; -f 2 | xargs)&lt;br /&gt;
    IPADDR=$(ip addr show | grep -o &amp;quot;inet $SUBNET\([0-9]*\)&amp;quot; | cut -d &#039; &#039; -f2)&lt;br /&gt;
    sudo ip link add name br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 up&lt;br /&gt;
    sudo ip addr add $IPADDR/24 brd + dev br0&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route add default via $ROUTER dev br0 onlink&lt;br /&gt;
    nicbr0 $NIC&lt;br /&gt;
    sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
USERID=$(whoami)&lt;br /&gt;
precreationg=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
sudo ip tuntap add user $USERID mode tap&lt;br /&gt;
postcreation=$(ip tuntap list | cut -d: -f1 | sort)&lt;br /&gt;
TAP=$(comm -13 &amp;lt;(echo &amp;quot;$precreationg&amp;quot;) &amp;lt;(echo &amp;quot;$postcreation&amp;quot;))&lt;br /&gt;
nicbr0 $TAP&lt;br /&gt;
&lt;br /&gt;
printf -v MACADDR &amp;quot;52:54:%02x:%02x:%02x:%02x&amp;quot; $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff )) $(( $RANDOM &amp;amp; 0xff)) $(( $RANDOM &amp;amp; 0xff ))&lt;br /&gt;
qemu-system-x86_64 -net nic,macaddr=$MACADDR,model=virtio \&lt;br /&gt;
    -net tap,ifname=$TAP,script=no,downscript=no,vhost=on \&lt;br /&gt;
    $@&lt;br /&gt;
&lt;br /&gt;
_nicbr0 $TAP&lt;br /&gt;
sudo ip link set dev $TAP down &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
sudo ip tuntap del $TAP mode tap&lt;br /&gt;
&lt;br /&gt;
if [ -z $HASBR0 ] ; then&lt;br /&gt;
    _nicbr0 $NIC&lt;br /&gt;
    sudo ip addr del dev br0 $IPADDR/24 &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev br0 down&lt;br /&gt;
    sudo ip link delete br0 type bridge &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip route del default &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    sudo ip link set dev $NIC up&lt;br /&gt;
    sudo ip route add default via $ROUTER dev $NIC onlink &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
それから仮想マシンを起動するために、以下のようにコマンドを実行して下さい&lt;br /&gt;
&lt;br /&gt;
 $ run-qemu -hda &#039;&#039;myvm.img&#039;&#039; -m 512&lt;br /&gt;
&lt;br /&gt;
* パフォーマンスとセキュリティ上の理由で [http://ebtables.netfilter.org/documentation/bridge-nf.html ブリッジ上のファイアウォール] は無効化するのが推奨されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/10-disable-firewall-on-bridge.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
net.bridge.bridge-nf-call-ip6tables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-iptables = 0&lt;br /&gt;
net.bridge.bridge-nf-call-arptables = 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
起動時に上記のパラメータを適用するには、ブート時に br-netfilter モジュールをロードする必要があります。そうしないと、sysctl がパラメータを変更しようとしたときに、そのパラメータが存在しないことになります。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/br_netfilter.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
br_netfilter&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
すぐに変更を適用するには {{ic|sysctl -p /etc/sysctl.d/10-disable-firewall-on-bridge.conf}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.libvirt.org/page/Networking#Creating_network_initscripts libvirt wiki] や [https://bugzilla.redhat.com/show_bug.cgi?id=512206 Fedora bug 512206] を参照。起動中にファイルが存在しないというエラーが起こるときは、起動時に {{ic|bridge}} モジュールをロードするようにしてください。[[カーネルモジュール#systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
または、次のようにルールを追加することで全てのトラフィックをブリッジで通すように [[iptables]] を設定することができます:&lt;br /&gt;
&lt;br /&gt;
 -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==== iptables による物理デバイスと Tap デバイスのネットワーク共有 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|Internet_sharing|Duplication, not specific to QEMU.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ブリッジネットワークは、有線インターフェイス (eth0 など) 間では正常に動作し、セットアップも簡単です。ただし、ホストがワイヤレスデバイスを介してネットワークに接続されている場合、ブリッジはできません。&lt;br /&gt;
&lt;br /&gt;
参考として [[ネットワークブリッジ#ブリッジ上の無線インターフェイス]] を参照。&lt;br /&gt;
&lt;br /&gt;
これを克服する1つの方法は、tap デバイスに静的 IP を設定し、linux に自動的にルーティングを処理させ、iptables ルールで tap インターフェイスとネットワークに接続されたデバイス間のトラフィックを転送することです。&lt;br /&gt;
&lt;br /&gt;
参考として [[インターネット共有]] を参照。&lt;br /&gt;
&lt;br /&gt;
tap や tun など、デバイス間でネットワークを共有するために必要なものを見つけることができます。次に、必要なホスト構成のヒントを示します。上記の例で示したように、クライアントは、tap インターフェイスに割り当てられた IP をゲートウェイとして、静的 IP を設定する必要があります。注意点は、DNS サーバーがネットワークに接続されているホストデバイスから別のホストデバイスに変更された場合は、クライアント上の DNS サーバーを手動で編集する必要があることです。&lt;br /&gt;
&lt;br /&gt;
起動毎に IP 転送を行うようにするには、{{ic|/etc/sysctl.d}} 内の sysctl 設定ファイルに次の行を追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
 net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
 net.ipv6.conf.all.forwarding = 1&lt;br /&gt;
&lt;br /&gt;
iptables のルールは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # Forwarding from/to outside&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_0} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_1} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${INT} -o ${EXT_2} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_0} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_1} -o ${INT} -j ACCEPT&lt;br /&gt;
 iptables -A FORWARD -i ${EXT_2} -o ${INT} -j ACCEPT&lt;br /&gt;
 # NAT/Masquerade (network address translation)&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_0} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_1} -j MASQUERADE&lt;br /&gt;
 iptables -t nat -A POSTROUTING -o ${EXT_2} -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
上記は、ネットワークに接続された3つのデバイスが、1つの内部デバイスとトラフィックを共有していると仮定しています。例えば次のようなものです:&lt;br /&gt;
&lt;br /&gt;
 INT=tap0&lt;br /&gt;
 EXT_0=eth0&lt;br /&gt;
 EXT_1=wlan0&lt;br /&gt;
 EXT_2=tun0&lt;br /&gt;
&lt;br /&gt;
上記は、tap デバイスとの有線および無線接続の共有を可能にする転送を示しています。&lt;br /&gt;
&lt;br /&gt;
示されている転送ルールはステートレスであり、純粋な転送のためのものです。特定のトラフィックを制限し、ゲストや他の人を保護するためにファイアウォールを設置することを考えることができます。しかし、これらはネットワークパフォーマンスを低下させます。一方、シンプルなブリッジにはそのようなものはありません。&lt;br /&gt;
&lt;br /&gt;
おまけ: 接続が有線または無線のいずれであっても、tun デバイスを使用してリモートサイトに VPN 経由で接続された場合、その接続用にオープンされた tun デバイスが tun0 であり、事前のiptablesルールが適用されていると仮定すると、リモート接続もゲストと共有されます。これにより、ゲストも VPN 接続をオープンする必要がなくなります。繰り返しますが、ゲストネットワークは静的である必要があるため、この方法でホストをリモート接続する場合、おそらくゲスト上の DNS サーバーを編集する必要あります。&lt;br /&gt;
&lt;br /&gt;
=== VDE2 によるネットワーク ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VDE とは? ====&lt;br /&gt;
&lt;br /&gt;
VDE は Virtual Distributed Ethernet の略です。[[User-mode Linux|uml]]_switch の拡張として始まりました。仮想ネットワークを管理するためのツールボックスです。&lt;br /&gt;
&lt;br /&gt;
基本的にはソケットである仮想スイッチを作成して、物理マシンと仮想マシンを両方ともスイッチに&amp;quot;接続&amp;quot;するという考えになります。以下で説明する設定はとてもシンプルです。ただし、VDE はさらに強力な力を持っており、仮想スイッチ同士を接続したり、別のホストでスイッチを動作させスイッチのトラフィックを監視することなどができます。[https://wiki.virtualsquare.org/ プロジェクトのドキュメント] を読むことを推奨。&lt;br /&gt;
&lt;br /&gt;
この方法の利点はユーザーに sudo 権限を与える必要がないということです。通常ユーザーに modprobe の実行を許可する必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
VDE サポートは {{Pkg|vde2}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
この設定では、tun/tap を使ってホストに仮想インターフェイスを作成します。{{ic|tun}} モジュールをロード (詳しくは[[カーネルモジュール]]を参照):&lt;br /&gt;
&lt;br /&gt;
 # modprobe tun&lt;br /&gt;
&lt;br /&gt;
仮想スイッチを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
上記のコマンドでスイッチと {{ic|tap0}} が作成され、接続され、そして {{ic|users}} グループのユーザーがスイッチを使えるようにします。&lt;br /&gt;
&lt;br /&gt;
インターフェイスは接続されてもまだ設定がされていません。設定するには、次のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 # ip addr add 192.168.100.254/24 dev tap0&lt;br /&gt;
&lt;br /&gt;
そして、通常ユーザーで {{ic|-net}} オプションを使って KVM を実行してください:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic -net vde -hda &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
物理ネットワークでやるのと同じようにゲストのネットワークを設定してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|仮想マシンからインターネットにアクセスするためにタップデバイスに NAT を設定することができます。詳しくは[[インターネット共有#NAT の有効化]]を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
VDE を起動するメインスクリプトの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/scripts/qemu-network-env|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# QEMU/VDE network environment preparation script&lt;br /&gt;
&lt;br /&gt;
# The IP configuration for the tap device that will be used for&lt;br /&gt;
# the virtual machine network:&lt;br /&gt;
&lt;br /&gt;
TAP_DEV=tap0&lt;br /&gt;
TAP_IP=192.168.100.254&lt;br /&gt;
TAP_MASK=24&lt;br /&gt;
TAP_NETWORK=192.168.100.0&lt;br /&gt;
&lt;br /&gt;
# Host interface&lt;br /&gt;
NIC=eth0&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        echo -n &amp;quot;Starting VDE network for QEMU: &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # If you want tun kernel module to be loaded by script uncomment here&lt;br /&gt;
	#modprobe tun 2&amp;gt;/dev/null&lt;br /&gt;
	## Wait for the module to be loaded&lt;br /&gt;
 	#while ! lsmod | grep -q &amp;quot;^tun&amp;quot;; do echo &amp;quot;Waiting for tun device&amp;quot;; sleep 1; done&lt;br /&gt;
&lt;br /&gt;
        # Start tap switch&lt;br /&gt;
        vde_switch -tap &amp;quot;$TAP_DEV&amp;quot; -daemon -mod 660 -group users&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface up&lt;br /&gt;
        ip address add &amp;quot;$TAP_IP&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; dev &amp;quot;$TAP_DEV&amp;quot;&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; up&lt;br /&gt;
&lt;br /&gt;
        # Start IP Forwarding&lt;br /&gt;
        echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        iptables -t nat -A POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        echo -n &amp;quot;Stopping VDE network for QEMU: &amp;quot;&lt;br /&gt;
        # Delete the NAT rules&lt;br /&gt;
        iptables -t nat -D POSTROUTING -s &amp;quot;$TAP_NETWORK&amp;quot;/&amp;quot;$TAP_MASK&amp;quot; -o &amp;quot;$NIC&amp;quot; -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
        # Bring tap interface down&lt;br /&gt;
        ip link set &amp;quot;$TAP_DEV&amp;quot; down&lt;br /&gt;
&lt;br /&gt;
        # Kill VDE switch&lt;br /&gt;
        pgrep vde_switch | xargs kill -TERM&lt;br /&gt;
        ;;&lt;br /&gt;
  restart|reload)&lt;br /&gt;
        $0 stop&lt;br /&gt;
        sleep 1&lt;br /&gt;
        $0 start&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop|restart|reload}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上のスクリプトを使う systemd サービスの例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu-network-env.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Manage VDE Switch&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/etc/systemd/scripts/qemu-network-env start&lt;br /&gt;
ExecStop=/etc/systemd/scripts/qemu-network-env stop&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|qemu-network-env}} に [[実行可能属性]] を付与するようにパーミッションを変更。&lt;br /&gt;
&lt;br /&gt;
通常通り {{ic|qemu-network-env.service}} を [[開始]] できます。&lt;br /&gt;
&lt;br /&gt;
====他の方法====&lt;br /&gt;
&lt;br /&gt;
上の方法が動作しない場合やカーネル設定, TUN, dnsmasq, iptables を変えたくない場合は以下のコマンドで同じ結果になります。&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -daemon -mod 660 -group users&lt;br /&gt;
 # slirpvde --dhcp --daemon&lt;br /&gt;
&lt;br /&gt;
ホストのネットワークの接続を使って仮想マシンを起動するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -net nic,macaddr=52:54:00:00:EE:03 -net vde &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== VDE2 Bridge ===&lt;br /&gt;
&lt;br /&gt;
[https://selamatpagicikgu.wordpress.com/2011/06/08/quickhowto-qemu-networking-using-vde-tuntap-and-bridge/ quickhowto: qemu networking using vde, tun/tap, and bridge] に基づいています。vde に接続された仮想マシンは外部から参照出来る状態になります。例えば、ADSL ルーターから直接 DHCP の設定を個々の仮想マシンが受け取ることが可能です。&lt;br /&gt;
&lt;br /&gt;
==== 基本 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|tun}} モジュールと {{Pkg|bridge-utils}} パッケージが必要です。&lt;br /&gt;
&lt;br /&gt;
vde2/tap デバイスを作成:&lt;br /&gt;
&lt;br /&gt;
 # vde_switch -tap tap0 -daemon -mod 660 -group users&lt;br /&gt;
 # ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
ブリッジを作成:&lt;br /&gt;
&lt;br /&gt;
 # brctl addbr br0&lt;br /&gt;
&lt;br /&gt;
デバイスを追加:&lt;br /&gt;
&lt;br /&gt;
 # brctl addif br0 eth0&lt;br /&gt;
 # brctl addif br0 tap0&lt;br /&gt;
&lt;br /&gt;
ブリッジインターフェイスを設定:&lt;br /&gt;
&lt;br /&gt;
 # dhcpcd br0&lt;br /&gt;
&lt;br /&gt;
==== 起動スクリプト ====&lt;br /&gt;
&lt;br /&gt;
全てのデバイスを設定する必要があります。ブリッジに必要なのは IP アドレスだけです。ブリッジの物理デバイスは (例: {{ic|eth0}})、[[netctl]] でカスタム Ethernet プロファイルを使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/netctl/ethernet-noip|2=&lt;br /&gt;
Description=&#039;A more versatile static Ethernet connection&#039;&lt;br /&gt;
Interface=eth0&lt;br /&gt;
Connection=ethernet&lt;br /&gt;
IP=no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下のカスタム systemd サービスを使うことで {{ic|users}} ユーザーグループで使用する VDE2 tap インターフェイスを作成することができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/vde2@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Network Connectivity for %i&lt;br /&gt;
Wants=network.target&lt;br /&gt;
Before=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/bin/vde_switch -tap %i -daemon -mod 660 -group users&lt;br /&gt;
ExecStart=/usr/bin/ip link set dev %i up&lt;br /&gt;
ExecStop=/usr/bin/ip addr flush dev %i&lt;br /&gt;
ExecStop=/usr/bin/ip link set dev %i down&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして最後に、[[netctl でブリッジ接続|netctl でブリッジネットワーク]]を作成することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== 省略記法の設定 ===&lt;br /&gt;
&lt;br /&gt;
QEMU をさまざまなネットワーク・オプションとともに頻繁に使用している場合、{{ic|-netdev}} と {{ic|-device}} の引数のペアを大量に作成している可能性があり、かなり反復的になっています。代わりに {{ic|-nic}} 引数を使って、 {{ic|-netdev}} と {{ic|-device}} を結合することもできます。たとえば、次のような引数は:&lt;br /&gt;
&lt;br /&gt;
 -netdev tap,id=network0,ifname=tap0,script=no,downscript=no,vhost=on -device virtio-net-pci,netdev=network0&lt;br /&gt;
&lt;br /&gt;
こうなります:&lt;br /&gt;
&lt;br /&gt;
 -nic tap,script=no,downscript=no,vhost=on,model=virtio-net-pci&lt;br /&gt;
&lt;br /&gt;
ネットワーク ID がないこと、およびデバイスが {{ic|1=model=}} で作成されたことに注意してください。{{ic|-nic}} パラメータの前半は {{ic|-netdev}} パラメータですが、後半 ({{ic|1=model=}} の後) はデバイスに関連付けられています。同じパラメータ (たとえば、 {{ic|1=smb=}}) が使用されます。ネットワークを完全に無効にするには、 {{ic|-nic none}} を使用します。&lt;br /&gt;
&lt;br /&gt;
使用できるパラメーターの詳細については、 [https://qemu.weilnetz.de/doc/6.0/system/net.html QEMU ネットワークのドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== グラフィックカード ==&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|-curses}} コマンド・ライン・オプションを使用して、標準のグラフィックカードのテキストモードをエミュレートできます。これにより、テキストターミナル内でテキストを入力しテキスト出力を直接見ることができます。代わりに、 {{ic|-nographic}} も同様の目的を果たします。&lt;br /&gt;
&lt;br /&gt;
QEMU はいくつかのタイプの VGA カードをエミュレートできます。カードタイプは {{ic|-vga &#039;&#039;type&#039;&#039;}} コマンドラインオプションで渡され、 {{ic|std}}, {{ic|qxl}}, {{ic|vmware}}, {{ic|virtio}}, {{ic|cirrus}} または {{ic|none}} のいずれかになります。&lt;br /&gt;
&lt;br /&gt;
=== std ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-vga std}} では 2560 x 1600 ピクセルまでの解像度を得ることができます。QEMU 2.2 からデフォルトとなっています。&lt;br /&gt;
&lt;br /&gt;
=== qxl ===&lt;br /&gt;
&lt;br /&gt;
QXL は、2D サポートのある準仮想化グラフィックスドライバーです。これを使用するには、{{ic|-vga qxl}} オプションを渡して、ゲストにドライバーをインストールしてください。QXL を使用する場合、グラフィックのパフォーマンスを向上させるために [[#SPICE]] を使用するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
Linux ゲストでは、適切なパフォーマンスを得るために {{ic|qxl}} と {{ic|bochs_drm}} カーネルモジュールをロードしてください。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です。これは QHD(2560x1440) までの解像度を駆動するのに十分です。より高い解像度を有効にするには、 [[#マルチモニターのサポート|vga_memmb を増やします]]。&lt;br /&gt;
&lt;br /&gt;
=== vmware ===&lt;br /&gt;
&lt;br /&gt;
多少バグが存在しますが、std や cirrus よりもパフォーマンスが上です。Arch Linux ゲスト用の VMware ドライバー {{Pkg|xf86-video-vmware}} と {{Pkg|xf86-input-vmmouse}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== virtio ===&lt;br /&gt;
&lt;br /&gt;
{{ic|virtio-vga}} / {{ic|virtio-gpu}} は [https://virgil3d.github.io/ virgl] ベースの準仮想化 3D グラフィックスドライバです。現在開発中で、オプション {{ic|1=galla-drivers=virgl}} でコンパイルされた {{Pkg|mesa}} (&amp;gt;=11.2) を持つごく最近 (&amp;gt;=4.4) のLinuxゲストのみをサポートしています。&lt;br /&gt;
&lt;br /&gt;
ゲストシステムで 3D アクセラレーションを有効にするには、{{ic|-device virtio-vga-gl}} でこの vga を選択し、ディスプレイデバイスで sdl および gtk ディスプレイ出力に対してそれぞれ {{ic|1=-display sdl,gl=on}} または {{ic|1=-display gtk,gl=on}} を使用して OpenGL コンテキストを有効にします。ゲスト側のカーネルログを見ることで設定が問題ないか確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|# dmesg {{!}} grep drm |&lt;br /&gt;
[drm] pci: virtio-vga detected&lt;br /&gt;
[drm] virgl 3d acceleration enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cirrus ===&lt;br /&gt;
&lt;br /&gt;
cirrus グラフィカルアダプタは [http://wiki.qemu.org/ChangeLog/2.2#VGA 2.2 以前まではデフォルト] でした。新しいシステムでは [https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ 使用しないほうがよい] とされています。&lt;br /&gt;
&lt;br /&gt;
=== none ===&lt;br /&gt;
&lt;br /&gt;
これは VGA カードが全くない PC と同じようになります。{{ic|-vnc}} オプションを使ってもアクセスすることはできません。また、QEMU に VGA カードをエミュレートさせ SDL ディスプレイを無効にする {{ic|-nographic}} オプションとは異なります。&lt;br /&gt;
&lt;br /&gt;
== SPICE ==&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/ SPICE プロジェクト]  は、仮想マシンへのリモートアクセスをシームレスに行うための完全なオープンソースソリューションを提供することを目的としています。&lt;br /&gt;
&lt;br /&gt;
=== ホストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
リモートデスクトッププロトコルとして SPICE を使用して起動する例を示します。これには、ホストからのコピーと貼り付けのサポートも含まれています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -device virtio-serial-pci -spice port=5930,disable-ticketing=on -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
パラメータの意味は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
# {{ic|-device virtio-serial-pci}} は virtio-serial デバイスを追加します&lt;br /&gt;
# {{ic|1=-spice port=5930,disable-ticketing=on}} は spice チャネルを待ち受ける TCP ポート {{ic|5930}} を設定し、クライアントが認証なしで接続できるようにします {{Tip|TCP ポートの代わりに [[wikipedia:Unix_socket Unix ソケット]] を使用すると、ホストシステムでネットワークスタックを使用する必要が無くなります。ネットワークと関連プロトコルを使用するためにパケットをカプセル化したりカプセル化を解除することもありません。ソケットはハードドライブ上の i ノードによってのみ識別されます。したがって、パフォーマンス的にはこちらの方が優れていると考えられています。代わりに {{ic|1=-spice unix=on,addr=/tmp/vm_spice.socket,disable-ticketing=on}} を使用します。}}&lt;br /&gt;
# {{ic|1=-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0}} は virtio-serial デバイスの spice vdagent 用のポートを開きます。&lt;br /&gt;
# {{ic|1=-chardev spicevmc,id=spicechannel0,name=vdagent}} は、そのポートに spicevmc の chardev を追加します。{{ic|virtserialport}} デバイスの {{ic|1=chardev=}} オプションが、{{ic|chardev}} オプション (この例では {ic|spicechannel0}}) に指定された {{ic|1=id=}} オプションと一致することが重要です。また、ポート名が {{ic|com.redhat.spice.0}} であることも重要です。これは、vdagent がゲスト内で探している名前空間であるためです。最後に {{ic|1=name=vdagent}} を指定して、spice がこのチャネルの目的を認識できるようにします。&lt;br /&gt;
&lt;br /&gt;
=== SPICE クライアントでゲストに接続する ===&lt;br /&gt;
&lt;br /&gt;
ゲストに接続するには SPICE クライアントが必要です。Arch では、次のクライアントを使用できます:&lt;br /&gt;
&lt;br /&gt;
* {{App|virt-viewer|プロトコル開発者が推奨する SPICE クライアント。virt-manager プロジェクトのサブセットです。|https://virt-manager.org/|{{Pkg|virt-viewer}}}}&lt;br /&gt;
* {{App|spice-gtk|SPICE GTK クライアント。SPICE プロジェクトのサブセットです。他のアプリケーションにウィジェットとして埋め込まれています。|https://www.spice-space.org/|{{Pkg|spice-gtk}}}}&lt;br /&gt;
&lt;br /&gt;
スマートフォンやその他のプラットフォームで動作するクライアントについては、[https://www.spice-space.org/download.html spice-space download] の &#039;&#039;その他のクライアント&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
==== SPICE クライアントを手動で実行する ====&lt;br /&gt;
&lt;br /&gt;
Unix ソケット {{ic|/tmp/vm_spice.socket}} で待ち受けるゲストに接続する方法の1つは、望みのクライアントに応じて {{ic|$remote-viewer spice+unix:///tmp/vm_spice.socket}} または {{ic|1=$spicy--uri=&amp;quot;spice+unix:///tmp/vm_spice.socket&amp;quot;}} を使用して SPICE クライアントを手動で実行することです。SPICE モードの QEMU はリモートデスクトップサーバーのように振る舞うため、{{ic|-daemonize}} パラメータを指定してデーモンモードで QEMU を実行する方が便利な場合があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
SSH トンネリングを使用してゲストに接続するには、次のタイプのコマンドを使用できます: {{bc|$ ssh -fL 5999:localhost:5930 &#039;&#039;my.domain.org&#039;&#039; sleep 10; spicy -h 127.0.0.1 -p 5999}}&lt;br /&gt;
この例では、&#039;&#039;spicy&#039;&#039; をローカルポート {{ic|5999}} に接続し、SSH 経由でアドレス &#039;&#039;my.domain.org&#039;&#039; 、ポート {{ic|5930}} で示されるゲストの SPICE サーバへ転送しています。&lt;br /&gt;
コマンド {{ic|sleep 10}} をバックグラウンドで実行するよう ssh に要求する {{ic|-f}} オプションに注意してください。このようにして、ssh セッションはクライアントがアクティブな間実行され、クライアントが終了すると自動的に閉じます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== QEMU で SPICE クライアントを実行する ====&lt;br /&gt;
&lt;br /&gt;
ディスプレイが {{ic|-display spice-app}} パラメータを使用して SPICE に設定されている場合、QEMU は適切なソケットで SPICE クライアントを自動的に起動できます。これは、[[XDG MIME Applications#mimeapps.list mimeapps.list]] ファイルによって決定されたシステムのデフォルト SPICE クライアントをビューアとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ゲストで SPICE サポートを有効にする ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arch Linux ゲスト&#039;&#039; では、マルチモニタまたはクリップボード共有のサポートを改善するために、以下のパッケージをインストールする必要があります:&lt;br /&gt;
* {{Pkg|spice-vdagent}}: クライアントと X-session などとの間でコピー&amp;amp;ペーストを可能にする Spice エージェント xorg クライアント。(GNOME 以外のデスクトップで動作させるための回避策については、修正されるまで、この [https://github.com/systemd/systemd/issues/18791 イシュー] を参照してください。)&lt;br /&gt;
* {{Pkg|xf86-video-qxl}}: Xorg X11 qxl ビデオドライバ&lt;br /&gt;
&#039;&#039;その他のオペレーティングシステム&#039;&#039; のゲストについては、spice-space [https://www.spice-space.org/download.html download] の &#039;&#039;ゲスト&#039;&#039; セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== SPICE によるパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
SPICE でパスワード認証を使用可能にする場合は、{{ic|-spice}} 引数から {{ic|disable-ticketing}} を削除し、代わりに {{ic|1=password=&#039;&#039;yourpassword&#039;&#039;}} を追加する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vga qxl -spice port=5900,password=&#039;&#039;yourpassword&#039;&#039; -device virtio-serial-pci -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 -chardev spicevmc,id=spicechannel0,name=vdagent&lt;br /&gt;
&lt;br /&gt;
これで、SPICE クライアントが SPICE サーバに接続するためのパスワードを要求するようになります。&lt;br /&gt;
&lt;br /&gt;
=== SPICE による TLS 暗号化通信 ===&lt;br /&gt;
&lt;br /&gt;
SPICE サーバと通信するために TLS 暗号化を設定することもできます。まず、次のファイルを含むディレクトリを作成する必要があります(名前は指定されたとおりでなければなりません):&lt;br /&gt;
&lt;br /&gt;
* {{ic|ca-cert.pem}}: CA マスター証明書。&lt;br /&gt;
* {{ic|server-cert.pem}}: {{ic|ca-cert.pem}} で署名されたサーバ証明書。&lt;br /&gt;
* {{ic|server-key.pem}}: サーバの秘密キー。&lt;br /&gt;
&lt;br /&gt;
[https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates Spice User Manual] に、サーバ用に独自に作成した認証局で自己署名証明書を生成する例が示されています。&lt;br /&gt;
&lt;br /&gt;
その後、上記の説明と同様に SPICE を使用して QEMU を実行しますが、{{ic|-spice}} 引数として: {{ic|1=-spice tls-port=5901,password=&#039;&#039;yourpassword&#039;&#039;,x509-dir=&#039;&#039;/path/to/pki_certs&#039;&#039;}} を使用します。、{{ic|&#039;&#039;/path/to/pki_certs&#039;&#039;}} は、前述の3つの必要なファイルを含むディレクトリのパスとなります。&lt;br /&gt;
&lt;br /&gt;
これで、{{Pkg|virt-viewer}} を使用してサーバに接続できるようになりました:&lt;br /&gt;
&lt;br /&gt;
 $ remote-viewer spice://&#039;&#039;hostname&#039;&#039;?tls-port=5901 --spice-ca-file=&#039;&#039;/path/to/ca-cert.pem&#039;&#039; --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
{{ic|--spice-host-subject}} パラメータは {{ic|server-cert.pem}} サブジェクトに従って設定する必要があることに注意してください。また、サーバ証明書を検証するために {{ic|ca-cert.pem}} を各クライアントにコピーしておく必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|--spice-host-subject}} (エントリはカンマで区切られる) に指定するサーバー証明書の正しいフォーマットのサブジェクトは以下のコマンドで確認することができます: {{bc|&amp;lt;nowiki&amp;gt;$ openssl x509 -noout -subject -in server-cert.pem | cut -d&#039; &#039; -f2- | sed &#039;s/\///&#039; | sed &#039;s/\//,/g&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同等の {{Pkg|spice-gtk}} コマンドは:&lt;br /&gt;
&lt;br /&gt;
 $ spicy -h &#039;&#039;hostname&#039;&#039; -s 5901 --spice-ca-file=ca-cert.pem --spice-host-subject=&amp;quot;C=&#039;&#039;XX&#039;&#039;,L=&#039;&#039;city&#039;&#039;,O=&#039;&#039;organization&#039;&#039;,CN=&#039;&#039;hostname&#039;&#039;&amp;quot; --spice-secure-channels=all&lt;br /&gt;
&lt;br /&gt;
== VNC ==&lt;br /&gt;
&lt;br /&gt;
{{ic|-vnc :&#039;&#039;X&#039;&#039;}} オプションを追加すると、QEMU に VGA ディスプレイを VNC セッションにリダイレクトさせることができます。ディスプレイ番号を {{ic|&#039;&#039;X&#039;&#039;}} に置き換えます (0 は 5900 で、1 は 5901... でリッスンします)。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0&lt;br /&gt;
&lt;br /&gt;
[[#ブート時に QEMU 仮想マシンを起動する]] セクションにも例が示されています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|デフォルトのVNCサーバー設定では、いかなる形式の認証も使用されません。どのユーザーもどのホストからでも接続できます。}}&lt;br /&gt;
&lt;br /&gt;
=== 基本的なパスワード認証 ===&lt;br /&gt;
&lt;br /&gt;
アクセスパスワードは {{ic|password}} オプションを使用して簡単に設定できます。QEMU モニターでパスワードを指定する必要があり、パスワードが提供された場合にのみ接続が可能になります。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
QEMU モニターでは、{{ic|change vnc password}} コマンドを使用してパスワードを設定し、次にパスワードを指定します。&lt;br /&gt;
&lt;br /&gt;
次のコマンドラインは、直接 vnc をパスワードを付きで実行します。&lt;br /&gt;
&lt;br /&gt;
 $ printf &amp;quot;change vnc password\n%s\n&amp;quot; MYPASSWORD | qemu-system-x86_64 -vnc :0,password -monitor stdio&lt;br /&gt;
&lt;br /&gt;
{{Note|パスワードは 8 文字までに制限されており、総当たり攻撃で推測できます。パブリックネットワークではより厳重に保護することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを作成する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-audiodev}} フラグは、ホスト上のオーディオバックエンドドライバとそのオプションを設定します。&lt;br /&gt;
&lt;br /&gt;
利用可能なオーディオバックエンドドライバを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -audiodev help&lt;br /&gt;
&lt;br /&gt;
オプション設定のリストについては {{man|1|qemu}} のマニュアルページに詳細があります。&lt;br /&gt;
&lt;br /&gt;
最低限、オーディオバックエンドを選択し、[[PulseAudio]] の ID を設定する必要があります。たとえば:&lt;br /&gt;
&lt;br /&gt;
 -audiodev pa,id=snd0&lt;br /&gt;
&lt;br /&gt;
=== オーディオバックエンドを使用する ===&lt;br /&gt;
&lt;br /&gt;
==== Intel HD Audio ====&lt;br /&gt;
&lt;br /&gt;
Intel HD Audio エミュレーションの場合は、コントローラーとコーデックデバイスの両方を追加してください。使用可能なインテル HDA Audio デバイスを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -device help | grep hda&lt;br /&gt;
&lt;br /&gt;
オーディオコントローラを追加するには:&lt;br /&gt;
&lt;br /&gt;
 -device ich9-intel-hda&lt;br /&gt;
&lt;br /&gt;
また、オーディオコーデックを追加し、ホストオーディオバックエンド ID にマップします:&lt;br /&gt;
&lt;br /&gt;
 -device hda-output,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
==== Intel 82801AA AC97 ====&lt;br /&gt;
&lt;br /&gt;
AC97 エミュレーションの場合は、オーディオカードデバイスを追加し、ホストオーディオバックエンド ID にマップするだけです&lt;br /&gt;
&lt;br /&gt;
 -device AC97,audiodev=snd0&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* audiodev バックエンドが提供されていない場合、QEMU はそれを検索して自動的に追加します。これは単一の audiodev に対してのみ機能します。例えば {{ic|-device intel-hda -device hda-duplex}} はデフォルトの audiodev バックエンドを使用してゲスト上で {{ic|intel-hda}} をエミュレートします。&lt;br /&gt;
* ゲストマシン用のビデオグラフィックカードでエミュレートされたドライバも音質の問題を引き起こす可能性があります。1つずつテストして動作させてください。{{ic|&amp;lt;nowiki&amp;gt;qemu-system-x86_64 -h | grep vga&amp;lt;/nowiki&amp;gt;}} で可能なオプションを一覧できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== virtio ドライバーのインストール ==&lt;br /&gt;
&lt;br /&gt;
QEMU は [https://wiki.libvirt.org/page/Virtio virtio] ドライバを使って準仮想化ブロックデバイスとネットワークデバイスを使用する機能をゲストに提供し、より良いパフォーマンスとより低いオーバーヘッドを実現します。&lt;br /&gt;
&lt;br /&gt;
* virtio ブロックデバイスは、ディスクイメージを渡すためのオプション {{ic|-drive}} と、パラメータ {{ic|1=if=virtio}} を必要とします:&lt;br /&gt;
 $ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=&#039;&#039;&#039;virtio&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ネットワークでもほぼ同じです:&lt;br /&gt;
 $ qemu-system-x86_64 -nic user,model=&#039;&#039;&#039;virtio-net-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|これはゲストマシンが virtio デバイス用のドライバーを持っている場合にのみ機能します。Arch Linux を含む Linux には必要なドライバーが入っていますが、他のオペレーティングシステムで virtio デバイスが機能する保証はありません。}}&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux ゲストをインストールした後 virtio デバイスを使うには、次のモジュールをゲストでロードする必要があります: {{ic|virtio}}, {{ic|virtio_pci}}, {{ic|virtio_blk}}, {{ic|virtio_net}}, {{ic|virtio_ring}}。32ビットゲストの場合、特定の &amp;quot;virtio&amp;quot; モジュールは必要ありません。&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動したい場合、イニシャル ramdisk に必要なモジュールを含める必要があります。デフォルトでは、[[mkinitcpio]] の {{ic|autodetect}} フックによって管理されています。もしくは {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 配列を使用して必要なモジュールを組み込み、イニシャル ramdisk をリビルドしてください。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=&lt;br /&gt;
MODULES=(virtio virtio_blk virtio_pci virtio_net)}}&lt;br /&gt;
&lt;br /&gt;
virtio ディスクは前に {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;}} が付いて認識されます (例: {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;da}}, {{ic|&#039;&#039;&#039;v&#039;&#039;&#039;db}} など)。なので、virtio ディスクから起動する際は少なくとも {{ic|/etc/fstab}} や {{ic|/boot/grub/grub.cfg}} に変更を加える必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|/etc/fstab}} とブートローダーの両方で [[UUID]] を使ってディスクを参照する場合、何もする必要はありません。}}&lt;br /&gt;
&lt;br /&gt;
KVM による準仮想化に関する詳細は [https://www.linux-kvm.org/page/Boot_from_virtio_block_device ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-guest-agent}} をインストールすることでハイパーバイザの管理機能を拡張する QMP コマンドのサポートを得ることができます。&lt;br /&gt;
&lt;br /&gt;
=== Windows ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
==== Windows 用の virtio ドライバ ====&lt;br /&gt;
&lt;br /&gt;
Windows には virtio ドライバは付属していません。最新の安定版バージョンのドライバは Fedora によって定期的にビルドされており、ドライバのダウンロードの詳細は [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md virtio-win on GitHub] で提供されています。以降のセクションでは、ここで提供されている安定版 ISO ファイル [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso virtio-win.iso] を主に使用します。または、{{AUR|virtio-win}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== ブロックデバイスドライバ ====&lt;br /&gt;
&lt;br /&gt;
===== Windows の新規インストール =====&lt;br /&gt;
&lt;br /&gt;
インストール時にドライバをロードする必要があります。手順としては、プライマリディスクデバイスおよび Windows ISO インストールメディアとともに cdrom デバイスで virtio ドライバを含む ISO イメージをロードします。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 ... \&lt;br /&gt;
 -drive file=&#039;&#039;disk_image&#039;&#039;,index=0,media=disk,if=virtio \&lt;br /&gt;
 -drive file=&#039;&#039;windows.iso&#039;&#039;,index=2,media=cdrom \&lt;br /&gt;
 -drive file=&#039;&#039;virtio-win.iso&#039;&#039;,index=3,media=cdrom \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
インストール中、Windows インストーラが &amp;quot;Where do you want to install Windows?&amp;quot; と尋ねる段階で、ディスクを見つけられないという警告が表示されます。以下の手順に従ってください (アップデート適用済みの Windows Server 2012 R2 がベース):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Load Drivers&#039;&#039; オプションを選択。&lt;br /&gt;
* &#039;&#039;Hide drivers that are not compatible with this computer&#039;s hardware&#039;&#039; のチェックを外す。&lt;br /&gt;
* Browse ボタンをクリックして virtio iso の CDROM を開く。通常 &amp;quot;virtio-win-XX&amp;quot; という名前になります。&lt;br /&gt;
* {{ic|E:\viostor\[your-os]\amd64}} を選択して OK を押す。&lt;br /&gt;
&lt;br /&gt;
これで virtio ディスクが表示されるので、選択して、フォーマット・インストールすることができます。&lt;br /&gt;
&lt;br /&gt;
===== virtio を使用するように既存の Windows 仮想マシンを変更する =====&lt;br /&gt;
&lt;br /&gt;
virtio ディスクから起動するように既存の Windows ゲストを変更するには、起動時にゲストによって virtio ドライバがロードされる必要があります。&lt;br /&gt;
そのため、virtio モードでディスクイメージを起動できるようにする前に、起動時に virtio ドライバーをロードするように Windows に教える必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、まず virtio モードで接続される新しいディスクイメージを作成し、ドライバの検索をトリガします:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-img create -f qcow2 &#039;&#039;dummy.qcow2&#039;&#039; 1G&lt;br /&gt;
&lt;br /&gt;
ブートディスクは IDE モードのまま、フェイクディスクを virtio モード、ドライバ ISO イメージを使用して元の Windows ゲストを実行します。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=ide -drive file=&#039;&#039;dummy.qcow2&#039;&#039;,if=virtio -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
Windows はフェイクディスクを検出して適切なドライバを探します。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されている SCSI ドライブを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択します。CD-ROM 内のドライバフォルダに移動せず、単に CD-ROM ドライブを選択するだけで、Windows は適切なドライバを自動的に検索します (Windows 7 SP1 でテスト済み)。&lt;br /&gt;
&lt;br /&gt;
Windows に次回起動時にセーフモードで起動するように要求します。これは、Windows の &#039;&#039;msconfig.exe&#039;&#039; ツールを使用して行うことができます。セーフモードでは新しい virtio ドライバを含むすべてのドライバが起動時にロードされます。Windows は、起動時に virtio ドライバが必要であることを認識すると、将来の起動のためにそれを記憶します。&lt;br /&gt;
&lt;br /&gt;
セーフモードで起動するように指示されたら、仮想マシンをオフにして再度起動できます。今度の起動ディスクは virtio モードで接続されています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&lt;br /&gt;
&lt;br /&gt;
virtio ドライバがロードされた状態のセーフモードで起動されているはずです。これで  &#039;&#039;msconfig.exe&#039;&#039; に戻り、セーフモードでの起動を無効にして、Windows を再起動できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=if=virtio}} パラメータを使用してブルースクリーン・オブ・デスに遭遇した場合、virtio ディスクドライバがインストールされていないか、起動時にロードされていない可能性があります。セーフモードで再起動し、ドライバの構成を確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== ネットワークドライバ ====&lt;br /&gt;
&lt;br /&gt;
virtio ネットワークドライバーのインストールは少し簡単で、単に {{ic|-nic}} 引数を追加するだけです。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -m 4G -drive file=&#039;&#039;windows_disk_image&#039;&#039;,if=virtio -nic user,model=virtio-net-pci -cdrom virtio-win.iso&lt;br /&gt;
&lt;br /&gt;
ネットワークアダプタが検出され、そのドライバが検索されます。失敗した場合は、&#039;&#039;デバイスマネージャ&#039;&#039; に移動し、感嘆符アイコン(開いているはず)が表示されているネットワークアダプタを探し、&#039;&#039;ドライバの更新&#039;&#039; をクリックして仮想 CD-ROM を選択してください。ディレクトリを再帰的に検索するチェックボックスを選択することを忘れないでください。&lt;br /&gt;
&lt;br /&gt;
==== バルーンドライバ ====&lt;br /&gt;
&lt;br /&gt;
({{ic|virsh}} コマンドの {{ic|dommemstat}} などで) ゲストのメモリ状態を追跡したり実行時にゲストのメモリサイズを変えたい場合 (メモリサイズは変更できませんが、バルーンドライバを膨張させることでメモリ使用量を制限できます) 、ゲストにバルーンドライバをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
このためには、&#039;&#039;デバイス マネージャー&#039;&#039; にアクセスし、&#039;&#039;システム デバイス&#039;&#039; (または&#039;&#039;ほかのデバイス&#039;&#039; から認識されない PCI コントローラ) で &#039;&#039;PCI 標準 RAM コントローラ&#039;&#039; を検索し、&#039;&#039;ドライバの更新&#039;&#039; を選択してください。ウィンドウが開いたら &#039;&#039;コンピュータを参照して...&#039;&#039; を選択し、CD-ROM を選択してください(そして &#039;&#039;サブフォルダーも検索する&#039;&#039; チェックボックスを忘れないでください)。インストール後に再起動してください。これによりドライバがインストールされ、バルーンを膨らませることができます (たとえば hmp コマンド {{ic|balloon &#039;&#039;memory_size&#039;&#039;}} によって、バルーンはゲストの使用可能なメモリサイズを &#039;&#039;memory_size&#039;&#039; に縮小するために可能な限り多くのメモリを消費します)。しかし、それでもゲストのメモリ状態を追跡することはできません。これを行うには &#039;&#039;Balloon&#039;&#039; サービスを正しくインストールする必要があります。管理者としてコマンドラインを開いて、CD-ROM から &#039;&#039;Balloon&#039;&#039; ディレクトリに移動し、システムとアーキテクチャに応じてさらに深く移動してください。&#039;&#039;amd64&#039;&#039; (&#039;&#039;x86&#039;&#039;) ディレクトリまで移動したら {{ic|blnsrv.exe -i}} を実行するとインストールが実行されます。その後 {{ic|virsh}} コマンド {{ic|dommemstat}} はサポートされているすべての値を出力するはずです。&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ゲストを用意する ===&lt;br /&gt;
&lt;br /&gt;
FreeBSD 8.3 以降を使っている場合は {{ic|emulators/virtio-kmod}} port をインストールしてください、10.0-CURRENT ではカーネルに含まれています。インストール後、{{ic|/boot/loader.conf}} ファイルに以下を追加します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
virtio_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_pci_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_blk_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
if_vtnet_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
virtio_balloon_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして次を実行して {{ic|/etc/fstab}} を修正してください:&lt;br /&gt;
&lt;br /&gt;
 # sed -ibak &amp;quot;s/ada/vtbd/g&amp;quot; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
それから {{ic|/etc/fstab}} が問題ないか確認してください。何かがおかしい場合、レスキュー CD で起動して {{ic|/etc/fstab.bak}} を {{ic|/etc/fstab}} にコピーして戻します。&lt;br /&gt;
&lt;br /&gt;
== QEMU モニタ ==&lt;br /&gt;
&lt;br /&gt;
QEMU の実行中、実行中の仮想マシンと対話するためのいくつかの方法を提供するために、モニタコンソールが提供されます。QEMU モニタは、現在の仮想マシンに関する情報の取得、デバイスのホットプラグ、仮想マシンの現在の状態のスナップショットの作成など、興味深い機能を提供します。すべてのコマンドのリストを表示するには、QEMU モニタコンソールで {{ic|help}} または {{ic|?}} を実行するか、[https://www.qemu.org/docs/master/system/monitor.html QEMU 公式ドキュメント] の関連セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールにアクセスする ===&lt;br /&gt;
&lt;br /&gt;
==== グラフィカルビュー ====&lt;br /&gt;
&lt;br /&gt;
デフォルトグラフィックオプションの {{ic|std}} を使用している場合、QEMU ウィンドウで {{ic|Ctrl+Alt+2}} を押すか、&#039;&#039;View &amp;gt; compatmonitor0&#039;&#039; をクリックすることで QEMU モニタにアクセスできます。仮想マシンのグラフィカルビューに戻るには、{{ic|Ctrl+Alt+1}} を押すか、&#039;&#039;View &amp;gt; VGA&#039;&#039; をクリックします。&lt;br /&gt;
&lt;br /&gt;
ただし、モニタにアクセスする標準的な方法は必ずしも便利ではなく、QEMU がサポートするすべてのグラフィック出力で機能するわけではありません。&lt;br /&gt;
&lt;br /&gt;
==== Telnet ====&lt;br /&gt;
&lt;br /&gt;
[[telnet]] を有効にするには、{{ic|-monitor telnet:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行してください。仮想マシンが起動すると、telnet 経由でモニタにアクセスできるようになります:&lt;br /&gt;
&lt;br /&gt;
 $ telnet 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|リッスンする IP として {{ic|127.0.0.1}} を指定した場合、QEMU が動作しているのと同じホストからのみモニタに接続できるようになります。リモートホストから接続したい場合、{{ic|0.0.0.0}} をリッスンするよう次のようにQEMU に指示する必要があります: {{ic|-monitor telnet:0.0.0.0:&#039;&#039;port&#039;&#039;,server,nowait}}。この場合、[[ファイアウォール]] を設定することをお勧めします。この接続は完全に認証も暗号化もされていないため、ローカルネットワークが完全に信頼できることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
==== UNIX ソケット ====&lt;br /&gt;
&lt;br /&gt;
{{ic|-monitor unix:&#039;&#039;socketfile&#039;&#039;,server,nowait}} パラメータを指定して QEMU を実行します。その後、{{Pkg|socat}}、{{Pkg|nmap}}、または {{Pkg|openbsd-netcat}} のいずれかで接続できます。&lt;br /&gt;
&lt;br /&gt;
例えば、QEMU を次のように実行した場合:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -monitor unix:/tmp/monitor.sock,server,nowait &#039;&#039;[...]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでモニタに接続できます:&lt;br /&gt;
&lt;br /&gt;
 $ socat - UNIX-CONNECT:/tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
または:&lt;br /&gt;
&lt;br /&gt;
 $ nc -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
あるいは {{Pkg|nmap}} で:&lt;br /&gt;
&lt;br /&gt;
 $ ncat -U /tmp/monitor.sock&lt;br /&gt;
&lt;br /&gt;
==== TCP ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor tcp:127.0.0.1:&#039;&#039;port&#039;&#039;,server,nowait}} を使用して TCP 経由でモニタを公開できます。その後、{{Pkg|openbsd-netcat}} または {{Pkg|gnu-netcat}} のいずれかのnetcat を実行して接続します:&lt;br /&gt;
&lt;br /&gt;
 $ nc 127.0.0.1 &#039;&#039;port&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|QEMU が動作しているホスト以外のデバイスから tcp ソケットに接続できるようにするには、telnet の例で説明したように {{ic|0.0.0.0}} を聞く必要があります。この場合もセキュリティに関する警告は同じです。}}&lt;br /&gt;
&lt;br /&gt;
==== 標準 I/O ====&lt;br /&gt;
&lt;br /&gt;
引数 {{ic|-monitor stdio}} で実行すると、QEMU が実行されているのと同じ端末から自動的にモニタにアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使って仮想マシンにキーボードの押下を送信する ===&lt;br /&gt;
&lt;br /&gt;
設定によっては仮想マシン上で一部のキーの組み合わせがホストによって邪魔されて使えない場合があります  (顕著な例として、アクティブな tty を切り替える {{ic|Ctrl+Alt+F*}} キーの組み合わせなど) 。この問題を回避するために、問題のあるキーの組み合わせをモニタコンソール経由で代わりに送信することができます。モニタに切り替えてから {{ic|sendkey}} コマンドを使って必要なキー入力を仮想マシンに転送します。例えば:&lt;br /&gt;
&lt;br /&gt;
 (qemu) sendkey ctrl-alt-f2&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールを使ってスナップショットを作成・管理する ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この機能は仮想マシンディスクイメージが &#039;&#039;qcow2&#039;&#039; フォーマットの場合に &#039;&#039;&#039;のみ&#039;&#039;&#039; 機能します。&#039;&#039;raw&#039;&#039; イメージでは機能しません。}}&lt;br /&gt;
&lt;br /&gt;
ときには仮想マシンの現在の状態を保存して何か問題が発生したときに仮想マシンの状態を元に戻したいということもあるでしょう。QEMU モニタコンソールにはスナップショットの作成、管理、およびマシン状態を保存されたスナップショットに戻すために必要なユーティリティが備わっています。&lt;br /&gt;
&lt;br /&gt;
* {{ic|savevm &#039;&#039;name&#039;&#039;}} を使用するとタグ &#039;&#039;name&#039;&#039; のスナップショットが作成されます。&lt;br /&gt;
* {{ic|loadvm &#039;&#039;name&#039;&#039;}} を使用すると仮想マシンがスナップショット &#039;&#039;name&#039;&#039; の状態に戻ります。&lt;br /&gt;
* {{ic|delvm &#039;&#039;name&#039;&#039;}} で &#039;&#039;name&#039;&#039; としてタグ付けされたスナップショットが削除されます。&lt;br /&gt;
* {{ic|info snapshots}} を使用すると保存済みのスナップショットのリストを表示します。スナップショットは自動増分される ID 番号とテキストタグ(スナップショット作成時にユーザが設定)の両方で識別されます。&lt;br /&gt;
&lt;br /&gt;
=== immutable モードで仮想マシンを実行する ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-snapshot}} パラメータを指定して QEMU を実行するだけで仮想マシンを frozen 状態で実行でき、仮想マシンの電源がオフになったときにすべての変更を破棄できます。ゲストによるディスクイメージの書き込みがあった場合、変更は {{ic|/tmp}} 内の一時ファイルに保存され QEMU が停止したときに破棄されます。&lt;br /&gt;
&lt;br /&gt;
ただし、マシンが frozen モードで実行している場合でも、後で必要に応じて、モニタコンソールを使用して次のコマンドを実行することにより、変更をディスクイメージに保存することができます。&lt;br /&gt;
&lt;br /&gt;
 (qemu) commit all&lt;br /&gt;
&lt;br /&gt;
frozen モードで実行中にスナップショットが作成された場合、変更が明示的にディスクにコミットされない限り、QEMU の終了時に破棄されます。&lt;br /&gt;
&lt;br /&gt;
=== モニタコンソールによる一時停止と電源オプション ===&lt;br /&gt;
&lt;br /&gt;
モニタコマンドを使って物理マシンの操作の一部を QEMU でエミュレートできます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|system_powerdown}} は仮想マシンに ACPI シャットダウンリクエストを送信します。物理マシンの電源ボタンを押したときと同じような効果があります。&lt;br /&gt;
* {{ic|system_reset}} は物理マシンのリセットボタンと同じように仮想マシンをリセットします。仮想マシンが正常に再起動されないためデータが消失したりファイルシステムが破損する可能性があります。&lt;br /&gt;
* {{ic|stop}} は仮想マシンを停止します。&lt;br /&gt;
* {{ic|cont}} は仮想マシンを以前に停止した状態から復帰します。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのスクリーンショットを取得する ===&lt;br /&gt;
&lt;br /&gt;
モニタコンソールで次のコマンドを実行することで PPM 形式で仮想マシンのグラフィックディスプレイのスクリーンショットを取得できます:&lt;br /&gt;
&lt;br /&gt;
 (qemu) screendump &#039;&#039;file.ppm&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== QEMU マシンプロトコル ==&lt;br /&gt;
&lt;br /&gt;
QEMU マシンプロトコル (QMP) は、アプリケーションが QEMU インスタンスを制御できるようにする JSON ベースのプロトコルです。[[#QEMU モニタ]] の様に実行中のマシンと対話する方法を提供し、JSON プロトコルによりプログラム的に行うことを可能にします。すべての QMP コマンドの説明は [https://raw.githubusercontent.com/coreos/qemu/master/qmp-commands.hx qmp-commands] に記載されています。&lt;br /&gt;
&lt;br /&gt;
=== QMP を開始する ===&lt;br /&gt;
&lt;br /&gt;
QMP プロトコルを使用してゲストを制御する通常の方法は、{{ic|-qmp}} オプションを使用してマシンを起動するときに TCP ソケットを開くことです。ここでは、例えば TCP ポート 4444 を使用しています:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 &#039;&#039;[...]&#039;&#039; -qmp tcp:localhost:4444,server,nowait&lt;br /&gt;
&lt;br /&gt;
QMP エージェントと通信する方法の1つは [[netcat]]を使用することです:&lt;br /&gt;
&lt;br /&gt;
{{hc|nc localhost 4444|{&amp;quot;QMP&amp;quot;: {&amp;quot;version&amp;quot;: {&amp;quot;qemu&amp;quot;: {&amp;quot;micro&amp;quot;: 0, &amp;quot;minor&amp;quot;: 1, &amp;quot;major&amp;quot;: 3}, &amp;quot;package&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;capabilities&amp;quot;: []} } }}&lt;br /&gt;
&lt;br /&gt;
この段階で、認識できるコマンドは {{ic|qmp_capabilities}} のみであるため、QMP はコマンドモードに入ります。次を入力:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;qmp_capabilities&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
これで、QMP はコマンドを受信できるようになりました。認識されたコマンドのリストを取得するには、次のコマンドを使用します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;query-commands&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
=== 親イメージへの子イメージのライブマージ ===&lt;br /&gt;
&lt;br /&gt;
{{ic|block-commit}} コマンドを発行すると、実行中のスナップショットを親にマージできます。最も単純な形式では、次の行は子を親にコミットします:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-commit&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このコマンドを受信すると、ハンドラはベースイメージを探し、読み取り専用モードから読み取り/書き込みモードに変換し、コミットジョブを実行します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;block-commit&#039;&#039; 操作が完了すると、イベント {{ic|BLOCK_JOB_READY}} が発生し、同期が完了したことが通知されます。次のコマンド {{ic|block-job-complete}} を発行すると、ジョブを正常に完了できます。&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;block-job-complete&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
このようなコマンドが発行されるまで、&#039;&#039;commit&#039;&#039; 操作はアクティブなままです。&lt;br /&gt;
正常に完了した後、ベースイメージは読み取り/書き込みモードのままとなり、新しいアクティブレイヤになります。一方、子イメージは無効になり、クリーンアップするのはユーザの責任となります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|デバイスとその名前のリストは、コマンド {{ic|query-block}} を実行して結果を解析することで取得できます。デバイス名は {{ic|device}} フィールドにあり、この例では例えばハードディスクは {{ic|ide0-hd0}} になります: {{hc|{&amp;quot;execute&amp;quot;: &amp;quot;query-block&amp;quot;}|{&amp;quot;return&amp;quot;: [{&amp;quot;io-status&amp;quot;: &amp;quot;ok&amp;quot;, &amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;&#039;ide0-hd0&#039;&#039;&#039;&amp;quot;, &amp;quot;locked&amp;quot;: false, &amp;quot;removable&amp;quot;: false, &amp;quot;inserted&amp;quot;: {&amp;quot;iops_rd&amp;quot;: 0, &amp;quot;detect_zeroes&amp;quot;: &amp;quot;off&amp;quot;, &amp;quot;image&amp;quot;: {&amp;quot;backing-image&amp;quot;: {&amp;quot;virtual-size&amp;quot;: 27074281472, &amp;quot;filename&amp;quot;: &amp;quot;parent.qcow2&amp;quot;, ... } }} }}&lt;br /&gt;
&lt;br /&gt;
=== 新しいスナップショットのライブ作成 ===&lt;br /&gt;
&lt;br /&gt;
実行中のイメージから新しいスナップショットを作成するには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;execute&amp;quot;: &amp;quot;blockdev-snapshot-sync&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;device&amp;quot;: &amp;quot;&#039;&#039;devicename&#039;&#039;&amp;quot;,&amp;quot;snapshot-file&amp;quot;: &amp;quot;&#039;&#039;new_snapshot_name&#039;&#039;.qcow2&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
これにより {{ic|&#039;&#039;new_snapshot_name&#039;&#039;.qcow2}} という名前のオーバーレイファイルが作成され、新しいアクティブレイヤになります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンのパフォーマンスを向上させる ===&lt;br /&gt;
&lt;br /&gt;
仮想マシンのパフォーマンスを向上させるために使用できるテクニックは数多くあります。例えば:&lt;br /&gt;
&lt;br /&gt;
* 完全な仮想化のために [[#KVM を有効にする]]。&lt;br /&gt;
* {{ic|-cpu host}} オプションで QEMU により一般的な CPU ではなくホストの正確な CPU をエミュレートさせる。&lt;br /&gt;
* 特に Windows ゲストの場合、[https://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightends-with-kvm.html Hyper-V enlightenments] を有効にする: {{ic|1=-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time}}。&lt;br /&gt;
* ホストマシンに複数のコアがある場合は、{{ic|-smp}} オプションを使用してゲストにより多くのコアを割り当てる。&lt;br /&gt;
* 仮想マシンに十分なメモリーが割り当てられていることを確認する。デフォルトでは、QEMU は各仮想マシンに 128 MiB のメモリーのみを割り当てます。より多くのメモリーを割り当てるには、{{ic|-m}} オプションを使用します。たとえば、{{ic|-m 1024}} は 1024 MiB のメモリーを持つ仮想マシンを実行します。&lt;br /&gt;
* ゲストオペレーティングシステムのドライバでサポートされている場合は、ネットワークデバイスやブロックデバイスに virtio を使用する。[[#virtio ドライバーのインストール]] を参照してください。&lt;br /&gt;
* ユーザーモードネットワーキングの代わりに TAP デバイスを使用する。[[#QEMU の Tap ネットワーク]] を参照してください。&lt;br /&gt;
* ゲスト OS がディスクに大量の書き込みを行っている場合、ホストのファイルシステムの特定のマウントオプションの恩恵を受けられます。たとえば、{{ic|1=barrier=0}} オプションを指定して [[Ext4|ext4 ファイルシステム]] をマウントできます。ファイルシステムのパフォーマンス向上オプションはデータ整合性を犠牲にする場合があるため、変更したオプションについてはドキュメントを参照してください。&lt;br /&gt;
* raw ディスクまたはパーティションがある場合、キャッシュを無効にしても良いでしょう: {{bc|1=$ qemu-system-x86_64 -drive file=/dev/&#039;&#039;disk&#039;&#039;,if=virtio,&#039;&#039;&#039;cache=none&#039;&#039;&#039;}}&lt;br /&gt;
* native Linux AIO を使う: {{bc|1=$ qemu-system-x86_64 -drive file=&#039;&#039;disk_image&#039;&#039;,if=virtio&#039;&#039;&#039;,aio=native,cache.direct=on&#039;&#039;&#039;}}&lt;br /&gt;
* 同じオペレーティングシステムがインストールされている複数の仮想マシンを同時に実行している場合、[[wikipedia:Kernel_SamePage_Merging_(KSM)|kernel same-page merging]] を有効にすることでメモリを節約できます。[[#KSMの有効化]] を参照してください。&lt;br /&gt;
* 場合によっては、ゲストオペレーティングシステムでメモリバルーニングドライバを実行し、{{ic|-device virtio-balloon}} で QEMU を起動すると実行中の仮想マシンからメモリを回収できることがあります。&lt;br /&gt;
* ICH-9 AHCI コントローラのエミュレーションレイヤを使用することができます(ただし、不安定な場合があります)。AHCI エミュレーションは [[Wikipedia:Native_Command_Queuing NCQ]] をサポートしているため、複数の読み書き要求を同時に発行できます: {{bc|1=$ qemu-system-x86_64 -drive id=disk,file=&#039;&#039;disk_image&#039;&#039;,if=none -device ich9-ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0}}&lt;br /&gt;
&lt;br /&gt;
詳しくは https://www.linux-kvm.org/page/Tuning_KVM を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ブート時に QEMU 仮想マシンを開始する ===&lt;br /&gt;
&lt;br /&gt;
==== libvirt を使う ====&lt;br /&gt;
&lt;br /&gt;
仮想マシンが [[libvirt]] でセットアップされている場合、{{ic|virsh autostart}} または &#039;&#039;virt-manager&#039;&#039; GUI を使用して、仮想マシンの &#039;&#039;Boot Options&#039;&#039; に移動して &#039;&#039;Start virtual machine on host boot up&#039;&#039; を選択することで、ホストのブート時に仮想マシンを開始するように構成できます。&lt;br /&gt;
&lt;br /&gt;
==== systemd サービスを使う ====&lt;br /&gt;
&lt;br /&gt;
ブート時に QEMU 仮想マシンを実行するには、次の systemd ユニットと設定を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/qemu@.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=QEMU virtual machine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;haltcmd=kill -INT $MAINPID&amp;quot;&lt;br /&gt;
EnvironmentFile=/etc/conf.d/qemu.d/%i&lt;br /&gt;
ExecStart=/usr/bin/qemu-system-x86_64 -name %i -enable-kvm -m 512 -nographic $args&lt;br /&gt;
ExecStop=/usr/bin/bash -c ${haltcmd}&lt;br /&gt;
ExecStop=/usr/bin/bash -c &#039;while nc localhost 7100; do sleep 1; done&#039;&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|このサービスはコンソールポートが解放されるまで待機します。これは VM がシャットダウンされたことを意味します。}}&lt;br /&gt;
&lt;br /&gt;
次に、変数 {{ic|args}} と {{ic|haltcmd}} がセットされた  {{ic|/etc/conf.d/qemu.d/&#039;&#039;vm_name&#039;&#039;}} という名前の VM 毎の設定ファイルを作成します。設定例は:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/one|2=&lt;br /&gt;
args=&amp;quot;-hda /dev/vg0/vm1 -serial telnet:localhost:7000,server,nowait,nodelay \&lt;br /&gt;
 -monitor telnet:localhost:7100,server,nowait,nodelay -vnc :0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;echo &#039;system_powerdown&#039; {{!}} nc localhost 7100&amp;quot; # or netcat/ncat}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/conf.d/qemu.d/two|2=&lt;br /&gt;
args=&amp;quot;-hda /srv/kvm/vm2 -serial telnet:localhost:7001,server,nowait,nodelay -vnc :1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
haltcmd=&amp;quot;ssh powermanager@vm2 sudo poweroff&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
変数の説明は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|args}} - 使用する QEMU コマンドライン引数です。&lt;br /&gt;
* {{ic|haltcmd}} - 仮想マシンを安全にシャットダウンするためのコマンド。最初の例では、QEMU モニターは {{ic|-monitor telnet:..}} を使用して telnet 経由で公開され、仮想マシンは {{ic|nc}} コマンドで {{ic|system_powerdown}} をモニターに送信することで ACPI 経由で電源がオフになります。他の例では、SSH が使われます。&lt;br /&gt;
&lt;br /&gt;
ブートアップ時にどの仮想マシンを開始するかを設定するには、{{ic|qemu@&#039;&#039;vm_name&#039;&#039;.service}} systemd ユニットを [[有効化]] します。&lt;br /&gt;
&lt;br /&gt;
=== マウスの統合 ===&lt;br /&gt;
&lt;br /&gt;
ゲストオペレーティングシステムのウィンドウをクリックしたときにマウスをつかまれないようにするには、{{ic|-usb -device usb-tablet}} オプションを追加します。これにより、 QEMU はマウスをつかむことなくマウスの位置を伝えることができるようになります。また、このコマンドは有効化されている場合 PS/2 マウスエミュレーションを上書きします。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -hda &#039;&#039;disk_image&#039;&#039; -m 512 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
それでもうまくいかない場合、{{ic|-vga qxl}} パラメータを使ってみてください。また、[[#マウスカーソルが敏感すぎたり迷走する]] も参照してみて下さい。&lt;br /&gt;
&lt;br /&gt;
=== ホスト USB デバイスのパススルー ===&lt;br /&gt;
&lt;br /&gt;
ゲストからホストの USB ポートに接続された物理デバイスにアクセスできます。最初のステップはデバイスが接続されている場所を特定することです。これは {{ic|lsusb}} コマンドを実行して確認できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ lsusb|&lt;br /&gt;
...&lt;br /&gt;
Bus &#039;&#039;&#039;003&#039;&#039;&#039; Device &#039;&#039;&#039;007&#039;&#039;&#039;: ID &#039;&#039;&#039;0781&#039;&#039;&#039;:&#039;&#039;&#039;5406&#039;&#039;&#039; SanDisk Corp. Cruzer Micro U3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記の太字の出力は、それぞれ &#039;&#039;host_bus&#039;&#039; と &#039;&#039;host_addr&#039;&#039; 、または &#039;&#039;vendor_id&#039;&#039; と &#039;&#039;product_id&#039;&#039; を識別するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
qemu では、{{ic|1=-device usb-ehci,id=ehci}} または {{ic|1=-device qemu-xhci,id=xhci}} オプションを使用して EHCI (USB 2) または XHCI (USB 1.1   USB 2   USB 3) コントローラーをエミュレートし、次に {{ic|1=-device usb-host,..}} オプションを使用して物理デバイスをこのコントローラーに接続するという考え方になっています。このセクションの残りの部分では &#039;&#039;controller_id&#039;&#039; が {{ic|ehci}} または {{ic|xhci}} であるとみなします。&lt;br /&gt;
&lt;br /&gt;
次に、qemu でホストの USB に接続する方法は2つあります:&lt;br /&gt;
&lt;br /&gt;
# デバイスを識別し、ホスト上でデバイスが接続されているバスとアドレスでデバイスに接続します。一般的な構文は次のとおりです: {{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,vendorid=0x&#039;&#039;vendor_id&#039;&#039;,productid=0x&#039;&#039;product_id&#039;&#039;}}上の例で使用されているデバイスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x&#039;&#039;&#039;0781&#039;&#039;&#039;,productid=0x&#039;&#039;&#039;5406&#039;&#039;&#039;}} 前のオプションに{{ic|1=...,port=&#039;&#039;port_number&#039;&#039;}} 設定を追加して、デバイスを接続する仮想コントローラの物理ポートを指定することもできます。これは、複数の USB デバイスを仮想マシンに追加したい場合に便利です。もう1つのオプションは QEMU 5.1.0 以降で利用可能な {{ic|usb-host}} の新しい {{ic|hostdevice}} プロパティを使用することで、構文は次のとおりです: {{bc|1=-device qemu-xhci,id=xhci -device usb-host,hostdevice=/dev/bus/usb/003/007}}&lt;br /&gt;
# 任意の USB バスとアドレスに接続されているものを接続します。構文は次のようになります:{{bc|1=-device usb-host,bus=&#039;&#039;controller_id&#039;&#039;.0,hostbus=&#039;&#039;host_bus&#039;&#039;,host_addr=&#039;&#039;host_addr&#039;&#039;}} 上記の例のバスとアドレスに適用すると、次のようになります:{{bc|1=-device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=&#039;&#039;&#039;3&#039;&#039;&#039;,hostaddr=&#039;&#039;&#039;7&#039;&#039;&#039;}}&lt;br /&gt;
詳しくは [https://www.qemu.org/docs/master/system/devices/usb.html QEMU/USB エミュレーション] を参照してください。&lt;br /&gt;
{{Note|QEMU の実行時にパーミッションエラーが起こる場合は、[[udev#udev ルールについて]] のデバイスのパーミッションの設定方法を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== SPICE による USB リダイレクト ===&lt;br /&gt;
&lt;br /&gt;
[[#SPICE]] を使用しているのであれば、QEMU コマンドで指定しなくてもクライアントから仮想マシンに USB デバイスをリダイレクトすることが可能です。リダイレクトされたデバイスが利用できる USB スロットの数を設定することができます (スロットの数によって、同時にリダイレクトできるデバイスの最大数が決まります)。前述の {{ic|-usbdevice}} 方式と比較して、リダイレクトに SPICE を使用する主な利点は、仮想マシンの開始後に USB デバイスをホットスワップできることで、リダイレクトから USB デバイスを削除したり新しいデバイスを追加したりするために USB デバイスを停止する必要がありません。また、ネットワーク経由でクライアントからサーバーに USB デバイスをリダイレクトすることもできます。まとめると、これは QEMU 仮想マシンで USB デバイスを使用する最も柔軟な方法です。&lt;br /&gt;
&lt;br /&gt;
利用可能な USB リダイレクトスロットごとに1つの EHCI/UHCI コントローラを追加し、さらにスロットごとに1つの SPICE リダイレクションチャネルを追加する必要があります。たとえば、SPICE モードで仮想マシンを開始するために使用する QEMU コマンドに以下の引数を追加すると、リダイレクトに利用可能な3つの USB スロットを持つ仮想マシンが開始されます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
-device ich9-usb-ehci1,id=usb \&lt;br /&gt;
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \&lt;br /&gt;
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \&lt;br /&gt;
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \&lt;br /&gt;
-chardev spicevmc,name=usbredir,id=usbredirchardev3 -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://www.spice-space.org/usbredir.html SPICE/usbredir] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|spice-gtk}} (&#039;&#039;Input&amp;gt;Select USB Devices for redirection&#039;&#039;) の {{ic|spicy}} と {{Pkg|virt-viewer}} (&#039;&#039;File&amp;gt;USB device selection&#039;&#039;) の {{ic|remote-viewer}} の両方がこの機能をサポートしています。この機能が期待どおりに動作するために必要な SPICE ゲストツールが仮想マシンにインストールされていることを確認してください (詳細については、[[#SPICE]] セクションを参照してください)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|USB デバイスがクライアントからリダイレクトされた場合、リダイレクトが停止されるまでクライアントオペレーティングシステム自体から使用できないことに留意してください。特に、入力デバイス (マウスとキーボード) をリダイレクトしないことが重要です。仮想マシンにリダイレクトされた後、クライアントは入力デバイスに応答しなくなるため、SPICE クライアントメニューにアクセスして状況を元に戻すことは困難です。}}&lt;br /&gt;
&lt;br /&gt;
==== udev による自動 USB 転送 ====&lt;br /&gt;
&lt;br /&gt;
通常、転送されるデバイスは仮想マシンの起動時に利用可能になっている必要があります。デバイスが切断されると、転送されなくなります。&lt;br /&gt;
&lt;br /&gt;
[[udev]] を使用して、デバイスがオンラインになったときに自動的にデバイスを接続できます。ディスク上のどこかに {{ic|hostdev}} エントリを作成します。root に [[chown]] し、他のユーザーが変更できないようにします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/hostdev-mydevice.xml|2=&lt;br /&gt;
&amp;lt;hostdev mode=&#039;subsystem&#039; type=&#039;usb&#039;&amp;gt;&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
    &amp;lt;vendor id=&#039;0x03f0&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;product id=&#039;0x4217&#039;/&amp;gt;&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/hostdev&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次に、デバイスをアタッチ/デタッチする &#039;&#039;udev&#039;&#039; ルールを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/lib/udev/rules.d/90-libvirt-mydevice|2=&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh attach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;, \&lt;br /&gt;
    SUBSYSTEM==&amp;quot;usb&amp;quot;, \&lt;br /&gt;
    ENV{ID_VENDOR_ID}==&amp;quot;03f0&amp;quot;, \&lt;br /&gt;
    ENV{ID_MODEL_ID}==&amp;quot;4217&amp;quot;, \&lt;br /&gt;
    RUN+=&amp;quot;/usr/bin/virsh detach-device GUESTNAME /usr/local/hostdev-mydevice.xml&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1 出典および詳細情報]。&lt;br /&gt;
&lt;br /&gt;
=== KSM の有効化 ===&lt;br /&gt;
&lt;br /&gt;
Kernel Samepage Merging (KSM) はアプリケーションがページをマージするように登録した他のプロセスとページをマージするようにカーネルに登録できるようにする Linux カーネルの機能です。この KSM 機構によってゲストの仮想マシンは互いにページを共有することが可能になります。同じようなゲストオペレーティングシステムが多数動作する環境では、メモリの使用量を著しく節約することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|KSM はメモリ使用量を削減しますが、CPU 使用量を増加させる可能性があります。また、セキュリティ上の問題が発生する可能性があることにも注意してください。[[Wikipedia:Kernel same-page merging]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
KSM を有効にするには:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/kernel/mm/ksm/run&lt;br /&gt;
&lt;br /&gt;
[[systemd#一時ファイル|systemd の一時ファイル]]を使って KSM を永続的に有効にできます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/ksm.conf|&lt;br /&gt;
w /sys/kernel/mm/ksm/run - - - - 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
KSM が動作しているとき、マージされるページが存在するために (つまり少なくとも2つの同じような仮想マシンが動いている)、{{ic|/sys/kernel/mm/ksm/pages_shared}} はゼロになりません。詳しくは https://docs.kernel.org/admin-guide/mm/ksm.html を参照。&lt;br /&gt;
&lt;br /&gt;
{{Tip|KSM のパフォーマンスを確認する簡単な方法は、そのディレクトリにあるすべてのファイルの内容を表示することです:&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/kernel/mm/ksm/&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチモニターのサポート ===&lt;br /&gt;
&lt;br /&gt;
Linux QXL ドライバーはデフォルトで4台までのマルチモニター (仮想スクリーン) をサポートしています。{{ic|1=qxl.heads=N}} カーネルパラメータで変更することができます。&lt;br /&gt;
&lt;br /&gt;
QXL デバイスのデフォルトの VGA メモリサイズは 16M です (VRAM のサイズは 64M です)。1920x1200 のモニターを2台使用しようとすると 2 × 1920 × 4 (色深度) × 1200 = 17.6 MiB の VGA メモリが必要になるためメモリが不足します。{{ic|-vga qxl}} を {{ic|&amp;lt;nowiki&amp;gt;-vga none -device qxl-vga,vgamem_mb=32&amp;lt;/nowiki&amp;gt;}} に置き換えることでメモリ容量を変更できます。vgamem_mb を 64M 以上に増やした場合、{{ic|vram_size_mb}} オプションも増やす必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Custom display resolution ===&lt;br /&gt;
&lt;br /&gt;
A custom display resolution can be set with {{ic|1=-device VGA,edid=on,xres=1280,yres=720}} (see [[wikipedia:Extended_Display_Identification_Data|EDID]] and [[wikipedia:Display_resolution|display resolution]]).&lt;br /&gt;
&lt;br /&gt;
=== コピーアンドペースト ===&lt;br /&gt;
&lt;br /&gt;
==== SPICE ====&lt;br /&gt;
&lt;br /&gt;
ホストとゲストの間でクリップボードを共有する方法の1つは、SPICE リモートデスクトッププロトコルを有効にし、SPICE クライアントを使用してクライアントにアクセスすることです。&lt;br /&gt;
[[#SPICE]] で説明されている手順に従う必要があります。この方法で実行されるゲストは、ホストとのコピーペーストをサポートします。&lt;br /&gt;
&lt;br /&gt;
==== qemu-vdagent ====&lt;br /&gt;
&lt;br /&gt;
QEMU は {{ic|qemu-vdagent}} という spice vdagent chardev の独自の実装を提供しています。これはゲストとホストがクリップボードを共有することを可能にします。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|Feature request submitted [https://bugs.archlinux.org/task/79716] to enable the functionality in the official package.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
QEMU の GTK ディスプレイでこの共有クリップボードにアクセスするには、{{ic|--enable-gtk-clipboard}} 設定パラメータを指定して [[QEMU#Custom_build|ソースから QEMU をコンパイル]] する必要があります。インストールされている {{ic|qemu-ui-gtk}} パッケージを置き換えるだけで十分です。&lt;br /&gt;
&lt;br /&gt;
{{Note|qemu-ui-gtk の共有クリップボードは、[https://gitlab.com/qemu-project/qemu/-/issues/1150 特定の状況下で Linux ゲストをフリーズさせる] 可能性があるため、実験的なものに戻されました。}}&lt;br /&gt;
&lt;br /&gt;
以下の QEMU コマンドライン引数を追加します:&lt;br /&gt;
&lt;br /&gt;
 -device virtio-serial,packed=on,ioeventfd=on&lt;br /&gt;
 -device virtserialport,name=com.redhat.spice.0,chardev=vdagent0&lt;br /&gt;
 -chardev qemu-vdagent,id=vdagent0,name=vdagent,clipboard=on,mouse=off&lt;br /&gt;
&lt;br /&gt;
=== Windows 特有のノート ===&lt;br /&gt;
&lt;br /&gt;
QEMU は Windows 95 から Windows 11 まで全てのバージョンの Windows を動かすことができます。&lt;br /&gt;
&lt;br /&gt;
QEMU で [[Windows PE]] を実行することも可能です。&lt;br /&gt;
&lt;br /&gt;
==== 高速スタートアップ ====&lt;br /&gt;
&lt;br /&gt;
{{Note|電源設定を変更するには管理者アカウントが必要です。}}&lt;br /&gt;
&lt;br /&gt;
Windows 8 (またはそれ以降) のゲストでは、次の [https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html フォーラムページ] で説明されているようにコントロールパネルの電源オプションから &amp;quot;高速スタートアップを有効にする(推奨)&amp;quot; を無効にすることをお勧めします。この設定は、1回おきの起動時にゲストがハングする原因となるためです。&lt;br /&gt;
&lt;br /&gt;
{{ic|-smp}}オプションへの変更を正しく適用するには、高速スタートアップを無効にする必要がある場合もあります。&lt;br /&gt;
&lt;br /&gt;
==== リモートデスクトッププロトコル ====&lt;br /&gt;
&lt;br /&gt;
MS Windows ゲストを使っている場合、RDP を使ってゲスト仮想マシンに接続する方法もあります。VLAN を使用していてゲストが同じネットワークにない場合、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -nographic -nic user,hostfwd=tcp::5555-:3389&lt;br /&gt;
&lt;br /&gt;
次に、{{Pkg|rdesktop}} または {{Pkg|freerdp}} を使用してゲストに接続します。例えば:&lt;br /&gt;
&lt;br /&gt;
 $ xfreerdp -g 2048x1152 localhost:5555 -z -x lan&lt;br /&gt;
&lt;br /&gt;
=== 物理機器にインストールされた Linux システムのクローン ===&lt;br /&gt;
&lt;br /&gt;
物理的な機器にインストールされた Linux システムをクローンして、QEMU 仮想マシン上で動作させることができます。[https://coffeebirthday.wordpress.com/2018/09/14/clone-linux-system-for-qemu-virtual-machine/ QEMU 仮想マシンのためにハードウェアから Linux システムをクローンする] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== x86_64 から arm/arm64 環境への chrooting ===&lt;br /&gt;
&lt;br /&gt;
実際の ARM ベースのデバイスではなく、ディスクイメージを直接操作する方が簡単な場合もあります。これは、&#039;&#039;root&#039;&#039; パーティションを含む SD カード/ストレージをマウントし、そこに chroot することで実現できます。&lt;br /&gt;
&lt;br /&gt;
ARM chroot のもうひとつのユースケースは、x86_64 マシン上で ARM パッケージを構築することです。ここで、chroot 環境を [https://archlinuxarm.org Arch Linux ARM] のイメージ tarball から作成することができます - このアプローチの詳細は [https://nerdstuff.org/posts/2020/2020-003_simplex_way_to_create_an_arm_chroot/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
いずれにせよ、chroot から &#039;&#039;pacman&#039;&#039; を実行し、より多くのパッケージをインストールしたり、大きなライブラリをコンパイルしたりできるようになるはずです。実行可能ファイルは ARM アーキテクチャ用なので、x86 への変換は [[QEMU]] で行う必要があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 マシン/ホストに {{Pkg|qemu-user-static}} を、qemu バイナリを binfmt サービスに登録するために {{Pkg|qemu-user-static-binfmt}} インストールしてください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu-user-static&#039;&#039; は他のアーキテクチャーからコンパイルされたプログラムの実行を許可するために使用されます。これは {{Pkg|qemu-emulators-full}} で提供されるているものと似ていますが、chroot には &#039;&#039;static&#039;&#039; バリアントが必要です。例えば:&lt;br /&gt;
&lt;br /&gt;
 qemu-arm-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
 qemu-aarch64-static path_to_sdcard/usr/bin/ls&lt;br /&gt;
&lt;br /&gt;
これらの2行はそれぞれ 32ビット ARM と 64ビット ARM 用にコンパイルされた {{ic|ls}} コマンドを実行します。これは、ホストシステムに存在しないライブラリを探すため、chroot なしでは動作しないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|qemu-user-static}} では、ARM 実行可能ファイルの前に {{ic|qemu-arm-static}} または {{ic|qemu-aarch64-static}} を自動的に付けることができます。&lt;br /&gt;
&lt;br /&gt;
ARM 実行可能サポートがアクティブであることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ls /proc/sys/fs/binfmt_misc|&lt;br /&gt;
qemu-aarch64  qemu-arm	  qemu-cris  qemu-microblaze  qemu-mipsel  qemu-ppc64	    qemu-riscv64  qemu-sh4    qemu-sparc	qemu-sparc64  status&lt;br /&gt;
qemu-alpha    qemu-armeb  qemu-m68k  qemu-mips	      qemu-ppc	   qemu-ppc64abi32  qemu-s390x	  qemu-sh4eb  qemu-sparc32plus	register&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
それぞれの実行可能ファイルがリストアップされている必要があります。&lt;br /&gt;
&lt;br /&gt;
アクティブでない場合は、{{ic|systemd-binfmt.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|/mnt/sdcard}} にマウントしてください(デバイス名は異なる場合があります)。&lt;br /&gt;
&lt;br /&gt;
 # mount --mkdir /dev/mmcblk0p2 /mnt/sdcard&lt;br /&gt;
&lt;br /&gt;
必要に応じてブートパーティションをマウントします(ここでも適切なデバイス名を使用します):&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mmcblk0p1 /mnt/sdcard/boot&lt;br /&gt;
&lt;br /&gt;
最後に [[Chroot#chroot を使う]] の説明に従って SD カードのルートに &#039;&#039;chroot&#039;&#039; してください:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
{{Pkg|arch-install-scripts}} の &#039;&#039;arch-chroot&#039;&#039; を使用することもできます。これはネットワークサポートを得るためのより簡単な方法を提供します:&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sdcard /bin/bash&lt;br /&gt;
&lt;br /&gt;
[[systemd-nspawn]] を使用して ARM 環境に chroot することもできます:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn -D /mnt/sdcard -M myARMMachine --bind-ro=/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
{{ic|1=--bind-ro=/etc/resolv.conf}} はオプションで、chroot内部で動作中のネットワーク DNS を提供します。&lt;br /&gt;
&lt;br /&gt;
=== マウス入力をつかまない ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Style|オプションが実際に何をするのか説明されていません。それが副作用を引き起こしているのか、回避しているのか?}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
タブレットモードには、QEMU ウィンドウでマウス入力をつかまないという副作用があります:&lt;br /&gt;
&lt;br /&gt;
 -usb -device usb-tablet&lt;br /&gt;
&lt;br /&gt;
いくつかの {{ic|-vga}} バックエンドで動作しますが、そのうちのひとつは virtio です。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 翻訳除外: {{Merge|QEMU/Troubleshooting|This section is long enough to be split into a dedicated subpage.}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== マウスカーソルが敏感すぎたり迷走する ===&lt;br /&gt;
&lt;br /&gt;
カーソルが画面を飛び回って手に負えない場合、QEMU を起動する前にターミナルに次を入力することで直るかもしれません:&lt;br /&gt;
&lt;br /&gt;
 $ export SDL_VIDEO_X11_DGAMOUSE=0&lt;br /&gt;
&lt;br /&gt;
このコマンドで直ったら、{{ic|~/.bashrc}} ファイルにコマンドを追加することができます。&lt;br /&gt;
&lt;br /&gt;
=== カーソルが表示されない ===&lt;br /&gt;
&lt;br /&gt;
マウスカーソルを表示するには {{ic|1=-display default,show-cursor=on}} を QEMU のオプションに追加してください。&lt;br /&gt;
&lt;br /&gt;
オプションを追加しても表示されない場合、ディスプレイデバイスが正しく設定されているか確認してください。例: {{ic|-vga qxl}}。&lt;br /&gt;
&lt;br /&gt;
[[#マウスの統合]] で説明されているように {{ic|-usb-device usb-tablet}} を試すこともできます。これはデフォルトの PS/2 マウスエミュレーションを上書きし、追加のボーナスとしてホストとゲスト間でポインタ位置を同期させます。&lt;br /&gt;
&lt;br /&gt;
=== 2つの異なるマウスカーソルが表示される ===&lt;br /&gt;
&lt;br /&gt;
ヒント [[#マウスの統合]] を適用してください。&lt;br /&gt;
&lt;br /&gt;
=== VNC 使用時のキーボードの問題 ===&lt;br /&gt;
&lt;br /&gt;
VNC の使用中、[https://www.berrange.com/posts/2010/07/04/more-than-you-or-i-ever-wanted-to-know-about-virtual-keyboard-handling/ ここに] (生々しく詳細に) 書かれているキーボードの問題を経験するかもしれません。解決策は QEMU で {{ic|-k}} オプションを使用 &#039;&#039;しない&#039;&#039; ことと、{{Pkg|gtk-vnc}} の {{ic|gvncviewer}} を使用することです。libvirt のメーリングリストに投稿された [https://www.mail-archive.com/libvir-list@redhat.com/msg13340.html  この] メッセージも参照してください。&lt;br /&gt;
&lt;br /&gt;
=== キーボードが壊れているまたは矢印キーが動作しない ===&lt;br /&gt;
&lt;br /&gt;
キーの一部が動かなかったり間違ったキーが &amp;quot;押されてしまう&amp;quot; (特に矢印キー) ときは、おそらくキーボードレイアウトをオプションとして指定する必要があります。キーボードレイアウトは {{ic|/usr/share/qemu/keymaps}} で探すことができます。&lt;br /&gt;
&lt;br /&gt;
 $ qemu-system-x86_64 -k &#039;&#039;keymap&#039;&#039; &#039;&#039;disk_image&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== キーマップファイルを読み込めない ===&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64: -disnplay vnc=0.0.0.0:0: could not read keymap file: &#039;en&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|-k}} 引数に渡された無効な &#039;&#039;keymap&#039;&#039; が原因です。たとえば、{{ic|en}} は無効ですが、{{ic|en-us}} は有効です。{{ic|/usr/share/qemu/keymaps/}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウのリサイズでゲストのディスプレイが引き伸ばされる ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのウィンドウサイズに戻すには、{{ic|Ctrl+Alt+u}} を押して下さい。&lt;br /&gt;
&lt;br /&gt;
=== ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy ===&lt;br /&gt;
&lt;br /&gt;
{{ic|-enable-kvm}} オプションを使って QEMU を起動した時に以下のようなエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy&lt;br /&gt;
 failed to initialize KVM: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
他の [[ハイパーバイザ]] が動作しています。同時に複数のハイパーバイザを動かすのは推奨されていません、もしくは不可能です。&lt;br /&gt;
&lt;br /&gt;
=== libgfapi エラーメッセージ ===&lt;br /&gt;
&lt;br /&gt;
起動時に以下のエラーメッセージが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 Failed to open module: libgfapi.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
{{Pkg|glusterfs}} を [[インストール]] するか無視してください。GlusterFS はオプションの依存関係です。&lt;br /&gt;
&lt;br /&gt;
=== ライブ環境でカーネルパニックが発生する ===&lt;br /&gt;
&lt;br /&gt;
ライブ環境を起動した(あるいはシステムを起動)際に以下が発生する:&lt;br /&gt;
&lt;br /&gt;
 [ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)&lt;br /&gt;
&lt;br /&gt;
または起動を妨げる他の処理(例えば initramfs をアンパックできない、サービス foo を起動できない)など。&lt;br /&gt;
{{ic|-m VALUE}} スイッチを付けて適当な量の RAM を指定して仮想マシンを開始してみてください。メモリスイッチがない場合、RAM が足りなくなると上記のような問題が発生することがあります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 7 ゲストの音質が酷い ===&lt;br /&gt;
&lt;br /&gt;
Windows 7 ゲストで {{ic|hda}} オーディオドライバを使用すると、音質が低下する場合があります。{{ic|-soundhw ac97}} 引数をQEMU に渡してオーディオドライバを {{ic|ac97}} に変更し、ゲストに [https://www.realtek.com/en/component/zoo/category/pc-audio-codecs-ac-97-audio-codecs-software Realtek AC&#039;97 Audio Codecs] の AC97 ドライバをインストールすると問題が解決する場合があります。詳しくは [https://bugzilla.redhat.com/show_bug.cgi?id=1176761#c16 Red Hat Bugzilla - Bug 1176761] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Could not access KVM kernel module: Permission denied ===&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 libvirtError: internal error: process exited while connecting to monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission denied&lt;br /&gt;
&lt;br /&gt;
Systemd 234 は {{ic|kvm}} グループに動的 ID を割り当てます ({{Bug|54943}} を参照)。このエラーを回避するには、{{ic|/etc/libvirt/qemu.conf}} ファイルを編集して {{ic|1=group = &amp;quot;78&amp;quot;}} の行を {{ic|1=group = &amp;quot;kvm&amp;quot;}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Windows 仮想マシンを起動したときに &amp;quot;System Thread Exception Not Handled&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Windows 8 や Windows 10 ゲストは起動時に &amp;quot;System Thread Exception Not Handled&amp;quot; という一般的な互換性例外を発生させることがあります。これは実機で奇妙な振る舞いをするレガシードライバ原因であることが多いようです。KVM マシンでは一般的に CPU モデルを{{ic|core2duo}} に設定することでこの問題を解決できます。&lt;br /&gt;
&lt;br /&gt;
=== 特定の Windows のゲームやアプリケーションでクラッシュやブルスクリーンが発生する ===&lt;br /&gt;
&lt;br /&gt;
物理マシンでは問題なく動作するのに、仮想マシンで実行すると予期せずにクラッシュすることがあります。root で {{ic|dmesg -wH}} を実行したときに {{ic|MSR}} というエラーが発生した場合、クラッシュの原因はゲストがサポートされていない [[wikipedia:Model-specific register|Model-specific registers]] (MSRs) にアクセスしようとすると、KVM が[[wikipedia:General protection fault|一般保護違反]] (GPF) を起こすためです。これにより、ゲストアプリケーション/OS がクラッシュすることがよくあります。これらの問題の多くは、KVM モジュールに {{ic|1=ignore_msrs=1}} オプションを指定して実装されていない MSR を無視することで解決できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modprobe.d/kvm.conf|2=&lt;br /&gt;
...&lt;br /&gt;
options kvm ignore_msrs=1&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
上記のオプションが役に立つのは以下のような場合です:&lt;br /&gt;
&lt;br /&gt;
* GeForce Experience でサポートされていない CPU が存在するとエラーが表示される。&lt;br /&gt;
* StarCraft 2 や L.A.Noire で {{ic|KMODE_EXCEPTION_NOT_HANDLED}} が発生して Windows 10 が確実にブルースクリーンになる。これらの場合、ブルースクリーン情報はドライバファイルを識別しません。&lt;br /&gt;
&lt;br /&gt;
{{Warning|これは通常は安全であり、一部のアプリケーションはこれ無しには動作しない可能性がありますが、未知のMSRアクセスを黙って無視すると、仮想マシンや他の仮想マシンの中の他のソフトウェアが動作しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシン内のアプリケーションで長い遅延が発生したり開始に長い時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
{{Out of date|No longer true since kernel 5.6}}&lt;br /&gt;
&lt;br /&gt;
これは、仮想マシンで使用可能なエントロピーが不足していることが原因である可能性があります。[https://wiki.qemu.org/Features/VirtIORNG VirtIO RNGデバイス] を仮想マシンに追加するか、[[Haveged]] などのエントロピー生成デーモンをインストールすることによって、ゲストがホストのエントロピープールにアクセスできるようにすることを検討してください。&lt;br /&gt;
&lt;br /&gt;
逸話として、OpenSSH は不十分なエントロピーの下で接続を受け入れ始めるのに時間がかかりますが、その理由はログには示されません。&lt;br /&gt;
&lt;br /&gt;
=== 高い割り込みレイテンシとマイクロスタッタリング ===&lt;br /&gt;
&lt;br /&gt;
この問題は小さな一時停止(カクつき)として現れ、特にゲームなどのグラフィックスを多用するアプリケーションで顕著になります。&lt;br /&gt;
&lt;br /&gt;
* 原因の1つは、[[CPU 周波数スケーリング]] によって制御される CPU の省電力機能です。すべてのプロセッサコアについて {{ic|performance}} に変更してください。&lt;br /&gt;
* もう1つの原因として、PS/2 入力が考えられます。PS/2 入力から Virtio 入力に切り替えてください。[[OVMF_による_PCI_パススルー#Evdev でキーボード・マウスを接続]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== QXL ビデオの低解像度化 ===&lt;br /&gt;
&lt;br /&gt;
QEMU 4.1.0 では、QXL ビデオがスパイスで表示されると低解像度に戻るというリグレッションが発生しました。[https://bugs.launchpad.net/qemu/+bug/1843151] たとえば、KMS が開始すると、テキストの解像度が 4x10 文字に低下することがあります。GUI の解像度を上げようとすると、サポートされている最低の解像度になることがあります。&lt;br /&gt;
&lt;br /&gt;
回避策として、次の形式でデバイスを作成してください:&lt;br /&gt;
&lt;br /&gt;
 -device qxl-vga,max_outputs=1...&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート対応 OVMF を使用すると仮想マシンが起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|edk2-ovmf}} の {{ic|/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd}} は [[Wikipedia:System Management Mode|SMM]] サポート付きでビルドされています。仮想マシンで S3 サポートが無効になっていない場合、仮想マシンがまったく起動しない可能性があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;qemu&#039;&#039; コマンドに {{ic|1=-global ICH9-LPC.disable_s3=1}} オプションを追加してください。&lt;br /&gt;
&lt;br /&gt;
QEMU でセキュアブートを使用するために必要なオプションの詳細は {{Bug|59465}}および https://github.com/tianocore/edk2/blob/master/OvmfPkg/README を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 仮想マシンが Arch ISO で起動しない ===&lt;br /&gt;
&lt;br /&gt;
Arch ISO イメージから初めて仮想マシンを起動しようとすると、ブートプロセスがハングします。ブートメニューで {{ic|e}} を押して {{ic|1=console=ttyS0}} をカーネルブートオプションに追加すると、さらに多くのブートメッセージと次のエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
 :: Mounting &#039;/dev/disk/by-label/ARCH_202204&#039; to &#039;/run/archiso/bootmnt&#039;&lt;br /&gt;
 Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...&lt;br /&gt;
 ERROR: &#039;/dev/disk/by-label/ARCH_202204&#039; device did not show up after 30 seconds...&lt;br /&gt;
    Falling back to interactive prompt&lt;br /&gt;
    You can try to fix the problem manually, log out when you are finished&lt;br /&gt;
 sh: can&#039;t access tty; job control turned off&lt;br /&gt;
&lt;br /&gt;
このエラーメッセージは、実際の問題が何なのかを明確に示すものではありません。問題は、QEMU が仮想マシンに割り当てるデフォルトの 128MB の RAM にあります。{{ic|-m 1024}} で制限を 1024MB に増やすと問題が解決し、システムが起動します。その後、通常どおり Arch Linux のインストールを続けることができます。インストールが完了したら、仮想マシンへのメモリ割り当てを減らすことができます。1024MB が必要になるのは、RAM ディスクの要件とインストールメディアのサイズによるものです。 [https://lists.archlinux.org/archives/list/arch-releng@lists.archlinux.org/message/D5HSGOFTPGYI6IZUEB3ZNAX4D3F3ID37/ arch-releng メーリングリストのこのメッセージ] と[https://bbs.archlinux.org/viewtopic.php?id=204023 このフォーラムのスレッド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ゲスト CPU の割り込みが発生しない ===&lt;br /&gt;
&lt;br /&gt;
[https://wiki.osdev.org/ OSDev wiki] に従って独自のオペレーティングシステムを作成している場合や、QEMU の {{ic|gdb}} インターフェースで {{ic|-s}} フラグを使用してゲストアーキテクチャアセンブリコードをステップ実行している場合、QEMU を含む多くのエミュレーターが、通常はいくつかの CPU 割り込みを実装し、多くのハードウェア割り込みは実装していないということを知っておくと役に立ちます。あなたのコードが割り込みを発生させているかどうかを知る1つの方法は、以下を使用して:&lt;br /&gt;
&lt;br /&gt;
 -d int&lt;br /&gt;
&lt;br /&gt;
標準出力に割り込み/例外の表示を有効にすることです。&lt;br /&gt;
&lt;br /&gt;
QEMU が提供するその他のゲストデバッグ機能については、以下を参照してください:&lt;br /&gt;
&lt;br /&gt;
 qemu-system-x86_64 -d help&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|x86_64}} をあなたの選択したゲストアーキテクチャに置き換えてください。&lt;br /&gt;
&lt;br /&gt;
=== sddm を使用した KDE でログイン時に spice-vdagent が自動的に起動しない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/xdg/autostart/spice-vdagent.desktop}} から {{ic|X-GNOME-Autostart-Phase{{=}}WindowManager}} を削除するかコメントアウトしてください。 [https://github.com/systemd/systemd/issues/18791]&lt;br /&gt;
&lt;br /&gt;
=== Error starting domain: Requested operation is not valid: network &#039;default&#039; is not active ===&lt;br /&gt;
&lt;br /&gt;
If for any reason the default network is deactivated, you will not be able to start any guest virtual machines which are configured to use the network. Your first attempt can be simply trying to start the network with virsh.&lt;br /&gt;
&lt;br /&gt;
 # virsh net-start default&lt;br /&gt;
&lt;br /&gt;
For additional troubleshooting steps, see [https://www.xmodulo.com/network-default-is-not-active.html].&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://qemu.org QEMU 公式ウェブサイト]&lt;br /&gt;
* [https://www.linux-kvm.org KVM 公式ウェブサイト]&lt;br /&gt;
* [https://qemu.weilnetz.de/doc/6.0/ QEMU エミュレータユーザドキュメント]&lt;br /&gt;
* [[Wikibooks:QEMU|QEMU Wikibook]]&lt;br /&gt;
* [http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu Hardware virtualization with QEMU] by AlienBOB (2008年最終更新)&lt;br /&gt;
* [http://blog.falconindy.com/articles/build-a-virtual-army.html Building a Virtual Army] by Falconindy&lt;br /&gt;
* [https://git.qemu.org/?p=qemu.git;a=tree;f=docs 最新ドキュメント]&lt;br /&gt;
* [https://qemu.weilnetz.de/ QEMU on Windows]&lt;br /&gt;
* [[wikipedia:Qemu|Wikipedia]]&lt;br /&gt;
* [[debian:QEMU|Debian Wiki - QEMU]]&lt;br /&gt;
* [https://people.gnome.org/~markmc/qemu-networking.html QEMU Networking on gnome.org]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html Networking QEMU Virtual BSD Systems]&lt;br /&gt;
* [https://www.gnu.org/software/hurd/hurd/running/qemu.html QEMU on gnu.org]&lt;br /&gt;
* [https://wiki.freebsd.org/qemu QEMU on FreeBSD as host]&lt;br /&gt;
* [https://wiki.mikejung.biz/KVM_/_Xen KVM/QEMU Virtio Tuning and SSD VM Optimization Guide]{{Dead link|2022|09|22|status=404}}&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/virtualization/html/book-virt/part-virt-qemu.html Managing Virtual Machines with QEMU - openSUSE documentation]&lt;br /&gt;
* [https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatkvm.htm KVM on IBM Knowledge Center]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|QEMU|2023-09-18|788022}}&lt;/div&gt;</summary>
		<author><name>K9i</name></author>
	</entry>
</feed>