参考
https://www.cnblogs.com/pengdonglin137/p/16525428.html
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
工具
- linux问题调查工具指南
- Linux 要如何优化SSD(固态硬盘)?
- linux-磁盘io监控相关工具整理
调试节点
- Block layer statistics in /sys/block//stat
FIO
- github: https://github.com/axboe/fio
- https://fio.readthedocs.io/en/latest/index.html
- Linux下磁盘IO读写测试工具-FIO详解
- hdparm和fio简介
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
smartctl
sg3_utils
- 官网:http://sg.danny.cz/sg/sg3_utils.html
blktrace
- 仓库:https://git.kernel.dk/cgit/blktrace/
- 静态编译的版本:blktrace_2.0.tar.gz
- 利用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
iostat
- 容易被误读的iostat
内核
- 宋宝华:Linux文件读写(BIO)波澜壮阔的一生
- block子系统内核文档
- IOwait 到底在wait什么
- BLOCK层代码分析(0)存储IO框架介绍
- BLOCK 层这么多参数都是什么意思?!
- Long Story of Block - DISCARD
- Long Story of Block - 1 Data Unit
- Long Story of Block - segment
- linux block layer第一篇bio 子系统数据结构及初始化
- linux block layer第二篇bio 的操作
模拟设备
- Null block device driver
- 基于内存的磁盘驱动
block cgroup
- cgroup-blkio子系统分析
- 关于IO throttle
- cgroup–blkio子系统测试-1(throttle测试)
- Linux Cgroup v1(中文翻译)(4):Block IO Controller
- Cgroup blkio简介和测试(使用fio测试)
throttle
- Buffer IO的throttle问题
- Cgroup V2 and writeback support
- Block Throttle
- Block Throttle - Low Limit
io latency
- The block I/O latency controller
- The creation of the io.latency block I/O controller
- iolatency
io prio
- Block io priorities
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调度器
- BFQ (Budget Fair Queueing)
Integrity
- Data Integrity
- Using Linux Block Integrity in Building and Testing Storage Systems
- Slide
- Youtube
- integritysetup
Encryption
- Inline Encryption
- Speeding Up Linux Disk Encryption
zoned block device
- 用null_blk工具来实现模拟分区块设备
Device Mapper
- 内核文档:Device Mapper
- Device Mapper 简介
- Linux Command dmsetup管理LVM
- linux命令----dmsetup
- 高性能存储的另一块拼图——DM 支持 IO Polling
- Userspace block device driver (ublk driver)
Multipath
- Linux 下存储多路径软件 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
- Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测
direct io
- DirectIO的对齐问题
- Why does O_DIRECT require I/O to be 512-byte aligned?
脏页回写
- writeback bdi脏页回写原理linux内核源码解析
- VFS源码分析-Page Cache Writeback脏页回写机制
F2FS
- F2FS源码分析系列文章
FUSE
- 吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
Overlay
- 深入理解overlayfs(一):初识
- 深入理解overlayfs(二):使用与原理分析
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 能够保证在确定的时间回来吗?
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
NVME
- NVME专栏
- NVMe的Linux内核驱动分析
RAID
- RAID1是什么
- RAID 10是什么
书籍推荐
- 《存储技术原理分析 基于Linux 2.6内核源代码》
- 《Linux内核探秘:深入解析文件系统和设备驱动的架构与设计》
- 《深入浅出ssd-固态存储核心技术原理与实战》
- 《大话存储》
问题排查
- How to check Fibre Channel HBAs in Linux
- How to identify the HBA cards/ports and WWN in Linux