文件打洞和稀疏文件 稀疏文件稀疏文件是一种文件,其中大部分内容是空的(或者说是零填充的),但文件系统仍然为其分配了存储空间,文件大,实际占用磁盘空间少,我们 使用lseek或truncate到一个固定位置生成的“空洞文件”是不会占据真正的磁盘空间。 123456789101112131415161718192021222324252627282930313233343536#include <stdio.h&g 2024-02-26 #linux
内核中文件路径是如何解析的? 前言在文件描述符文章中已经介绍 fd是如何生成的;原本想接下来 说下 fd 和 文件是怎么关联的,但是粗略的看了来整个过程,实在是太复杂,有很多前置的知识点,很难一下子展开讲,要讲明白的话不是一两篇文章能解决的;于是 打算围绕这个问题,再细分下来,逐个击破。 本章的内容 就先简单的介绍 文件路径再linux 中怎么解析的 在文件描述符介绍的文章中 也有讲过 open 函数,这里就不重复叙述怎么进 2024-02-18 Linux #Linux内核
do_last 前言书接上回! 内核中文件路径已经介绍了,一个字符路径是怎么解析的? 路径解析主要是 link_path_walk 函数, 而 do_last 函数是做什么的? 12345678static struct file *path_openat(struct nameidata *nd, const struct open_flags *op, unsigned flags){/ 2024-02-18 Linux #Linux内核
rocky系统编译ceph 不同系统编译ceph 遇到的问题大多情况是 缺包;缺包的话有两种方式 做不同系统编译ceph 遇到的问题大多情况是 缺包;缺包的话有两种方式 直接从yum 源里面安装 从官方https://rockylinux.pkgs.org/ 下载 rpm包,手动安装 这两个方法可以解决大多数的缺包问题,当然也有些包没有适配操作系统的可能需要自己拉源码编译,这种比较繁琐,这个方法放在最后,实在不行才自己编 2024-02-17 ceph #ceph
inode 是什么? inode 是什么?文件数据是存放在磁盘上;磁盘最小的单位是 512byte,我们称之为扇区;在与操作系统交互的过程中,操作系统读取磁盘最小粒度并不是一个扇区,而是8个扇区,也就是4k,称之为块; 扇区是设备的最小寻址单元 块是文件系统最小寻址单元 从操作系统的角度来看,磁盘分为了很多个块,文件数据也是存放在块里面; 和其他主流的存储系统一样,也需要元数据,也就是描述这个块的数据,存放块元数据 2024-01-25 Linux #Linux内核
asan内存检测 asan 是什么ASAN(Address Sanitizer)是针对 C/C++ 的快速内存错误检测工具,用于检测原生代码中的内存错误。相对于我们比较熟悉的 valgrind ,Asan 开销更小、检测到的错误范围更大; ASAN 早先是 LLVM 中的特性,后被集成到 GCC 4.8 中,可通过在编译时设置 CFLAGS,指定相关的编译参数来开启ASAN 特性 ASan 可以检 2024-01-24 #内存检测
文件描述符是? fd 是什么?文件描述符是一个与输入/输出资源相关的整数,也可以被称为文件句柄(file handle)、文件指针(file pointer)或文件引用(file reference)。简单来说,它是操作系统为了管理 I/O 操作而维护的一个表中的索引,代表着系统中打开的文件的一个“门牌号”,在linux 世界中一切皆文件,文件描述符占比很关键 文件描述符的应用 文件操作 2024-01-23 Linux #Linux内核
系统调用 什么是系统调用?系统调用 是内核提供给应用程序使用的功能函数,由于应用程序一般运行在 用户态,处于用户态的进程有诸多限制(如不能进行 I/O 操作),所以有些功能必须由内核代劳完成。而内核就是通过向应用层提供 系统调用,来完成一些在用户态不能完成的工作 说白了,系统调用其实就是函数调用,只不过调用的是内核态的函数。但与普通的函数调用不同,系统调用不能使用 call 指令来调用,而是 2024-01-22 Linux #Linux内核
内核调试 --环境搭建篇 在看ceph 源码的时候,一般都是搭建一个环境,然后gbd 到指定函数,边调试边分析,这样很方便,效率也高,前段时间 突然想到 ,系统调用能不能调试呢? 比如 调用个 write 函数,写数据到一个文件,这背后发生了什么?又比如 我们使用 socket 通信 ,然后收数据,这过程我们能不能用gdb 追踪呢? 带着这些问题,在网上摸索一大圈,于是记录下 准备工作 && 预备知 2024-01-21 Linux #Linux内核
rgw源码走读-桶创建流程 rgw创建桶的流程 也是和其他请求一样,都是三部曲,主要流程在 RGWCreateBucket::execute() 里面,本次也是直接从这里出发(前面处理请求的大差不差,会有专门用一篇文章来介绍),这里组要介绍下bucket的概念,s3对桶的约束,以及解答以下几个问题? 创建桶的时候,桶的实例时持久化哪里? 那个池?是那个对象?有什么内容?桶id 的命名规则是? 创建桶后生成那些文件 2024-01-03 Linux #ceph