专栏首页用户6517667的专栏软件性能测试(连载11)

软件性能测试(连载11)

3. 磁盘和文件

1)文件存储结构[29]

Linux的文件存储结构如图3-29所示。

图3-29 Linux的文件结构

索引节点(inode)是持久化存储到磁盘中的,而目录项(dentry)是由内核维护(目录项缓存)的。

在讨论文件存储结构之前需要了解一下扇区(Sector)和块(block),一个扇区为512B,操作系统读取硬盘的时候,不会一个个扇区地去读取,这样效率非常的低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。每8个扇区为一个块,块的大小为(512B×8=4098B,即4KB)。文件数据都存储在“块”中,必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件的元信息区域就叫做索引节点(inode)。

①inode的内容

inode包含文件的元信息,具体来说有以下内容。

•文件的字节数。

•文件拥有者的User ID。

•文件的Group ID。

•文件的读、写、执行权限。

•文件的时间戳。

时间戳共有三个。

Øctime指inode上一次变动的时间。

Ømtime指文件内容上一次变动的时间。

Øatime指文件上一次打开的时间。

•链接数,即有多少文件名指向当前inode。

•文件数据block的位置。

可以用stat命令,查看某个文件的inode信息。

# stat runserver.bat

File: runserver.bat

Size: 52 Blocks: 8 io Block:4096 regular file

Device: 801h/2049d Inode: 554863 Links: 1

Access: (0777/-rwxrwxrwx) stat runserver.bat

Access: 2019-12-06 01:38:13.895735646 -0800

Modify: 2019-01-30 01:40:25.009354932 -0800

Change: 2019-01-30 01:40:25.021354285 -0800

Birth: -

②inode的大小

由于inode也要消耗硬盘,所以硬盘格式化的时候,操作系统会自动把硬盘分成两个区域:数据区,用于存放文件数据inode区(inode table),用于存放inode信息。

作为一个单独的inode节点,一般是128个字节或者256个字节。inode节点的总数,在格式化的时就给定了,一般是每1KB或每2KB设置一个inode节点。假定2GB的硬盘中,每个inode节点的大小为128个字节,每1KB设置一个inode节点,这样inode table的大小就会达到256MB,占整块硬盘的12.8%。

可以通过df -i命令来查看每个硬盘分区的inode总数和已经使用的数量。

# df -i

Filesystem Inodes IUsed IFree IUse% Mounted on

udev 531381 493 530888 1% /dev

tmpfs 539081 1016 538065 1% /run

/dev/sda1 1310720 364285 946435 28% /

tmpfs 539081 1 539080 1% /dev/shm

tmpfs 539081 5 539076 1% /run/lock

tmpfs 539081 18 539063 1% /sys/fs/cgroup

/dev/loop0 354 354 0 100% /snap/gnome-logs/81

/dev/loop1 25385 25385 0 100% /snap/gtk-common-themes/1198

还可以利用df来查看某个Filesystem磁盘详细情况。

# df /dev/sda1

Filesystem 1K-blocks Used Available Use%Mounted on

udev 373728 124 373604 1% /dev

使用-h参数更便于阅读。

# df -h /dev/sda1

Filesystem Size Used Avail Use% Mounted on

udev 365M 124K 365M 1% /dev

df如果不加-i参数,不会统计inode大小的。有时候剩余空间很充足,但是系统提示磁盘空间不足,可以确定是否索引过大需要占的磁盘空间,需要通过df -i来查看。

③ 目录项

目录项(dentry)是用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构。

2)虚拟文件系统 VFS(Virtual File System)

在Windows95、Windows98中使用的是FAT格式的文件系统,到WindowNT以后Window改用NTFS文件格式。在Linux中文件格式就多了,包括。

•基于磁盘的文件系统。Ext4、XFS、OverlayFS等。

•基于内存的文件系统(虚拟文件系统)。不需要任何磁盘分配存储空间,但会占用内存。比如:/proc 、/sys。

•基于网络文件系统。NFS、SMB、iSCSI 等。

为了兼容以上各种不同的文件格式,Linux提出虚拟文件系统 VFS的概念,Viritual Filesystem给用户空间程序提供统一的文件和文件系统访问接口的内核子系统。借助VFS,即使文件系统的类型不同,也可以实现文件系统之间的交互,比如:移动、复制等。VFS所处位置如图3-30所示。

图3-30 Viritual File system所处位置

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:顾翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DevOps工具介绍连载(20)——Google App Engine

    2008年4月7号,Google在Campfire One上介绍了一种简化创建、运行和构建伸缩性Web应用的工具——Google App Engine。简而言之...

    小老鼠
  • 接口测试小白的Testng学习之路--Testng

      TestNG使用注释来帮助开发人员编写测试。了解TestNG提供的所有注释及其简要说明。

    小老鼠
  • 为什么抢不到口罩?来看看秒杀系统是怎么实现的

     今年这波新型冠状肺炎,对很多公司的后台系统是一个大考,有一朋友,之前主要做医疗药物的云商城,这次服务也被压垮了好几次,几乎每次口罩、消毒水等物品上架,就被秒杀...

    小老鼠
  • 当创建一个文件的时候,操作系统发生了什么

    操作文件是我们平时经常有的操作。但是我们可能并不是很了解他们原理,比如为什么删除一个很大的文件,会非常快?创建一个文件的时候,系统发生了什么?为什么删除的文件,...

    theanarkh
  • 揭开虚拟文件系统的云雾(1)(基于linux1.2.13)

    这一篇我们来看看,虚拟文件系统是如何抹平各个文件系统的差异,又是如何和具体的文件系统串起来的。 我们先来回顾一下之前的讲的内容。

    theanarkh
  • Linux文件系统和inode

    学到linux上的软连接和硬链接,不得不了解inode,要想知道inode,不得不了解一些文件系统,至少是Linux文件系统

    用户5807183
  • linux系统调用之sys_close(基于linux0.11)

    进程PCB中有一个指针数组,文件描述符是数组索引,每个元素指向一个file结构体,file结构体有一个字段指向文件对应的inode。关闭一个文件主要的步骤是 1...

    theanarkh
  • linux系统调用之sync源码解析(基于linux0.11)

    我们知道write函数写入的数据不是实时同步硬盘的,系统提供了一个函数让我们的数据可以实时地同步到硬盘,那就是sync。但这个实时也是相对的,毕竟同步数据也需要...

    theanarkh
  • Linux删除文件过程解析

    腾讯数据库技术
  • [040]Linux Storage 入门

    本文大量代码基于linux 0.11,因为早期linux的版本更加适合初学者入门。虽然代码比较早,但是不妨碍我们学习Linux Storage的精髓。

    王小二

扫码关注云+社区

领取腾讯云代金券