IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 如何理解 stat 命令显示的 Blocks 和 IO Block -> 正文阅读

[系统运维]如何理解 stat 命令显示的 Blocks 和 IO Block

场景描述

待测文件:README

实际大小 8755 字节,约等于 8.6K

$ ls -l README 
-rw-r--r-- 1 liyongjun liyongjun 8755 125  2018 README
$ ls -lh README 
-rw-r--r-- 1 liyongjun liyongjun 8.6K 125  2018 README

占用空间 12K

$ du -h README 
12K	README

stat 显示

$ stat README 
  File: README
  Size: 8755      	Blocks: 24         IO Block: 4096   regular file
Device: 805h/2053d	Inode: 1726296     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/liyongjun)   Gid: ( 1000/liyongjun)
Access: 2022-04-06 09:33:50.000000000
Modify: 2018-12-05 22:44:34.000000000
Change: 2020-12-18 14:08:37.000000000

疑惑

stat 命令显示的 Blocks 和 IO Block 是什么意思?因为很显然:

Size 不等于 Blocks * IO Block
占用空间 也不等于 Blocks * IO Block


明确一:IO Block

$stat LICENSE 
  File: LICENSE
  Size: 18348     	Blocks: 40         IO Block: 4096   regular file
Device: 805h/2053d	Inode: 1713584     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/liyongjun)   Gid: ( 1000/liyongjun)
Access: 2022-04-06 09:33:50.000000000
Modify: 2018-12-05 22:44:34.000000000
Change: 2020-12-18 14:08:37.000000000

$ stat Makefile
  File: Makefile
  Size: 43176     	Blocks: 88         IO Block: 4096   regular file
Device: 805h/2053d	Inode: 1724286     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/liyongjun)   Gid: ( 1000/liyongjun)
Access: 2022-04-06 09:33:51.000000000
Modify: 2020-06-27 03:22:49.000000000
Change: 2020-12-18 14:08:37.000000000

??发现对于任意文件,IO Block 恒为 4096,可以推断出这是个固定值,含义为:文件系统的最小寻址单元
在这里插入图片描述
??扇区为 512 字节,IO Block 为 4096,说明当前系统将 8 个扇区做为一个
??对于文件系统而言,它能读写的最小粒度为 1 个 IO Block,此处为 4K。

令人疑惑的 Blocks

??唯一的疑惑就是 Blocks 了。
??网上搜索到的答案都是:表示块数、占用空间 = Blocks * IO Block。很显然这些都是错误答案,至少不适用于我当前使用的系统(应该只有 IO Block 为 512 字节的系统,才适用于:占用空间 = Blocks * IO Block)。总之,互连网上充斥着很多未经验证的错误答案,甚至曝光量比正确答案都多,这一现象真让人痛心!
??既然没人给出正解,那只能靠自己了。万法归一,查看源码。
??阅读 stat.c,发现 Blocks 和 IO Block 分别对应于 stat 结构中的 st_blocks 和 st_blksize

// 作了部分删减
struct stat
  {
    __dev_t st_dev;		/* Device.  */
    unsigned short int __pad1;
    __ino_t __st_ino;			/* 32bit file serial number.	*/
    __mode_t st_mode;			/* File mode.  */
    __nlink_t st_nlink;			/* Link count.  */
    __uid_t st_uid;		/* User ID of the file's owner.	*/
    __gid_t st_gid;		/* Group ID of the file's group.*/
    __dev_t st_rdev;		/* Device number, if device.  */
    __off_t st_size;			/* Size of file, in bytes.  */

    __blksize_t st_blksize;	/* Optimal block size for I/O.  */
    __blkcnt_t st_blocks;		/* Number 512-byte blocks allocated. */

    __ino64_t st_ino;			/* File serial number.	*/
  };
  • st_blocks Number 512-byte blocks allocated. 分配的块数,以 512 字节为单位
  • st_blksize Optimal block size for I/O. 最优的 IO 块大小,可以理解为 best I/O block size

??所以,重点,Blocks 指的是以 512 字节为单位的块的数量,或者理解为扇区数,因为一个扇区就是 512 字节。

再回首

??再回头看 stat 展示的信息

$ stat README 
  File: README
  Size: 8755      	Blocks: 24         IO Block: 4096   regular file
Device: 805h/2053d	Inode: 1726296     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/liyongjun)   Gid: ( 1000/liyongjun)
Access: 2022-04-06 09:33:50.000000000
Modify: 2018-12-05 22:44:34.000000000
Change: 2020-12-18 14:08:37.000000000

??Blocks 为 24,那大小就是 512 * 24 = 12K,和 du 展示的占用空间大小一致。即 占用空间 = Blocks * 512

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:07:00  更:2022-04-07 23:07:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:30:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码