Linux 磁盘“Block Size”研究

时间:2021-09-25 05:14:52

自从开始Linux 软件平台开发,经常遇到“Block Size”。但经常发现此block size非彼block size。意义不一样,大小值也不一样。Open Source的东东有时候也挺烦的。下面是自己的总结。通常Linux的“block size”指的是1024 bytesLinux用1024-byte blocks 作为buffer cache的基本单位。但linux的文件系统的block确不一样。例如ext3/ext4系统,block size是4096。使用tune2fs可以查看带文件系统的磁盘分区的相关信息,包括block size。

例如:

tune2fs -l /dev/hda1 |grep "Block size"

Block size:               4096

另一个工具dumpe2fs也可以。

 

其实本来这几个概念不是很难,主要是NND他们的名字都一样,都叫“Block Size”。

1.     硬件上的 block size, 应该是"sector size",linux的扇区大小是512byte

2.       有文件系统的分区的block size, 是"block size",大小不一,可以用工具查看

3.       没有文件系统的分区的block size,也叫“block size”,大小指的是1024 byte

4.       Kernel buffer cache 的block size, 就是"block size",大部分PC是1024,linux中我的系统ubuntu11.04为4096;

5.       磁盘分区的"cylinder size",用fdisk 可以查看。

 

我们来看看fdisk显示的不同的信息,理解一下这几个概念:

 

Disk /dev/hda: 250.0 GB, 250059350016 bytes

255 heads, 63 sectors/track, 30401 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

 

   Device Boot    Start       End    Blocks   Id  System

/dev/hda1   *         1      1305  10482381   83  Linux

/dev/hda2          1306      1566   2096482+  82  Linux swap

/dev/hda3          1567     30401 231617137+  83  Linux

 

8225280就是cylinder size。一共有30401cylinderStartEnd分别标记的是各个分区的起始cylinder。第4列显示的就是以1024为单位的block(这一列最容易把人搞晕)。为什么“2096482+”有个“+”号呢?因为啊,总size1024除不尽,是个约数,表示2096482强!哈哈。搞笑吧,只有opensource的人想得出来这么表示。