自从开始Linux 软件平台开发,经常遇到“Block Size”。但经常发现此block size非彼block size。意义不一样,大小值也不一样。Open Source的东东有时候也挺烦的。下面是自己的总结。通常Linux的“block size”指的是1024 bytes,Linux用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。一共有30401个cylinder。Start和End分别标记的是各个分区的起始cylinder。第4列显示的就是以1024为单位的block(这一列最容易把人搞晕)。为什么“2096482+”有个“+”号呢?因为啊,总size除1024除不尽,是个约数,表示2096482强!哈哈。搞笑吧,只有opensource的人想得出来这么表示。