无需执行命令,如何从Linux的/proc或/sys读取磁盘分区信息?
直接读取系统文件获取磁盘分区信息(无需外部命令)
可行性确认
完全可行。Linux的「Everything is a File」核心理念就是将系统状态、硬件设备等资源抽象为可读写的文件接口,磁盘分区的各类状态信息都能通过/proc、/sys等虚拟文件系统下的文件直接读取,无需依赖df、mount这类外部命令。
各字段具体获取方式
1. 挂载点与文件系统类型
读取/proc/mounts文件,每一行对应一个挂载实例,格式示例:
/dev/sda1 / ext4 rw,relatime 0 0
字段对应关系:
- 第1列:分区的设备路径(如
/dev/sda1) - 第2列:挂载点(如根目录
/) - 第3列:文件系统类型(如
ext4)
2. 分区总容量
针对目标分区(如sda1),读取/sys/class/block/<分区名>/size文件,文件内的数值是扇区总数。再乘以扇区大小(通常为512字节,可通过/sys/class/block/<分区名>/queue/hw_sector_size获取实际值),即可得到总字节数:
# 示例计算sda1总容量 sector_count=$(cat /sys/class/block/sda1/size) sector_size=$(cat /sys/class/block/sda1/queue/hw_sector_size) total_bytes=$((sector_count * sector_size))
3. 文件系统使用量
不同文件系统的使用统计存放在/sys/fs/<文件系统类型>/下的对应目录中,以ext4为例:
- 总块数:
/sys/fs/ext4/<分区名>/blocks_count - 已用块数:
/sys/fs/ext4/<分区名>/used_blocks - 单块大小:
/sys/fs/ext4/<分区名>/block_size
通过已用字节数 = 已用块数 × 单块大小即可计算出已使用空间。对于tmpfs这类虚拟文件系统,可查看/sys/fs/tmpfs/<挂载点>/下的blocks(总块数)和used_blocks字段。
注意事项
- 部分
/sys/fs下的文件需要root权限才能读取 - 逻辑卷(如LVM)的设备对应
/sys/class/block/dm-xx/目录,可通过/sys/class/block/dm-xx/dm/name关联到逻辑卷名称 /proc/diskstats包含磁盘级别的I/O统计,但仅用于设备层面的读写计数,不直接对应文件系统的使用量
内容的提问来源于stack exchange,提问作者studybox
相关产品推荐
相关产品推荐

