VMこれはvirsh
で開始できます。virsh dumpxml VM1
、これは割り当てられたptyです:
<serial type='pty'>
<source path='/dev/pts/6'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/6'>
<source path='/dev/pts/6'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
VMが実行されています:
# virsh list
Id Name State
----------------------------------
7 VM1 running
VM内では、これはGRUB構成です。
kernel /boot/vmlinuz-2.6.24-28-virtual root=UUID=7a1685b9-ecc8-4b70-932c-459a6faac07d ro quiet splash console=tty0 console=ttyS0,9600n8
そして、これはVMを起動するためにvirshによって起動されたコマンドラインです:
/usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 256 -smp 1,sockets=1,cores=1,threads=1 -name VM1 -uuid 47ff6ec2-a748-4738-16b9-2ffe5780e456 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/VM1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -drive file=/var/VMs/VM1.qcow2,if=none,id=drive-ide0-0-0,boot=on,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:12:34:50,bus=pci.0,addr=0x3 -net tap,fd=64,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:0 -k de -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
しかし、virsh console VM1
、または私はcat /dev/pts/6
、VMコンソールには何も表示されません。
他に考慮しなければならないことはありますか?
私は2つのVMを使用しており、1つはkvm
で直接開始し、もう1つはvirsh
を介して開始しています。直接起動したものには、動作するコンソールがあります。私は両方のケースで開いているファイルを確認しました:
root@Host1:~# lsof | grep 25093 | grep dev
kvm 25093 root DEL REG 0,4 3758780 /dev/zero
kvm 25093 root DEL REG 0,4 3758779 /dev/zero
kvm 25093 root DEL REG 0,4 3758777 /dev/zero
kvm 25093 root 0u CHR 136,3 0t0 6 /dev/pts/3
kvm 25093 root 1u CHR 136,3 0t0 6 /dev/pts/3
kvm 25093 root 2u CHR 136,3 0t0 6 /dev/pts/3
kvm 25093 root 3u CHR 10,232 0t0 8025 /dev/kvm
kvm 25093 root 7u CHR 10,200 0t0 4983 /dev/net/tun
root@Host1:~# lsof | grep 8341 | grep dev
kvm 8341 libvirt-qemu DEL REG 0,4 9743486 /dev/zero
kvm 8341 libvirt-qemu DEL REG 0,4 9743485 /dev/zero
kvm 8341 libvirt-qemu DEL REG 0,4 9743483 /dev/zero
kvm 8341 libvirt-qemu 0r CHR 1,3 0t0 4640 /dev/null
kvm 8341 libvirt-qemu 4u CHR 5,2 0t0 4897 /dev/ptmx
kvm 8341 libvirt-qemu 5u CHR 10,232 0t0 8025 /dev/kvm
kvm 8341 libvirt-qemu 64u CHR 10,200 0t0 4983 /dev/net/tun
ご覧のとおり、VMの1つ(間違ったVM)には、ファイル記述子1と2がなく、ファイル記述子0は/ dev/nullにリダイレクトされます。それが私が推測する問題です。
問題は、virshにそれを行わないようにするにはどうすればよいですか?
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
これは、virsh edit
を使用してVMの定義に通常追加するもので、console=ttyS0
をgrub.confのVMのカーネル行に追加します
これまでに失敗したことはありません
ホストおよびゲストオペレーティングシステムとしてDebian jessieを使用する実例。
VMを作成します。いずれの場合も、シリアルコンソールステートメントがVM.xmlファイルに追加されます。
ゲストでVM以下を実行
systemctl enable [email protected]
systemctl start [email protected]
ゲストでVM in /etc/default/grub
置換
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_TERMINAL=console
沿って
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"
GRUB_TERMINAL="serial console"
ゲストでVM以下を実行
guest# update-grub
VM実行用コンソールVMは
Host# virsh console VM
または、VMコンソールを接続した状態で起動します
Host# virsh start VM --console
出典:
最も当てはまる答えを見つけました here :
仮想ドメインがmyGuest
で、優先エディターがvi
で、ゲストがgrub2
でインストールされ、systemd
を使用するとします。最後の仮定が当てはまらない場合は、 シリアルコンソールの操作 を参照してください。
まず、ホストにlibguestfs-tools
をインストールします:Sudo apt install libguestfs-tools
。ヘッドレスゲストで作業するときにこれが必要になります。
次に、ゲストをシャットダウンします:virsh shutdown myGuest
。
次に、仮想ディスクをマウントします:guestmount -d myGuest -i /mnt
(または他の既存のディレクトリをマウントポイントとして使用します)。これで/mnt
にゲストのファイルシステムが表示されるはずです。
grub2
とsystemd
を使用すると、GRUB構成を変更するだけで済みます:vi /mnt/etc/default/grub
、次のように変更します
GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --Word=8 --parity=no --stop=1"
ゲストでupdate-grub
を実行する必要があるため、最初の起動では/mnt/boot/grub/grub.cfg
も変更する必要があります。デフォルトのブートメニュー項目を見つけ、linux
エントリにコンソール情報を追加して、次のようにします。
linux /boot/vmlinuz-4.4.0-75-generic root=UUID=76f3e237-d791-4e9d-8ad7-fe5c9165ae55 ro console=ttyS0,19200 earlyprint=serial,ttyS0,19200
ファイルをマウントして編集するには、root権限が必要な場合があります。
ゲストを再起動して、仮想コンソールを起動します。
virsh start myGuest && virsh console myGuest
カーネルログが表示され、次にログインプロンプトが表示されます。ログイン後、忘れずにSudo update-grub
を実行してください。