Cấu hình Serial Console cho KVM và Proxmox: ‘Phao cứu sinh’ khi SSH đột ngột đứt kết nối

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Tình huống thực tế: Khi SSH bỗng dưng “biệt vô vô tín”

Anh em quản trị hệ thống chắc không lạ gì cảnh này: Vừa nhấn Enter để restart service sau khi chỉnh file Netplan hoặc Firewall, thì bùm — màn hình terminal đứng im. Bạn chính thức mất kết nối SSH. Với máy vật lý, bạn có thể chạy vào phòng Server cắm màn hình. Nhưng với VM nằm ở datacenter cách xa hàng trăm cây số, việc dùng VNC qua trình duyệt thường rất chậm, giật lag và hay lỗi font chữ.

Serial Console chính là giải pháp thay thế hoàn hảo. Trong hệ thống Lab chạy 15 VM của mình, việc thiết lập sẵn Serial Console giúp mình truy cập thẳng vào shell của VM từ máy Host chỉ trong 1 giây. Nó nhanh, mượt và quan trọng nhất là không phụ thuộc vào card mạng ảo (NIC) của máy ảo đó.

Quick Start: Thiết lập trong vòng 5 phút

Quy trình gồm hai bước chính: Khai báo phần cứng ảo trên Host và cấu hình phần mềm bên trong Guest (VM).

Bước 1: Thêm thiết bị Serial trên Host

Đối với Proxmox VE:

  • Truy cập Web UI -> Chọn VM -> Hardware -> Add -> Serial Port.
  • Chọn 0 (Serial port 0) và nhấn Add.
  • Vào tab Options -> Console Viewer -> Chuyển sang Serial terminal 0 (xterm.js).

Đối với KVM (dòng lệnh):

# Chỉnh sửa file XML của VM
virsh edit <ten_vm>

# Thêm các dòng sau vào trong cặp thẻ <devices>
<serial type='pty'>
  <target port='0'/>
</serial>
<console type='pty'>
  <target type='serial' port='0'/>
</console>

Bước 2: Cấu hình bên trong máy ảo Linux

Hãy SSH vào VM lần cuối (hoặc dùng console mặc định) để sửa file GRUB:

sudo nano /etc/default/grub

Tìm và cập nhật các tham số sau để Kernel biết đường xuất dữ liệu ra cổng Serial:

GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0,115200"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Cuối cùng, cập nhật lại cấu hình boot và khởi động lại:

sudo update-grub
sudo reboot

Tại sao phải dùng `console=ttyS0,115200`?

Mặc định, Linux ưu tiên xuất hình ảnh ra tty0 (màn hình ảo VGA). Khi thêm ttyS0, bạn đang yêu cầu Kernel nhân bản luồng dữ liệu đó sang cổng Serial. Tốc độ 115200 baud là tiêu chuẩn vàng hiện nay. Nó đủ nhanh để hiển thị các bản tin log dài mà không bị trễ như tốc độ 9600 cũ kỹ.

Điểm cộng lớn nhất của xterm.js (Serial) so với noVNC truyền thống là khả năng copy-paste. Bạn có thể dán một đoạn script dài dằng dặc từ máy tính cá nhân vào thẳng terminal của VM. Điều này gần như bất khả thi nếu dùng giao diện console dạng bitmap của VNC.

Mẹo quản trị và xử lý lỗi

Truy cập cực nhanh từ terminal máy Host

Nếu bạn đang đứng ở máy Host KVM, không cần mở Web UI làm gì cho tốn thời gian. Chỉ cần gõ lệnh sau:

virsh console <ten_vm>

Để thoát ra, hãy nhấn tổ hợp phím Ctrl + ]. Lưu ý: Nếu bạn thấy màn hình đứng im sau khi gõ lệnh, hãy nhấn Enter một lần nữa để hiện dòng đăng nhập.

Sửa lỗi màn hình đen trên Proxmox

Nếu gặp thông báo “Guest has not initialized the display (yet)”, thường là do bạn chưa chạy update-grub bên trong VM hoặc thiếu thiết bị Serial ở phần Hardware. Hãy dùng lệnh qm config <vmid> trên host để kiểm tra xem dòng serial0 đã tồn tại chưa.

Lưu ý cho dòng RedHat/CentOS

Với CentOS hoặc RHEL, lệnh cập nhật GRUB sẽ khác biệt tùy theo chế độ boot:

# Cho BIOS
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# Cho UEFI
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Kinh nghiệm xương máu

Trong thực tế vận hành, mình luôn coi Serial Console là một phần của tiêu chuẩn bảo mật và cứu hộ.

  • Tự động hóa: Hãy thêm các cấu hình GRUB này vào script Cloud-init hoặc file Template VM. Sau này, mọi VM tạo mới đều có sẵn “cửa hậu” an toàn để bạn vào sửa lỗi.
  • Cứu hộ mạng: Khi lỡ tay xóa nhầm file cấu hình interface, Serial Console là cách duy nhất để bạn vào gõ lại IP mà không phải tắt VM để mount ổ cứng ảo từ bên ngoài.
  • Bảo mật: Vì Serial Console cho phép truy cập quyền root, hãy giới hạn quyền truy cập vào máy Host thật chặt chẽ qua cơ chế RBAC.

Hy vọng thủ thuật nhỏ này giúp anh em tự tin hơn khi “vọc vạch” hệ thống mà không sợ bị lock-out bên ngoài!

Share: