Linux / lab

Ghi chú · 22/8/2026

Đính chính — libvirt modular daemon trên Ubuntu

Rất nhiều tài liệu — kể cả bản soạn đầu của lộ trình này — ghi Ubuntu dùng modular daemon. Filelist gói chính thức nói ngược lại.

Ảnh hưởngPhiên 1 · trang yêu cầu
Trạng tháiĐã xác minh 3 cách
Chiều saiNgược lại — Arch mới modular

Cái sai

Bản soạn đầu của Phiên 1 — và rất nhiều blog, câu trả lời StackExchange, tài liệu nội bộ — khẳng định Ubuntu 24.04 trở đi dùng libvirt modular daemon. Kiểm chứng 22/8/2026: sai.

Bằng chứng

Filelist gói chính thức của Ubuntu, kiểm 3 suite:

SuitelibvirtBinary trong libvirt-daemon
noble (24.04)10.0.0libvirtd, virtlogd, virtlockd
questing (25.10)11.6.0libvirtd
resolute (26.04)libvirtd

Không có binary virtqemud, không có unit virtqemud.socket, không có manpage virtqemud(8) trên bất kỳ suite nào. Ba cách kiểm độc lập: filelist của libvirt-daemon, filelist của libvirt-daemon-system (danh sách unit systemd), và sự vắng mặt của manpage virtqemud(8) trên manpages.ubuntu.com trong khi libvirtd(8) vẫn có.

Đừng nhầm hai loại "modular"

Debian/Ubuntu 25.10+ tách packaging thành libvirt-daemon-driver-qemu, -network, -storage… Đó là các driver .so nạp động vào một tiến trình libvirtd duy nhất, không phải daemon rời. Gói libvirt-daemon-driver-qemu của questing không chứa binary virtqemud và không chứa unit virtqemud*.socket nào.

Modular daemon thật (virtqemud & co., socket-activated) là mặc định ở Fedora 35+, RHEL 9+, openSUSE và Arch. Upstream tách từ libvirt 5.7.0 (09/2019); mỗi distro tự quyết có ship hay không.

Hệ quả

  • Trên host Ubuntu, systemctl status libvirtd chính là cả câu chuyện. systemctl restart libvirtd làm đúng điều mình tưởng.
  • Bài so sánh hai họ distro vẫn còn nguyên giá trị — khác biệt này có thật, chỉ ngược chiều: Arch mới là bên modular.
  • Lệnh systemctl cho libvirt không bê được từ Ubuntu sang Arch: Arch enable .socket (socket activation, daemon tự tắt khi rảnh), Ubuntu enable .service.

Cách phân biệt trên bất kỳ host nào:

kiểm chế độ daemonhost bất kỳ
$ systemctl is-active virtqemud.socket   # modular, ngay bây giờ
$ systemctl is-active libvirtd.socket     # monolithic, ngay bây giờ
$ systemctl list-units 'virt*' 'libvirt*'
$ ls -l /run/libvirt/*-sock*

Nguồn: libvirt Daemons · packages.ubuntu.com — noble libvirt-daemon · resolute libvirt-daemon · Fedora Changes/LibvirtModularDaemons

Ba điểm kỹ thuật khác đã xác minh, đáng nhớ cho P2

  1. instance-id luôn là hằng số nocloud nếu không tự truyền meta-data. virt-install --cloud-init sinh meta-data rỗng → NoCloud dùng mặc định. Đây là lý do sâu xa (bên cạnh việc seed ISO bị gỡ) khiến sửa user-data rồi reboot là vô nghĩa. Script reset lab nên sinh instance-id khác nhau mỗi lần dựng.
  2. virt-install --cloud-init gỡ hẳn CD-ROM seed và xoá file ISO sau boot đầu — nó dựng hai bản XML (initial có CDROM, final không) và defineXML(final) sau khi guest tắt lần đầu. Không có flag giữ lại. Muốn giữ seed thì phải tự tạo ISO bằng xorrisofs -V cidata và attach qua --disk.
  3. osinfo-db trong pocket noble gốc là bản 0.20231215 — build trước khi 24.04 ra đời, nên không có entry ubuntu24.04. Bản dùng được nằm ở noble-updates (0.20250606).

Ngoài ra: thiếu --osinfolỗi cứng với guest HVM từ virt-manager 4.0.0 (03/2022), và thiếu -F/backing_format khi tạo qcow2 có backing file là lỗi cứng từ QEMU 6.1 (08/2021). Cả hai đều từng chỉ là cảnh báo — tài liệu cũ trên mạng sẽ không nhắc.