最近在看vmstat的时候,看到其中一项的单位是blocksize。在这里记录一下。
首先要搞明白啥叫block。在linux中,比如说读写磁盘,都不会一个字节一个字节的读,毕竟效率太低,而是一次读一坨,这一坨的概念就叫做block。
那么Linux中,blocksize到底是多大呢?
其实blocksize要分好多种,取决于不同的场景
磁盘的blocksize
这个是由磁盘本身决定的,也就是不同磁盘可能不一样。一般是512,可以通过dd测试一下:
# dd if=/dev/sda1 of=/dev/null count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 1.8977e-05 s, 27.0 MB/s
文件系统的blocksize
没错,linux在管理文件的时候,比如创建一个文件,文件也是以block为单位管理的,这个是文件的block。
查看文件系统的blocksize:
$ stat -f .
File: "."
ID: 84bc409db75bdd32 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 2531650 Free: 1704179 Available: 1570650
Inodes: Total: 647168 Free: 567361
当你创建一个文件,哪怕很小,也最少是一个文件系统的block:
//创建前的block数量(Used字段)
$ df .
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10126600 3309884 6282600 35% /
//创建一个小文件
$ echo hello>world
//ls查看文件,发现很小,ls显示真实的文件内容大小,而不是磁盘空间
$ ls -l world
-rw-r--r-- 1 thorsten_staerk_de thorsten_staerk_de 6 Apr 1 06:17 world
//df查看,发现少了4个block
$ df .
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10126600 3309888 6282596 35% /
//du查看,发现跟ls的不一样,实际上占用了4k的磁盘空间
$ du -sch world
4.0K world
4.0K total
内核的blocksize
linux内核也有自己的block,比如在某些缓冲区操作时,以block为单位。比如man vmstat时,会发现这么一句,说明目前的内核,blocksize都是1k
All linux blocks are currently 1024 bytes
也就是说,vmstat中所谓的block大小,就是1k
Ref
- http://www.linuxintro.org/wiki/Blocks,_block_devices_and_block_sizes
发表回复