今天读到这篇文章:Linux文件系统十问,你知道吗?,作了个总结笔记:

1、机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的?

磁盘读写时间=寻道时间(找磁道)+盘面旋转时间(找扇区)+读/写时间,而旋转时间和读/写时间是常量,所以需要尽量缩短寻道时间。操作系统在分区时,按柱面的区域分区而不是盘面的区域分区,以缩短在同一个分区里连续读的寻道时间。

2、touch一个新的空文件占用磁盘空间吗? 占用的话占用多少?

一个新的空文件会占用磁盘空间,占的大小为一个inode的size.inode的详细介绍可查看: 理解inode

3、新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更大?

新建的空目录会占用磁盘空间,新目录会占用一个inode,同时分配一个block size(如4.0k)。
可如下方式查看空目录的大小。

1
2
justinhuang@ubuntu:\~/temp/temp$ du -h
4.0K .

新建的文件,如果是空文件,不占用block。

1
2
3
4
5
6
7
8
9
10
justinhuang@ubuntu:\~/temp/temp$ >1
justinhuang@ubuntu:\~/temp/temp$ >2
justinhuang@ubuntu:\~/temp/temp$ ll
总用量 8
drwxrwxr-x 2 justinhuang justinhuang 4096 825 16:14 ./
drwxrwxr-x 15 justinhuang justinhuang 4096 825 15:08 ../
-rw-rw-r-- 1 justinhuang justinhuang 0 825 16:14 1
-rw-rw-r-- 1 justinhuang justinhuang 0 825 16:14 2
justinhuang@ubuntu:\~/temp/temp$ du -h
4.0K .

4、你知道文件名是记录在磁盘的什么地方吗?

文件名的记录存在目录的block中,所以当空文件过多后(多于一个block大小),会使重新分配的目录的block。使目录占用空间变大。

5、文件名最长多长?受什么制约?

Lunux文件名最长限制为255byte

6、文件名太长了会影响系统性能吗?为什么会产生影响?

文件名太长会导致文件名读取时花费更多的磁盘IO。

7、一个目录下最多能建立多少个文件?

受目录下inode的数量限制,但是文件太多,OS需要读取的block也增多。导致性能问题。

8、新建一个内容大小1k的文件,实际会占用多大的磁盘空间?
一个block size(一般为4.0k)+一个inode size(一般为256byte)。

1
2
3
4
5
6
7
8
justinhuang@ubuntu:\~/temp/temp$ echo "" >1
justinhuang@ubuntu:\~/temp/temp$ ll
总用量 12
drwxrwxr-x 2 justinhuang justinhuang 4096 825 16:23 ./
drwxrwxr-x 15 justinhuang justinhuang 4096 825 15:08 ../
-rw-rw-r-- 1 justinhuang justinhuang 1 825 16:23 1
justinhuang@ubuntu:\~/temp/temp$ du -h
8.0K .

9、向操作系统发起读取文件2Byte的命令,操作系统实际会读取多少呢?

文件系统在向磁盘发起IO请求的时候,也是以block size为单位。所以会读取一个block size。这也是程序的局部性原理的应用

10、我们使用文件时要怎么样来能提高磁盘IO速度?

新建文件时,可以告诉OS你新建的文件大概需要的空间大小,以使OS尽量为文件分配连续的block,缩短寻道时间,提高读写性能。