网站建设的基础资料,wordpress 加盟主题,苏州住建,app平台搭建关于Linux文件系统的的简单理解和认识关于文件系统的运作#xff0c;这与操作系统带的档案数据有关。例如Linux操作系统的档案权限(rwx)与文件属性(拥有者#xff0c;群组#xff0c;时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块#xff0c;权限与属性…关于Linux文件系统的的简单理解和认识关于文件系统的运作这与操作系统带的档案数据有关。例如Linux操作系统的档案权限(rwx)与文件属性(拥有者群组时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块权限与属性放置到inode中至于实际数据则放置到date block区块中另外还有一个超级块区(super block)会记录整个文件系统的整体信息包含inode与block的总量使用量剩余量等。每个inode与block都有编号至于这三个数据的意义可以简单说明如下super block 记录此 filessystem的整体信息包括inode/block的总量使用量剩余量以及文件系统的格式与相关信息等(#这个文件系统对应的是一个分区应该可以这样理解)Inode 表记录档案的属性一个档案占用一个inode号同时记录此档案的数据所在的block号码Block 实际记录档案的内容若档案太大时会占用多个block。如果当一个分区分的容量分得比较大所有的inode block superblock统一管理不是很方便所以我们有在分区上存在分组的概念把一个分区我们分成多个区块群组不同的区块群组管理自身的inode block superblock号Inode table (inode表格)(格式化分区的时候inode的数量和大小128bytes就已经固定)数据内容该文件的权限(rwx)该文件的拥有者与群组该文件的容量该文件建立或状态改变的时间(ctime)最近一次的读取时间(atime)最近修改的时间(mtime)文件特定的标志(SUID SGID STICK)该文件真正内容的指向(指向block)Inode表的数据结构表前面为文件的元数据基本信息,后面就是数据指向如果文件太大有400M分区的block大小假如为4K由于inode表的容量有限128字节不可能有那边多的空间指针指向数据的block通常情况下一个inode表有12个直接数据指向再就是间接指向两间接指向三间接指向直接数据指向一个指向只能指向一个block所以12个直接指向只能代表48K的数据间接指向间接指向指向一个block该block上有1024的直接指向可以指向block故一个间接指向可以表示4M的数据两重间接指向相当与开始指向一个block有1024个间接指向指向block每个block又有1024个直接指向数据块所以可以表示4K*1024*10244G三重间接指向通过以上推理一个三重间接指向可以代表 4T的数据# 由于inode的表容量有限所以导致每个inode的表示的空间是有上限的也就导致不同文件系统的单个分区容量也有上限.superblock超级区块Superblock是记录整个filesysytem相关信息的地方,没有Superblock,就没有文件系统,它记录的信息主要有:Block和inode的总量;未使用与已使用的block/inode数量Block与inode的大小(block为1 2 4 K ,inode为128bytes)文件系统的挂载时间最近一次写入数据的时间最近一次检验磁盘的时间等文件系统的相关信息一个valid bit数值若此文件系统已被挂载则valib bit为0若未被挂载则valid bit为1注意dumpe2fs可以查看相关信息。superblock超级区块可能在不同的群组上存在其它的superblock超级区块为备份的超级区块。文件系统描述说明这个区段可以描述每个block group的开始与结束的block以及说明每非区段分别存储与哪一个block号码之间。Block bitmap(区块对照表)如果你想要新增文件时总会用到block但是需要使用哪一个block来记录呢怎么知道哪些block是空的呢从block bitmap中我们可以知道哪些block是空的当删除一些数据block bitmap表会记录block的标志位未使用下次有数据存储时就可以覆盖此处的block。dumpe2fs /dev/sda1 来看看超级块中的数据信息(好像只有ext系列的文件系统才可以使用本工具请不在要xfs文件系统上使用该命令)[rootlove681 ~]# dumpe2fs /dev/sda1dumpe2fs 1.41.12 (17-May-2010)Filesystem volume name: Last mounted on: /boot#分区挂载点Filesystem UUID: 0ae2a047-9dd6-4bb1-a284-818f971865eaFilesystem magic number: 0xEF53Filesystem revision #: 1 (dynamic)Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hashDefault mount options: user_xattr aclFilesystem state: cleanErrors behavior: ContinueFilesystem OS type: LinuxInode count: 51200#inode数量Block count: 204800# block数量Reserved block count: 10240Free blocks: 160134#空闲的block数量Free inodes: 51162#空闲的是inode数量First block: 1Block size: 1024#block单元大小为1KFragment size: 1024Reserved GDT blocks: 256Blocks per group: 8192#一个群组中block的数量Fragments per group: 8192Inodes per group: 2048#一个群组中inode的数量Inode blocks per group: 256Flex block group size: 16Filesystem created: Fri Jul 22 15:51:06 2016Last mount time: Mon Jul 25 11:28:22 2016Last write time: Mon Jul 25 11:28:22 2016Mount count: 6Maximum mount count: -1Last checked: Fri Jul 22 15:51:06 2016Check interval: 0 ()Lifetime writes: 43 MBReserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)First inode: 11Inode size:128#inode单位大小128个字节Journal inode: 8Default directory hash: half_md4Directory Hash Seed: 9e14b616-ea5a-4fa3-b9ea-5c1ef844f87dJournal backup: inode blocksJournal features: (none)Journal size: 4096kJournal length: 4096Journal sequence: 0x0000001bJournal start: 0Group 0: (Blocks 1-8192) [ITABLE_ZEROED]Checksum 0x5827, unused inodes 2010Primary superblock at 1, Group descriptors at 2-2#超级块的位置群组描述符的位置Reserved GDT blocks at 3-258 #Block bitmap at 259 (258), Inode bitmap at 275 (274)#区块对应表位置inode对应表的位置Inode table at 291-546 (290)#inode表的位置3785 free blocks, 2010 free inodes, 6 directories, 2010 unused inodesFree blocks: 4408-8192Free inodes: 39-2048Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0xa798, unused inodes 2048Backup superblock at 8193, Group descriptors at 8194-8194Reserved GDT blocks at 8195-8450Block bitmap at 260 (4294959363), Inode bitmap at 276 (4294959379)Inode table at 547-802 (4294959650)390 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: 15995-16384Free inodes: 2049-4096目录的存储方式在ext文件系统中当新建一个目录ext系统会分配一个inode与至少一块block给该目录其中inode记录该目录的相关权限与属性并记录分配到的那块block号码而block则是记录在这个目录下的文件名和该文件名占用inode的号码数据就如下Inode number文件名6547891.txt6547902.txt6548003.txt普通文件存储的方式在ext文件系统中新建一个普通文件时ext文件系统会分配一个inode与相对于该文件大小的block数量给该文件。例如该文件的大小为100Kbytes假如一个block大小为4kbytes这inode需要记录25个block与之对应为什么是25个由于inode有12个直接指向合计48kbytes设置于的使用一个间接指向block由该block存储剩余的文件。目录树的读取以上我们大概可以了解到inode表中并不记录文件名与数据的对应关系inode表记录文件的基本属性和block指向指向的block中记录文件名和inode的对应关系。由于目录树是又根目录开始的因此新系统透过挂载的信息可以找到挂载点的inode号码(通常一个filesysytem的最顶层是inode号码由2号开始的其实不知道是从2号开始的)因此只要读取到根的inode内容就可以读取到该inode对应的block的数据可以找到该目录下文件会目录对应inode的对相应关系。举例说明如果我们想要读取/etc/passed这个文件的内容系统是如何读取的呢[rootwCentos7 ~]# ll -di /etc/ /etc/passwd /128 dr-xr-xr-x. 18 root root 4096 Jul 21 11:34 /134313217 drwxr-xr-x. 129 root root 8192 Jul 30 12:53 /etc/136822215 -rw-r--r--. 1 root root 2525 Jul 30 10:44 /etc/passwd如上图在我的实验的电脑上 /的indoe号是128etc目录的inode号是13431327文件passed inode号是136822215我们来看看数据的读取过程1.通过挂载点获得 /的inode号为128(其实到底是通过说明方法获取到/的inode现在确实不了解)读取128 inode的数据内容读取到对于执行程序的用户root权限时 (r-x),就可以去读取inode对应的block的信息2./ 的block记录的是该目录下所有的文件名称与之inode的对应关系在block中找到etc/与之对应的inode号13431327则再去找13431327 inode号码3.Etc/的inode号找到并且读取数据内容 读取权限为(rwx)即可读取到block指向数据程序执行者再去读取block的数据内容读取到passwd对应的inode号码为136822215进而 去查找136822215 inode表4.passwd的inode号136822215读取inode表中的数据由于是管理员有足够的权限可以继续访问进而读取到block的指向我们读取block的数据内容即可读取出passwd的内容。以上只是一个大概的过程虽然不是很精确但还是有助于我们理解ext的文件系统又上述的理论只是我们可以做做一下总结1.ext文件系统为什么当个分区有分区大小限制是由于本身的inode表大小有限存储的block指向是有数量上限的2.ext文件系统中删除数据其实只是在inode表中清除block指向指针在相应的block bitmap中标记该block为未使用状态等到下次有数据需要存储的时候把数据填充至编辑为未使用的block地方3.一个Ext文件系统中inode号是唯一的4.Ext文件系统查找实际查找数据是以inode号为准inode表中不记录文件名但是会记录block的指向block中记录实际的数据。