Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[linux][kernel]虚拟机场景中获取Guest OS的log

[linux][kernel]虚拟机场景中获取Guest OS的log

作者头像
皮振伟
发布于 2018-04-09 03:24:27
发布于 2018-04-09 03:24:27
1.4K0
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言: GuestOS中如果发生了一些错误,GuestOS还活着,shell已经hung住了,如何获取到GuestOS中的关键log信息呢? 分析: 1,keyboard interrupt

QEMU默认虚拟化出来的键盘i8042,它的irq是1,具有非常高的优先级。可见,在大部分情况下,kernel不挂的情况下,都是可以响应键盘中断的。 2,sysrq linux提供了一组magic key,用来触发特定的内核行为。在Linux的文档中,linux-4.4/Documentation/sysrq.txt有比较具体的描述,在这里截取几个关键的地方:

echo "number" >/proc/sys/kernel/sysrq,用来打开/关闭sysrq功能。简单一点,number取1就好。 配置好了sysrq之后,键盘中敲alt+prtsc+h或者在shell中敲“echo h > /proc/sysrq-trigger”,再dmesg就可以看到一些帮助信息。 3,sendkey 基于上述sysrq,那么可以给GuestOS发送magic key来触发GuestOS的sysrq。但是,如果HostOS也是Linux,那么就会magic会被HostOS截获。不能发送到Guest中。 所以可以使用virsh提供的sendkey能力: virsh send-key e8adebc4-47f8-4d99-95a4-053ac6c6fb11 KEY_LEFTALT KEY_SYSRQ KEY_T 上面的几个KEY_XXX,作者也记不住,每次都要去libvirt/src/util/virkeymaps.h中查看。 4,ttyS0 我们希望把GuestOS的kmsg重定向到Host中的某个文件中,一来方便阅读查看,二来Guest中shell真的hung住了,我们也看不了。 所以,在启动Guest虚拟机之前需要给Guest配置serial设备,在libvirt的文档中使用这样的配置: <serial type='file'> <source path='/mnt/console/e8adebc4-47f8-4d99-95a4-053ac6c6fb11.log' append='off'/> <target port='0'/> </serial> 5,grub cfg 在4部配置完成后,启动Guest就可以使用ttyS0设备了。在guest中执行 echo “Hello World” > /dev/ttyS0,就可以在Host的文件中出现这样的log了。 修改grub的配置,编辑/boot/grub/grub.cfg,修改linux的启动参数: linux /boot/vmlinuz-4.4.0-21-generic root=UUID=807ac0e5-56ce-4906-8474-3d1f8c5894c4 ro console=ttyS0,115200n8 执行sync,再重启,就可以看到很多log写到了对应的文件中了。 6,printk 上述的步骤配置完成后,可以看到大量的kernel的log,但是依然不能看到sysrq的log。因为log level的关系。 在GuestOS中,敲cat /proc/sys/kernel/printk可以看到printk的log level。默认情况下,应该可以看到“4 4 1 7”这样的显示。 printk的log level在linux-4.4/kernel/printk/printk.c中实现,

我们只要关注第一个就行了,在shell中敲echo “8 4 1 7” > /proc/sys/kernel/printk来调整一下。 接下来再触发sysrq就可以看到log了。 7,analysic

作者这里为了复现一个问题,构造场景的时候,看到了类似的log。在执行write的时候,进程进入了D状态了。也是符合预期的,因为作者是为了测试在GuestOS中写数据的时候,做磁盘热拔的。 8,crash sysrq中的c是crash,构造一次crash也挺有趣的,还有就是测试kernel的crash dump功能的时候很有用。 那么,crash是如何实现的呢? inux-4.4.0/drivers/tty/sysrq.c中,

打开panic on oops,在对空指针赋值,就crash了。其他handler也在这个文件中实现的,略有意思。 后记: Good Luck!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[linux][qemu]PVPanic的实现原理以及应用
在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。pvpanic就是一种常见的方式,虚拟化场景的windows蓝屏检查也是基于如此。
皮振伟
2018/12/07
2.9K0
[linux][qemu]PVPanic的实现原理以及应用
Linux kernel 调试方法总结
本文旨在介绍下几种常见的调试方法gdb、crash、kgdb and kdb 以及dynamic debug. 关于在 Linux 内核上使用debuggers,Linus Torvalds 长期以来对它们不太喜欢。简短地解释这种态度是,依赖调试器可能鼓励用权宜之计而非深思熟虑来解决问题,这会导致代码质量恶化。详细解释可以参考https://lwn.net/2000/0914/a/lt-debugger.php3
bingwang
2024/07/08
6710
Linux kernel 调试方法总结
Linux crash分析简明参考
Linux操作系统在作为服务器的场景下应用最为广泛,但是在使用过程中也会遇到莫名崩溃的情况.这时我们就希望能对崩溃前一刻内存中的数据进行分析,从而找到崩溃的原因.本文将对整个过程所涉及到的技术做一个简单但是全面的介绍,包括:如何安装kdump,如何设置系统参数来捕获崩溃前的内存;如何使用crash做简单的分析;并且介绍如何使用更加简便的工具PyKdump来做crash文件的分析.通过了解这些知识, 可以帮助Linux运维人员更快更方便地排查问题.
dinghailong
2023/12/03
2.2K0
guestfs这么强大你知道吗
libguestfs 是Redhat开源的一组工具集,主要用来访问和修改虚拟机的磁盘。其功能非常强大,我们常用的监控虚拟机磁盘使用率、P2V、V2V、备份克隆虚拟机、格式化重置虚拟机磁盘大小等功能libguestfs都能提供。甚至定制操作系统、操作windows虚拟机注册表这样的功能它也包含其中。
虚拟化云计算
2018/04/08
2.6K0
guestfs这么强大你知道吗
使用GDB调试Linux内核
GDB(GNU Debugger)是Linux上的调试程序,可用于C/C++、Go、Rust等多种语言。GDB可以让你在被调试程序执行时看到它的”内部“情况,观察程序在特定断点上的状态,并逐行运行代码。
mazhen
2023/11/24
1.8K0
使用GDB调试Linux内核
CentOS 7.5 安装KVM虚拟机(Linux) 原
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。 它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。 KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。 而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。 广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
拓荒者
2019/05/25
7.1K0
linux kernel的cmdline参数解析原理分析
Kernel启动时会解析cmdline,然后根据这些参数如console root来进行配置运行。
233333
2022/05/10
3.1K0
通过实例来学习使用Linux KVM
KVM是Kernel-based Virtual Machine的缩写,从名字上可以知道,KVM是在支持虚拟化硬件环境上,基于Linux操作系统内核的虚拟化技术。 其上的客户操作系统可以完全虚拟化或者半虚拟化。半虚拟化允许多个客户操作系统在一套硬件上运行,可以更有效的使用系统资源,如:内存,处理器。在半虚拟化中,客户端操作系统被修改得适合在虚拟机上运行,最小化那些不适合在虚拟环境中执行的操作的执行时间。 1. 管理VM的工具 KVM包提供特定的工具来管理虚拟机管理程序qemu-kvm。 不过建议使用li
小小科
2018/05/02
2.1K0
统信服务器操作系统V20 1060e【KVM 虚拟化】
KVM(Kernel-based Virtual Machine)是一个基于Linux内核的开源虚拟化解决方案,它允许在单个物理服务器上运行多个虚拟机。每个虚拟机都可以运行自己的操作系统和应用程序。KVM利用了Linux内核的虚拟化功能,通过将物理主机的资源(如CPU、内存和网络接口)动态分配给虚拟机,实现了对虚拟机的隔离和资源管理。
Kevin song
2024/04/28
9300
统信服务器操作系统V20 1060e【KVM 虚拟化】
麒麟系统V10 SP2 KVM virt-install 创建虚拟机
从ftp,http,nfs启动,如ftp://192.168.10.7/dvd;nfs:192.168.10.7:/dvd
Kevin song
2022/11/19
4.8K0
麒麟系统V10 SP2 KVM virt-install 创建虚拟机
Linux虚拟化入门(一)Qemu,KVM,Virsh 概念指南
本文首发于: https://blog.frytea.com/archives/539/
宋天伦
2022/12/16
3.9K0
KVM虚拟化平台部署及管理
前言 KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6开始KVM便被默认内置于内核中。本文介绍KVM虚拟化平台部署及管理。 KVM简介 KVM特点 KVM必须在具备Intel VT或AMD-V功能的x86平台上运行。KVM包含一个为处理器提供
小小科
2018/05/04
2.6K0
KVM虚拟化平台部署及管理
KVM 虚拟化技术
1.1 前言 1.1.1 什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器
惨绿少年
2018/03/30
6.1K0
利用QEMU+GDB调试Linux内核
对用户态进程,利用gdb调试代码是很方便的手段。而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试。
嵌入式与Linux那些事
2022/05/24
3.5K0
利用QEMU+GDB调试Linux内核
OpenEuler 部署 KVM 虚拟化制作openstack镜像
内核模块导出了一个名为/dev/kvm的设备,该设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间
Kevin song
2023/12/04
1.7K0
OpenEuler 部署 KVM 虚拟化制作openstack镜像
003.KVM虚拟机部署-CentOS6.8
CentOS 7的KVM虚拟机推荐使用qcow2磁盘格式,本实验在KVM中安装CentOS 6.8 64虚拟机。
木二
2019/07/26
7850
003.KVM虚拟机部署-CentOS6.8
kvm 虚拟化安装 Ubuntu 18.04 server
首先要配置好 KVM 环境,上文已经详细说明,磁盘配置类似的使用 qemu-img create -f qcow2 ubuntu.qcow2 100G 命令创建虚拟磁盘,系统镜像可以去官网下载:
宋天伦
2020/07/16
2.5K0
完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像
在部署openstack云平台环境的时候,需要上传镜像到glance。 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下 然后用OZ工具制作openstack的镜像 *******************************安装libvirt虚拟机软件**************************************** [root@openstack-server src]# yum install qemu-kvm libvirt libvirt
洗尽了浮华
2018/01/22
1.4K0
完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像
KVM手动及自动化安装
KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset) 模式。用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码。由于这是一个新的处理器执行模型,代 码不需要任何的改动。   除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件。 在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移 进来)和与剩下的用户空间代码的交互。 kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用calling KQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会 KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。 这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟 机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的 Linux调度器,这个使得KVM代码量十分的小 当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和 硬件。
菲宇
2022/12/02
5060
KVM手动及自动化安装
initramfs-kernel_ubuntu initramfs
Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作。当然initramfs是可选的,Linux中的内核编译选项默认开启initrd。在下面的示例情况中你可能要考虑用initramfs。
全栈程序员站长
2022/09/22
6400
initramfs-kernel_ubuntu initramfs
相关推荐
[linux][qemu]PVPanic的实现原理以及应用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档