论文
Linux I/O栈
- Linux内核的I/O栈大图
- 知乎Linux I/O专栏1
- Linux 块设备之Block Layer层架构演变
- Linux VFS机制简析(一)
- Linux VFS机制简析(二)
- Linux Kernel文件系统写I/O流程代码分析(一)
- Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback
- 内核文档:Filesystems in the Linux kernel
工具
- linux问题调查工具指南
- Linux 要如何优化SSD(固态硬盘)?
- linux-磁盘io监控相关工具整理
- Linux block devices: hints for debugging and new developments
调试节点
dd
FIO
- github: https://github.com/axboe/fio
- HOWTO.rst
- https://fio.readthedocs.io/en/latest/index.html
- Linux下磁盘IO读写测试工具-FIO详解
- hdparm和fio简介
- linux 磁盘IO测试工具:fio (同时简要介绍dd工具测试)
- Fio Output Explained
ioprof
blktrace
- 仓库:https://git.kernel.dk/cgit/blktrace/
- 静态编译的版本:blktrace_2.0.tar.gz
- blktrace分析IO 绘制图表
- 利用blktrace分析磁盘I/O
- 利用blktrace分析IO性能
- io分析神器blktrace
- Deep in blktrace
- Linux IO性能分析blktrace/blk跟踪器
- blktrace工具
- Debugging disk issues with blktrace, blkparse, btrace and btt in Linux environment
- ftrace interface for blktrace
- blktrace + blkparse + btt 分析IO
iotrace
iostat
- 容易被误读的iostat
- I/O statistics fields
- 深入理解iostat
- 深入分析diskstats
- IOSTAT中关于%util,svctm存在的陷阱及解决办法
- 瓶颈确认之IO瓶颈确认之第一篇
hdparm
- 查看一个文件实际使用了哪些扇区
hdparm --fibmap xxx
dumpe2fs
用法(来自chatgpt)
dumpe2fs
是一个用于显示 ext2、ext3、ext4 文件系统信息的命令行工具。以下是 dumpe2fs
的用法:
dumpe2fs [选项] 设备文件名
其中,[选项]
可以是以下任意组合:
-h
:显示帮助信息。-V
:显示版本信息。-b
:显示块位图的信息。-i
:显示 inode 位图的信息。-I
:显示 inode 表的信息。-l
:显示文件系统的块和 inode 的数量、大小、使用情况等信息。-o
:显示文件系统的挂载选项。-p
:显示文件系统的预读块数。-r
:显示文件系统的块组摘要信息。-S
:显示文件系统的超级块信息。-x
:显示文件系统的扩展信息。
设备文件名
是要显示信息的文件系统所在的设备文件名,例如 /dev/sda1
。
例如,要显示 /dev/sda1
文件系统的块和 inode 的数量、大小、使用情况等信息,可以使用以下命令:
dumpe2fs -l /dev/sda1
debugfs
debugfs
是一个用于调试文件系统的工具,可以用于查看和修改文件系统的内部状态。以下是一些常见的 debugfs
命令:
- 打开文件系统:
debugfs /dev/sda1
(假设/dev/sda1
是要调试的文件系统) - 查看文件系统的超级块信息:
stat <文件系统根目录的inode号>
- 查看文件系统的块位图:
bmap <文件名>
- 查看文件系统的inode位图:
imap <文件名>
- 查看文件系统的inode信息:
inode <inode号>
- 查看文件系统的目录项信息:
ls <目录名>
- 查看文件系统的文件内容:
cat <文件名>
- 修改文件系统的inode信息:
write <inode号> <偏移量> <数据>
- 修改文件系统的目录项信息:
set <目录项名> <inode号>
- 退出
debugfs
:quit
请注意,使用 debugfs
可能会对文件系统造成不可逆的损坏,因此在使用之前请务必备份数据。
fsck
tune2fs
blockdev
smartctl
NVME CLI
sg3_utils
Storcli64
MegaRAID
内核
- 宋宝华:Linux文件读写(BIO)波澜壮阔的一生
- 刘正元: Linux 通用块层之IO合并
- block子系统内核文档
- IOwait 到底在wait什么
- BLOCK层代码分析(0)存储IO框架介绍
- BLOCK 层这么多参数都是什么意思?!
- Long Story of Block - 1 Data Unit
- Long Story of Block - segment
- linux block layer第一篇bio 子系统数据结构及初始化
- linux block layer第二篇bio 的操作
- 存储IO落盘原理及路径分析
文件系统
EXT2/3/4
- Understanding Linux ext2 ext3 and ext4 filesystems
- Frequently Asked Questions
- Upgrade To Ext4
- ext4(5) — Linux manual page
EXT4
- Ext4 Howto
- ext4 Filesystem
- ext4 Data Structures and Algorithms
- https://www.thomas-krenn.com/en/wiki/Ext4_Filesystem
- EXT4文件系统的磁盘整体布局
- ext4 mounted with default delalloc option can cause slow IO performance when
batching writes - ext4文件系统的delalloc选项造成单次写延迟增加的分析
- Understanding Ext4 Disk Layout, Part 1
- Understanding Ext4 Disk Layout, Part 2
- Directory Entry Lookup in ext4
- mkfs.ext4 - What it actually creates
- Introduction to the Ext4 File System for Linux
- A Minimum Complete Tutorial of Linux ext4 File System
- An introduction to Linux's EXT4 filesystem
EXT2
- The Second Extended Filesystem
- https://www.nongnu.org/ext2-doc/
- https://wiki.osdev.org/Ext2
- The File system
F2FS
FUSE
Overlay
脏页回写
- writeback bdi脏页回写原理linux内核源码解析
- VFS源码分析-Page Cache Writeback脏页回写机制
- https://lwn.net/Kernel/Index/#Memory_management-Writeback
预读
模拟设备
block cgroup
- cgroup-blkio子系统分析
- cgroupv2 权威指南
- cgroup--blkio子系统测试-1(throttle测试)
- Linux Cgroup v1(中文翻译)(4):Block IO Controller
- Cgroup blkio简介和测试(使用fio测试)
- I/O bandwidth controllers
throttle
- 关于IO throttle
- Buffer IO的throttle问题
- Cgroup V2 and writeback support
- Block Throttle
- Block Throttle - Low Limit
- Resource management in Docker
io latency
io prio
- Block io priorities
- How disk IO priority is related with process priority?
- How to Manage the Priority of I/O Processes in Linux
io cost
- blk-iocost: iocost: improve donation, debt and excess handling
- blk-iocost权重限速
- IOCost: Block IO Control for Containers in Datacenters
Discard
blk-mq
- linux内核block层Multi queue多队列核心点分析
- Multi-queue 架构分析
- Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems
- Block multi-queue 架构解析(一)数据结构
- Block multi-queue 架构解析(二)流程与机制
- blk-mq arch
- Multi-Queue Block IO Queueing Mechanism (blk-mq)
IO调度器
Integrity
Encryption
Zoned Block Device
- ZNS的前世今生
- 西数 Zoned Storage 分区存储
- ZNS : 解决传统SSD问题的高性能存储栈设计
- 用null_blk工具来实现模拟分区块设备
- Zoned Storage
- Zoned Block Device Emulation
Device Mapper
- 内核文档:Device Mapper
- Device Mapper 简介
- Linux Command dmsetup管理LVM
- linux命令----dmsetup
- 高性能存储的另一块拼图——DM 支持 IO Polling
- Userspace block device driver (ublk driver)
LVM
Multipath
- Linux 下存储多路径软件 MultiPath 源码分析
- Multipath 切换主路径
- redhat DM Multipath
- 红帽DM multipath技术文档
- https://github.com/opensvc/multipath-tools
- Linux multipathd多路径
- 使用scsi_debug测试dm-multipath多路径软件的简单实验
- 第1讲 多路径软件multipath的介绍与安装
- 第2讲 scsi设备模拟器scsi_debug
- 第3讲 multipath聚合由scsi_debug模拟的设备
- 4.如何删除多路径设备和scsi设备
- 第5讲 multipath的属性features
- 第6讲 multipath的路径选择path-selector
- 第7讲 multipath的路径分组策略
- Beginners guide to Device Mapper (DM) multipathing
IO Uring
Bcache
Flashcache
DirectIO
SCSI
- 协议
- Linux Scsi子系统框架介绍
- https://www.cnblogs.com/pengdonglin137/p/16383560.html
- 内核文档:Documentation/scsi/
- 内核文档:SCSI_EH
- 内核文档:SCSI mid_level - lower_level driver interface
- 内核文档:SCSI Kernel Parameters
- linux scsi相关的一些学习笔记
- SCSI代码分析(0)SCSI层框架
- SCSI设备IO栈与块设备并发机制
- Scsi_debug adapter driver for Linux
- scsi设备模拟器scsi_debug
- IO 能够保证在确定的时间回来吗?
- BLOCK_SCSI 专栏
- kernel 3.10内核源码分析--IO--SCSI错误处理机制
iscsi
- iscsi服务器介绍和搭建
- ISCSI服务器搭建与配置
- block & scsi & iscsi 开启调试日志
- 聊一聊存储协议中的孪生兄弟SCSI和iSCSI
- 什么是ISCSI?ISCSI又能干什么呢?
- iscsiadm和iscsid的源码
- Linux文件系统-ISCSI存储和Multipathd
- Multipath 多路径
- iSCSI与multipath部署
- iSCSI initiator软件架构
- ISCSI介绍
- iSCSI(一) iSCSI详解 及 iSCSI配置
- open-iscsi
- iSCSI command
- How to get scsi_id
NVME
RAID
书籍推荐
- 《存储技术原理分析 基于Linux 2.6内核源代码》
- 《Linux内核探秘:深入解析文件系统和设备驱动的架构与设计》
- 《深入浅出ssd-固态存储核心技术原理与实战》
- 《大话存储》