2014-7-29 15:09| 发布者: tianzc| 查看: 351| 评论: 0
Linux文件系统十问 --关于文件系统,你知道吗? 作者:yanfei,腾讯后台架构师,参与项目为搜搜网页开发和搜搜开放平台。 关于文件系统,相信大家都不陌生。身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢。那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧: 1、机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的? 2、touch一个新的空文件占用磁盘空间吗? 占用的话占用多少? 3、新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大? 4、你知道文件名是记录在磁盘的什么地方吗? 5、文件名最长多长?受什么制约? 6、文件名太长了会影响系统性能吗?为什么会产生影响? 7、一个目录下最多能建立多少个文件? 8、新建一个内容大小1k的文件,实际会占用多大的磁盘空间? 9、向操作系统发起读取文件2Byte的命令,操作系统实际会读取多少呢? 10、我们使用文件时要怎么样来能提高磁盘IO速度? 如果你能想也不用想的就回答上来百分八十的问题,那么请关掉本篇文章吧。如果不能,而且你也像作者一样对有窥探操作系统隐私的嗜好,那么就请随我一起来探索文件系统的这些有趣的地方,相信理解了这些之后对我们手中的工作会有很大的帮助。 一、磁盘构成及分区 1、磁盘物理结构 还是先从最基本的磁盘物理结构说起吧,注意本文只讨论机械磁盘,SSD不在本文讨论范围之内。我们人类管理任何事物总是习惯先划分出一定的结构,再此规则的基础上进行管理。军队分军、师、旅、团和营。公司分事业群、部门、中心和小组。,然后。对于管理磁盘,分磁盘面、磁头、磁道、柱面和扇区。 磁盘面:磁盘是由一叠磁盘面组成,见下左图。 磁头(Heads):每个磁头对应一个磁盘面,负责该磁盘面上的数据的读写。 磁道(Track):每个盘面会围绕圆心划分出多个同心圆圈,每个圆圈叫做一个磁道。 柱面(Cylinders):所有盘片上的同一位置的磁道组成的立体叫做一个柱面。 扇区(Sector):以磁道为单位管理磁盘仍然太大,所以计算机前辈们又把每个磁道划分出了多个扇区,见下右图 本人爱上Linux的一个原因就是只要你愿意下功夫,你就能把Linux的外衣一脱到底,满足你的一切欲望(请想歪的骚年去面壁)。Linux上可以通过fdisk命令,来查看当前系统使用的磁盘的这些物理信息。 以上是我本人的一台虚拟机的磁盘物理信息。可以看出我的磁盘有255个heads,也就是说共有255个盘面。3263个cylinders,也就是说每个盘面上都有3263个磁道, 63sectors/track说的是每个磁道上共有63个扇区。命令结果也给出了Sector size的值是512bytes。那我们动笔算一下该磁盘的大小吧。 255盘面 * 3263柱面 * 63扇区 * 每个扇区512bytes = 26839088640byte。 结果是26.8G,和磁盘的总大小相符(至于fdisk给出的详细结果相差了约4M的大小,笔者也没有弄彻底明白,有兴趣的读者可以继续研究)。 另外查看了其它两台机器的磁盘情况,发现个有意思的事情。如下图,无论磁盘的容量大或者是小,其磁头数和每磁道扇区数都是不变的,只是磁道变多了而已。 |