技术沉淀分享

Thinking will not overcome fear but action will.

为什么mkfs之后uuid没有立刻更新

为什么mkfs之后uuid没有立刻更新

问题背景: 虚拟机上通过mkfs.xfs格式化盘时,/dev/disk/by-uuid没有实时更新? 通过shell脚本对某块云盘进行格式化,并获取格式化后的/dev/disk/by-uuid/结果时,得到的结果时格式化前的旧数据。 脚本大概内容: mkfs.xfs -f /dev/vdb find /dev/disk/by-uuid/ -type l 但是通过在格式化和find...

linux文件锁flock原理

linux文件锁flock原理

最近再一次使用到文件锁flock,会使用只是基本技能,那么flock到底是怎么实现的呢?具体原理又是怎样的呢?和以往一样套路-分析源码! Linux文件锁flock对应的源码是util-linux,git地址https://github.com/karelzak/util-linux 下载下来编译: ./ autogen.sh ./configure make 编译后在当前目录可...

linux虚拟化之libvirt

linux虚拟化之libvirt

本文主要介绍libvirt架构和核心源码剖析。先看下libvirt在整个虚拟化所扮演的角色和位置 Libvirt主要提供虚拟机管理机制。包括xen/lxc/kvm等。Libvirt包括三个核心部分,API、libvirtd和virsh工具。其中API提供了管理虚拟机的接口,例如创建、启动、重启、销毁等;libvirtd是daemon进程,主要是解析xml文件以及通过RPC调用虚拟化平台(...

为linux内核增加系统新调用实现获取进程数的方法

为linux内核增加系统新调用实现获取进程数的方法

阅读本文之前还是建议读者先了解下系统调用,可参考之前的文章说一说linux的系统调用 大部分人都是通过ps获取机器的进程数,但ps不但消耗大量的系统调用,而且在异常情况下可能会卡死,因为ps命令主要是通过读取/proc目录下的文件获取进程相关信息的。 因此本文通过为linux内核增加系统调用,实现一次系统调用获取系统进程数。 本文使用内核版本:5.5.0 首先在arch/x86/en...

虚拟机创建之qemu逻辑

虚拟机创建之qemu逻辑

qemu模块注册: qemu模块注册主要指的是hw(hardware)注册,核心代码在qemu/hw目录下。 Qemu/hw下所有.c文件基本上都有type_init()函数,type_init是个宏,具体定义在qemu/include/qemu/module.h中。 module_init是个宏,调用register_module_init函数,定义如下: find_type...

kill进程之后内核到底发生了哪些事情

kill进程之后内核到底发生了哪些事情

我们起一个daemon进程,然后kill-9杀掉,为了看下系统调用,我们strace一下kill对应的系统调用。 strace部分结果如图所示: Kill对应源码是coreutils中,本文我们使用coreutils-8.2,编译完之后,在src目录下生成kill二进制文件。通过gdb调试 Kill系统调用对应文件是kernel/signal.c Kill_somethin...

排查文件增删改的两种方法

排查文件增删改的两种方法

平时会遇到一些文件或目录被“神秘进程”删除的问题,例如之前的一个案例。 排查这类问题使用的方法一般不止一种,毕竟方法比问题多嘛^_^。今天就阐述几种排查文件增删改的方法。 方法1:audit Audit是内核提供的一种审计工具,主要通过auditctl添加配置(策略),然后注册到kauditd内核线程,由kauditd负责具体的审计工作,并将审计内容发给auditd进程,记录到对应的日...

linux的cpu调度器CFS之循环调度

linux的cpu调度器CFS之循环调度

上一篇聊一聊linux的cpu调度器CFS,我们已经分析了进程创建之后是如何设置相应数据项以及是否进行抢占调度等逻辑。除了进程创建会涉及到CFS,周期性调度也会使用到CFS。 周期性调度是指Linux定时周期性地检查当前任务是否耗尽当前进程的时间片,并检查是否应该抢占当前进程。一般会在定时器的中断函数中,通过一层层函数调用最终到scheduler_tick()函数。 由于调用task_...

linux是如何进行密码管理的

linux是如何进行密码管理的

对于linux运维人员来说,大部分人应该都知道/etc/passwd和/etc/shadow两个文件,分别存储的是linux用户的用户名以及密码等数据。实际,大部分情况下/etc/shadow才是存放密码的文件,而不是/etc/passwd。 先看下/etc/passwd文件的格式,以下截图为/etc/passwd部分内容: 再看下/etc/shadow文件内容,以下截图为/etc/s...

聊一聊linux的cpu调度器CFS

聊一聊linux的cpu调度器CFS

之前文章linux内核fork剖析分析了fork模式创建进程。其中在copy_process函数中sched_fork主要实现父子进程的时间片分割。本文主要分析linux调度器之CFS的逻辑,包括调度算法和数据结构等。有益于linux内核学习者对linux的CPU调度有一定的认识和熟悉。 task_fork是一个函数指针,实际调用的是fair_sched_class的task_fo...