面试题1

  1. 基础知识

    系统中最小的单位是Bit(位元、位)

    1 Byte(字节)= 8 Bits

    1 Kilobyte(KB)= 1024 Bytes

    Ext2中inode和block(实际记录文件内容的区域,1kb、2kb、4kb):inode大小是:128 Bytes,inode记录一个block需要花费4 Bytes。    为了记录更多的block,操作系统将inode记录block的区域划分为12个直接,1个间接,1个双间接,一个三间接记录区。(eg:将block设为     1kb,能容纳最大的文件是:12*1+256(1 Kb/4Bytes)*1+256*256*1+256*256*256*1(Kb)=16843020 Kb=16448 Mb=16       Gb)。

  2. 问题

    1.block大小为4 Kb的Ext3文件系统最大分区和最大文件分别是多少?

      答:http://zhumeng8337797.blog.163.com/blog/static/100768914201112805015563/

其中point本来也是数据块,现在拿来做数据块的索引用,其中ext3的头文件定义为: __u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */,所以可以计算ext3文件系统的极限:
最大分区:
         因为定义的是无符号32位数,所以可能定位的block范围为2^32,也就是4G,如果一个block大小为4KB,所以为4G * 4KB = 16TB
最大文件:
         前面直接指向12个数据块,一级间接块最大为block size / 4,block size就是数据块的大小,因为一个索引是4个字节,所以除以4,这样计算下来,最大的文件可以使用的总块数为:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小为4K,则为(12 + 2^10 + 2^20 + 2^30) * 2^12 约等于4T。

         为了突破ext3这个大小限制,ext4使用了48位的数据块索引空间,同时使用了如下结构代替inode索引的方式:
struct ext3_extent {
__u32 ee_block; /* first logical block extent covers */
__u16 ee_len;   /* number of blocks covered by extent */
__u16 ee_start_hi; /* high 16 bits of physical block */
__u32 ee_start; /* low 32 bigs of physical block */
};
这样查找数据块的时候就不是每个块建立一个索引,而且使用连续的数据块,也就是分别指示起始位置,以及连续的块数,这样在大文件的时候,磁盘io效率以及查找数据块效率上都有很大的提高,所以ext4的文件系统也比ext3出色。因为使用了48位的索引空间,所以在4KB块大小的情况下,文件系统的极限是2^48 * 4KB = 1EB,不过,目前由于工具的限制,只能使用16TB的分区。

 

posted @ 2014-04-08 16:40  哈士奇.银桑  阅读(167)  评论(0编辑  收藏  举报