文件系统是对存储设备上的文件,进行组织管理的机制。组织方式不同,就会形成不同的文件系统。
为了方便管理,Linux 文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry)。它们主要用来记录文件的元信息和目录结构。索引节点是每个文件的唯一标志,而目录项维护的正是文件系统的树状结构。

磁盘内的分类
目录项、索引节点、逻辑块以及超级块,构成了 Linux 文件系统的四大基本要素。为了支持各种不同的文件系统,Linux 内核在用户进程和文件系统的中间,又引入了一个抽象层,也就是虚拟文件系统 VFS(Virtual File System)。VFS 定义了一组所有文件系统都支持的数据结构和标准接口。这样,用户进程和内核中的其他子系统,就只需要跟 VFS 提供的统一接口进行交互。

命令
查询磁盘容量
#常见的查询方式
df -h
# -i 参数,查看索引节点的使用情况
df -hi
Linux 存储系统的 I/O 栈,由上到下分为三个层次,分别是文件系统层、通用块层和设备层。
通用块层是 Linux 磁盘 I/O 的核心。向上,它为文件系统和应用程序,提供访问了块设备的标准接口;向下,把各种异构的磁盘设备,抽象为统一的块设备,并会对文件系统和应用程序发来的 I/O 请求进行重新排序、请求合并等,提高了磁盘访问的效率。
阻塞 / 非阻塞针对的是 I/O 调用者(即应用程序),而同步 / 异步针对的是 I/O 执行者(即系统)。
磁盘性能指标
在数据库、大量小文件等这类随机读写比较多的场景中,IOPS 更能反映系统的整体性能;而在多媒体等顺序读写较多的场景中,吞吐量才更能反映系统的整体性能。
# c选项输出CPU相关数据
[tinys@localhost ~]$ iostat -c
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 07/06/19 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.43 0.00 1.41 3.06 0.00 95.10
# d选项表示输出磁盘相关数据
[tinys@localhost ~]$ iostat -d
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 07/06/19 _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 8.28 242.74 23.06 303301 28814
# 使用x选项输出统计信息
[tinys@localhost ~]$ iostat -d -x 1
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 07/06/19 _x86_64_ (1 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 14.77 5.59 9.58 2.24 355.88 31.27 65.54 0.13 10.87 8.07 22.86 4.11 4.85
[tinys@localhost ~]$ iostat -c -x
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 07/06/19 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.39 0.00 1.28 2.74 0.00 95.59
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 10.45 4.16 6.78 1.80 251.83 23.81 64.28 0.09 10.83 8.07 21.21 4.04 3.47

实时观测的pidstat
# kB_rd/s每秒读取的数据大小,单位是KB
# kB_wr/s每秒发出的写请求数据大小,单位是KB
# 每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。
# 块 I/O 延迟(iodelay),包括等待同步块 I/O 和换入块 I/O 结束的时间,单位是时钟周期。
pidstat -d 1
13:39:51 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
13:39:52 102 916 0.00 4.00 0.00 0 rsyslogd
进程排序的iotop
# 前两行分别表示,进程的磁盘读写大小总数和磁盘真实的读写大小总数。
# 因为缓存、缓冲区、I/O 合并等因素的影响,它们可能并不相等。
# 剩下的部分,则是从各个角度来分别表示进程的 I/O 情况,
# 包括线程 ID、I/O 优先级、每秒读磁盘的大小、每秒写磁盘的大小、换入和等待 I/O 的时钟百分比等。
iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 7.85 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
15055 be/3 root 0.00 B/s 7.85 K/s 0.00 % 0.00 % systemd-journald
lsof观察具体进程打开了哪些文件
# -p 指定进程id
#输出参数解释
# FD 文件描述符
# TYPE 文件类型
# NAME 文件路径
## 注意 FD中最后一个`3w`表示它的文件描述符是 3 号,而 3 后面的 w ,表示以写的方式打开
lsof -p 18940
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 18940 root cwd DIR 0,50 4096 1549389 /
python 18940 root rtd DIR 0,50 4096 1549389 /
…
python 18940 root 2u CHR 136,0 0t0 3 /dev/pts/0
python 18940 root 3w REG 8,1 117944320 303 /tmp/logtest.txt
具体查询buffer与cache具体各占用了多少的命令
[root@localhost ~]# cat /proc/meminfo | head -5
MemTotal: 1012352 kB
MemFree: 507836 kB
Buffers: 61392 kB
Cached: 252092 kB
SwapCached: 0 kB
线程找进程
# 根据线程找进程
# -T 参数表示线程
ps -efT | grep 514
root 12280 514 14626 33 14:47 pts/0 00:00:05 /usr/local/bin/python
| 留言与评论(共有 0 条评论) |