사용할 수 있는 그래픽이 없는 centos7 게스트용 직렬 콘솔이 있습니다 virsh console vm
. 게스트에는 적절한 console=ttyS0,115200n8
커널 명령줄 인수가 있습니다.
virsh console vm --devname vc1
내가 말하고 로그인 프롬프트를 받을 수 있도록 추가 콘솔을 구성할 수 있습니까 ?
본능적으로 나는 캐릭터 장치를 게스트의 첫 번째 6개 가상 콘솔에 연결하려고 생각했습니다.libvirt 도메인 형식그리고버티오 시리얼그 방향으로 가야 할 것 같지만 제대로 작동하지 않습니다.
배경: 해결하는 데 상당한 시간이 걸리는 네트워크 문제가 있었는데, 그 동안 한 명의 팀원이 네트워크 문제를 처리하고 다른 팀원이 중단 없이 VM에서 작업을 계속해야 했기 때문에 네트워크 없이 여러 콘솔을 사용했습니다.
나는 거기에 있다는 것을 안다
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
virsh console <domain> --device <device>
VNC 액세스를 위해 6개의 가상 터미널을 사용할 수 있습니다. 구문을 통해 합리적인 방식으로 6개의 가상 터미널을 갖는 것이 virsh console
훨씬 더 편리할 수 있는지 궁금합니다 .
소프트웨어:
# cat /etc/fedora-release # host
Fedora release 24 (Twenty Four)
# virsh --version
1.3.3.3
# qemu-system-x86_64 --version
QEMU emulator version 2.6.2 (qemu-2.6.2-8.fc24), Copyright (c) 2003-2008 Fabrice Bellard
# cat /etc/centos-release # guest
CentOS Linux release 7.3.1611 (Core)
답변1
나는 종종 가상 머신에서 여러 개의 "콘솔"을 사용합니다. 하나는 시작을 표시하고 로그인 프롬프트로 끝나는 대화형 콘솔용이고, 다른 하나는 이 모든 것을 텍스트 파일에 기록하기 위한 것입니다(보통 /var/lib/libvirt/consoles/<domain>.log
).
더 보내도 되는지 모르겠네요인터렉티브가상 머신의 "콘솔"이지만할 수 있는원하는 수만큼 직렬 포트를 추가하고 getty
가상 머신에서 실행하여 로그인 프롬프트를 받으세요.
VM의 이러한 직렬 포트는 telnet
프로토콜을 사용하여 호스트의 파일, 소켓 또는 TCP 포트 등에 연결할 수 있습니다. 아마도 가장 사용하기 쉬운 것은 텔넷 포트일 것입니다.
예를 들어 ttyS1 직렬 포트를 통해 액세스할 수 있는 직렬 포트를 추가하려면 telnet
다음 XML 조각을 다음 위치에 저장하세요 /tmp/serial1.xml
.
<serial type='tcp'>
<source mode='bind' host='127.0.0.1' service='4555' tls='no'/>
<protocol type='telnet'/>
<target port='1'/>
<alias name='serial1'/>
</serial>
그런 다음 virsh attach-device --config <domain> /tmp/serial1.xml
.
이렇게 하면 다음에 VM이 다시 시작될 때 활성화되는 직렬 포트 장치가 VM에 추가됩니다. (USB가 아닌 직렬 포트 대신 핫 플러그 가능한 USB 장치로 추가하고 VM을 재부팅할 필요가 없도록 하는 방법이 있을 수 있습니다. 저는 알아낼 만큼 신경 쓰지 않았습니다.)
VM이 다시 시작된 후 포트에서 getty를 실행합니다. 예를 들어 sysvinit를 사용 /etc/inittab
하여 telinit q
.
시스템을 사용하십시오:
systemctl enable [email protected]
systemctl start [email protected]
KVM 호스트에서 VM의 직렬 포트에 연결하려면 를 실행합니다 telnet 127.0.0.1 4555
.
필요한 만큼 많은 직렬 포트를 생성할 수 있으며, 각 포트는 서로 다른 포트에서 수신 대기합니다. XML 조각에서 TCP 포트 번호( service=
), 대상 포트 및 별칭을 변경하기만 하면 됩니다.
다른 컴퓨터에서 액세스해야 하는 경우 다른 IP 주소에서 수신 대기하도록 할 수 있습니다( tls='yes'
이 경우 TLS 지원 telnet
클라이언트를 사용하여 연결해야 할 수도 있음). 이 경우 qemu 사용을 위한 인증서를 설정해야 합니다. ).
예를 들어 Debian Stretch VM에 두 개의 직렬 포트를 추가했습니다.
먼저, localhost의 ttyS1:4555
$ telnet localhost 4555
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS1
stretch login:
telnet> quit
Connection closed.
그런 다음 ttyS2는 localhost:4556에 있습니다.
$ telnet localhost 4556
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS2
stretch login:
telnet> quit
Connection closed.
답변2
나는 OP에서 설명한 비슷한 이유로 이 스레드를 우연히 발견했습니다. 설명된 형식의 ua-
도메인 범위 별칭 은 필요하지 않습니다.프로젝트 파일.
하나 이상의 콘솔을 으로 추가한 다음 , , ... 콘솔을 <target type='virtio' port='N'/>
사용하여 콘솔에 액세스하세요.hvc0
hvc1
가상 콘솔가상 머신 이름편안질소
N
처음부터 계산합니다 1
. 게스트 측 getty
설정은 독자의 연습 문제로 남겨집니다.
답변3
비슷한 내용을 검색하다가 이 글을 발견했습니다. 나는 원래 게시물이 요청한 것을 정확히 수행하는 방법을 찾았습니다. 게스트에 추가 콘솔을 추가하고 virtio 기능(최신 Linux 배포판)이 있는 게스트에 가장 적합합니다 virsh console
.
먼저 연결하려는 콘솔 장치에 대한 xml을 만듭니다. 다음과 같아야 합니다.
<console type='pty'>
<target type='virtio' port='1'/>
<alias name='ua-hvc0'/>
</console>
Virtio는 게스트에 /dev/hvc{0..7}
포트 1~8에 해당하는 8개의 가상 콘솔을 제공합니다. 별칭은 libvirt로 시작해야 하며 ua-
, 그렇지 않으면 무시되며 고유해야 합니다. 원한다면 다른 것으로 설정할 수도 있습니다.
다음으로 장치를 게스트에 연결합니다. virsh attach-device <domain> /path/to/xml
콘솔에 로그인하려면 해당 hvc에서 getty를 활성화해야 합니다. systemd의 경우 다음과 같습니다 systemctl enable --now getty@hvc0
.
virsh console <domain> ua-hvc0
그런 다음 선택한 별칭을 사용하여 호스트에서 연결할 수 있어야 합니다 .
Virtio 없이 테스트해본 적은 없지만 프로세스는 비슷할 것입니다. 콘솔 장치 대신 직렬 장치를 추가할 수 있습니다. 예를 들면 다음과 같습니다.
<serial type='pty'>
<target port='1'/>
<alias name='ua-ttyS1'/>
</serial>
이렇게 하면 클라이언트 /dev/ttyS1이 되어야 하는 직렬 포트 1이 추가되어야 합니다. ttyS1(게스트에서)에서 getty를 활성화 systemct enable getty@ttyS1
하고 연결합니다.virsh console <domain> ua-ttyS1