그래픽이 없는 다중 virsh/kvm 게스트 콘솔

그래픽이 없는 다중 virsh/kvm 게스트 콘솔

사용할 수 있는 그래픽이 없는 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'/>사용하여 콘솔에 액세스하세요.hvc0hvc1

가상 콘솔가상 머신 이름편안질소

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

관련 정보