关于Block Size的一点总结

6360阅读 0评论2015-05-04 hitwh_Gypsy
分类:服务器与存储

五一这三天一直在学习Linux文件系统的东西。
参考了一些很优秀的人的文章,收获很多啊。

总体结构如下:


详细点的:


具体的含义就不解释了。
对于 block size 我想写几句:
想要使用一块500M的磁盘 :                      分区、格式化、新建挂载目录、挂载
方便起见,采用环回文件系统的方式:
-----------------------------------------------------------------------------------------------------------------
[root@Gypsy_110 ~]# dd if=/dev/zero of=gypsy bs=1K count=512000
记录了512000+0 的读入
记录了512000+0 的写出
524288000字节(524 MB)已复制,5.75035 秒,91.2 MB/秒
[root@Gypsy_110 ~]# mke2fs gypsy
mke2fs 1.41.12 (17-May-2010)
gypsy is not a block special device.
无论如何也要继续? (y,n) y
文件系统标签=
操作系统:Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
128016 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67633152
63 block groups
8192 blocks per group, 8192 fragments per group
2032 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409


正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成


This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Gypsy_110 ~]# ls /mnt/
[root@Gypsy_110 ~]# mkdir /mnt/gypsy
[root@Gypsy_110 ~]# mount -o loop gypsy /mnt/gypsy/
[root@Gypsy_110 ~]# df -HT
Filesystem          Type   Size  Used Avail Use% Mounted on
/dev/sda2           ext4   5.2G  887M  4.1G  19% /
tmpfs               tmpfs  519M     0  519M   0% /dev/shm
/dev/sda1           ext4   102M   30M   67M  31% /boot
/dev/mapper/vg1-lv1 ext4   3.1G   72M  2.9G   3% /home
/dev/sda5           ext4   2.5G   71M  2.3G   4% /tmp
/dev/mapper/vg1-lv2 ext4   5.2G  896M  4.0G  19% /usr
/dev/sda7           ext4   3.1G  407M  2.6G  14% /var
/root/gypsy         ext2   508M  2.4M  480M   1% /mnt/gypsy
[root@Gypsy_110 ~]# ls -la /mnt/gypsy/
总用量 17
drwxr-xr-x  3 root root  1024 5月   4 19:51 .
drwxr-xr-x. 3 root root  4096 5月   4 19:52 ..
drwx------  2 root root 12288 5月   4 19:51 lost+found
[root@Gypsy_110 ~]#
-----------------------------------------------------------------------------------------------------------------
过程大家都懂,我想说的就是  block size
首先 磁盘容量大小是确定的:500M
格式化的时候,没有指定块大小,默认是1204B ,也就是1K(ext2)
那么block count 就确定了: 512000 块 (Block 编号从0开始)
由于block size决定了 Blocks per group 的最大容量,因为块组中 block bitmap 大小是1个block。用 block bitmap 每一个bit 来确定该块组的某一块是否空闲。
所以有:
      1024----最多有8K个块----------块组大小为8M字节   (1024字节/block*8K块)
      2048----最多有16K个块---------块组大小为32M字节
      4096----最多有32K个快----------块组大小为128M字节

所以: Blocks per group:         8192  (1024*8)
这样 Group 数量就确定了:block count / block per group   ==  512000/8192 ==  62.5
所以就需要 63个Group (Group0 Group1 、、、Group62)

同时 block size 还决定了ext2 中单个文件最大长度:
(不过 ext2 里貌似只支持到三级,但是思想是相通的。)


Inode中有个长度为15的数组指向文件的数据存储的块。
前12个为直接指针,指向了数据所在的block块。
第13个数组元素是1级间接指针,
第14个数组元素为二级间接指针,
第15个元素为三级间接指针,
通过间接指针,ext2支持的文件最大长度获得了极大的扩展。

各种数据块对应的文件寻址范围
块大小     直接寻址    间接寻址     二次间接寻址  三次间接寻址
1024B     12KB          256KB          64MB             16GB
2048B     24KB          1MB             512MB           256GB
4096B     48KB          4MB             4GB               4TB

[root@Gypsy ~]# echo "(12+256+256*256+256*256*256)/1024/1024" |bc
16     --> 单位是G
[root@Gypsy ~]# echo "(12*2+512*2+512*512*2+512*512*512*2)/1024/1024" |bc
256    --> 单位是G
[root@Gypsy ~]# echo "(12*4+1024*4+1024*1024*4+1024*1024*1024*4)/1024/1024" |bc
4100   --> 单位是G
[root@Gypsy ~]# echo "(12*4+1024*4+1024*1024*4+1024*1024*1024*4)/1024/1024/1024" |bc
4      --> 单位是T


参考了一些优秀的文章:
http://blog.chinaunix.net/uid-24774106-id-3266816.html
http://blog.chinaunix.net/uid-30225353-id-4998537.html

向前辈致敬!
 



上一篇:硬链接为什么不能链接目录?
下一篇:记一次磁盘挂载实验导致系统不能启动