五一这三天一直在学习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
向前辈致敬!