dmesg 命令用于查看和控制 Linux 內核環形緩沖區(the kernel ring buffer),從而深入了解硬件錯誤和啟動問題。kylin / UOS / CentOS 等 Linux 各版本通用,需要 root 權限。
在 Linux 中,引導 boot 和啟動 startup 是計算機通電時發生的兩個不同階段。
引導進程(BIOS 或 UEFI、MBR 和 GRUB)將系統初始化到把內核加載到內存并連接到初始 ramdisk 的點,然后啟動 systemd。
然后啟動過程繼續完成操作系統的初始化。在初始化的早期階段,日志守護程序(如 syslogd 或 rsyslogd)尚未啟動和運行。為了避免丟失此初始化階段的顯著錯誤和警告消息,內核包含一個用作消息存儲的環形緩沖區,它就是 kernel ring buffer。
Linux
內核環形緩沖區是為消息保留的內存空間。它設計簡單,大小固定。當消息滿時,較新的消息會覆蓋最舊的消息。從概念上講,它可以被認為是一個“循環緩沖區”。
內核環形緩沖區存儲:
因為它包含這些底層啟動消息,所以環形緩沖區是調查硬件錯誤或其他啟動問題的好地方。
dmesg [options]
# 舉例,輸出彩色文本
dmesg -L
# 查看錯誤信息
dmesg -l err
詳細的參數,見第4節。
查看內核環形緩沖區中的消息。
[root@centos ~]# dmesg
CentOS7 - dmesg
kylin - dmesg
UOS - dmesg
# 單次彩色輸出
dmesg -L
# 設置始終彩色輸出
dmesg --color=always
centos - dmesg -L
實時跟隨查看最新的消息,與 tail 一樣使用 follow 參數。
[root@kylin ~]# dmesg --follow
查看最后 n 條消息。
# 麒麟
[root@kylin ~]# dmesg | tail -3
[ 16.193827] aufs 4.19-20200518
[ 16.674474] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 16.682935] Bridge firewalling registered
# CentOS
[root@centos ~]# dmesg | tail -3
[ 15.746026] work still pending
[ 15.832549] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[ 15.978076] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
# 統信
root@uos:~# dmesg | tail -3
[ 9.769158] IPv6: ADDRCONF(NETDEV_UP): ens32: link is not ready
[ 9.776385] e1000: ens32 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[ 9.779098] IPv6: ADDRCONF(NETDEV_CHANGE): ens32: link becomes ready
查看含指定內容的消息。
root@uos:/home/uroot# dmesg | grep -i usb
[ 1.100098] ACPI: bus type USB registered
[ 1.100182] usbcore: registered new interface driver usbfs
[ 1.100191] usbcore: registered new interface driver hub
[ 1.100269] usbcore: registered new device driver usb
[ 3.495188] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 3.495197] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 3.495350] usbcore: registered new interface driver usbserial_generic
[ 3.495352] usbserial: USB Serial support registered for generic
# extend regular expression
root@uos:/home/uroot# dmesg | grep -E "memory|tty|dma"
[ 0.054314] Early memory node ranges
[ 0.081626] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[ 0.081627] PM: Registered nosave memory: [mem 0x0009e000-0x0009efff]
[ 0.081627] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[ 0.081628] PM: Registered nosave memory: [mem 0x000a0000-0x000dbfff]
[ 0.081628] PM: Registered nosave memory: [mem 0x000dc000-0x000fffff]
[ 0.081629] PM: Registered nosave memory: [mem 0x7fee0000-0x7fefefff]
[ 0.081629] PM: Registered nosave memory: [mem 0x7feff000-0x7fefffff]
[ 0.393660] console [tty0] enabled
按 log 等級查看消息。
[root@centos ~]# dmesg -l err
[ 8.341761] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 12.825902] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
dmesg -l
日志等級見第 4 節。
按設施類型查看消息。
[root@kylin ~]# dmesg -f daemon
[ 1.708627] systemd[1]: systemd v243-55.p06.se.01.ky10 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy)
[ 1.708700] systemd[1]: Detected virtualization vmware.
[ 1.708707] systemd[1]: Detected architecture x86-64.
[ 1.708708] systemd[1]: Running in initial RAM disk.
[ 1.710818] systemd[1]: Set hostname to <kylin>.
[ 1.791011] systemd[1]: Reached target Local File Systems.
dmesg -f
設施類型見第 4 節。
dmesg 命令的詳細參數說明如下:
dmesg 參數詳解
支持的設施類別:
kern - 內核消息
user - 隨機的用戶級消息
mail - 郵件系統
daemon - 系統守護進程
auth - 安全/認證消息
syslog - syslogd 內部生成的消息
lpr - 行打印機子系統
news - 網絡新聞子系統
支持的日志級別(優先級):
emerg - 系統無法使用
alert - 操作必須立即執行
crit - 緊急條件
err - 錯誤條件
warn - 警告條件
notice - 正常但重要的條件
info - 信息
debug - 調試級別的消息
Enjoy[啤酒][啤酒][啤酒]
KVM概念
KVM
Kernel-based Virtual Machine基于內核的虛擬機,配合QEMU(處理器虛擬軟件),需要CPU支持虛擬化技術(并且在BIOS里打開虛擬化選項),效率可達到物理機的80%以上。
架構圖
KVM安裝
查詢機器是否支持虛擬化:
如果在輸出中不包含vmx或者svm標識,那么就意味著你的cpu不支持硬件虛擬化。
如果結果大于0,即說明cpu支持虛擬化。因為虛擬化需要CPU支持VMX或者 SVM指令集,VMX是Intel指令。SVM是AMD指令。
在amd64架構的deepin系統上安裝qemu以及virsh虛擬機管理工具:
aarch64架構的系統上安裝下面的包:
sudo apt-get install libvirt0 libvirt-daemon qemu virt-manager bridge-utils libvirt-clients python-libvirt qemu-efi uml-utilities virtinst qemu-system
系統通過加載諸如kvm-intel.ko(基于 Intel 的機器)和kvm-amd.ko(基于 amd 的機器)的內核模塊,使其成為管理程序hyervisor。
查看kvm模塊是否加載:
安裝 qemu 和 libvirtd 軟件包之后,它就會自動啟動并啟用 libvirtd 服務。
圖形化工具(virt-manager)
界面顯示:
創建虛擬機:
使用本地鏡像創建:
設置虛擬的CPU核心數和內存大小:
設置虛擬機網絡,可以使用橋接,也可是使用net轉發:
添加虛擬顯示設備:
添加USB控制器設備:
啟動虛擬機,從本地debian鏡像引導,進入安裝界面
命令行工具 (virsh)
創建存儲池:
配置磁盤映像:
創建虛擬機:
sudo virt-install --name=debian --disk path=/media/deepin/Home/deepin/Spoll1/debian10.img --graphics spice --vcpu=2 --ram=2048 --cdrom=/media/deepin/Home/deepin/debian-10.0.0-arm64-DVD-1.iso --network bridge=virbr0 --os-variant=linux
xml文件創建虛擬機:
修改配置debian10-1.xml文件中的字段和字段分別如下:
定義debian10-1虛擬機和啟動該虛擬機:
遇到的問題
問題一:“unsupported configuration: CPU mode ‘custom’ for x86_64 kvm domain on x86_64 host is not supported”。
解決辦法:重啟主機。
問題二:虛擬機如何打開串口。
解決辦法:虛擬機的啟動參數加入“console=tty0 console=ttyS0,115200”。可以通過virsh console [vm id] 命令,進入虛擬機串口操作。
問題三:非root用戶ssh遠程登錄,執行命令:virt-manager 報如下錯誤:
解決辦法:執行下面命令,把當前用戶加入到組libvirt:
問題四:x11轉發virt-manager圖形界面報錯誤:(virt-manager:12205): Gtk-WARNING **: cannot open display:
解決辦法:使用如下方式連接 :ssh -Y deepin@ServerIP virt-manager
問題五:
創建虛擬機時報權限錯誤:monitor: Could not access KVM kernel module: Permission denied failed to initialize KVM: Permission
解決辦法:
問題六:.aarch64服務器創建支持aarch64架構的虛擬機時,報libvirt版本不支持UEFI。
解決辦法:重啟系統,再創建一次。