linux 文件系统

1.文件系统:操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
2.文件系统的类型
  2.1 查看系统支持的文件系统
    
[root@test6 ~]# ls /lib/modules/$(uname -r)/kernel/fs
autofs4     cramfs    ext3      fscache  hfsplus  lockd       nfsd      vfat
cachefiles  dlm       ext4      fuse     jbd      msdos       nls
cifs        ecryptfs  fat       gfs2     jbd2     nfs         squashfs
configfs    exportfs  freevxfs  hfs      jffs2    nfs_common  udf

  2.2 系统目前已加载到内存中支持的文件系统

[root@test6 ~]# more /proc/filesystems 
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cpuset
nodev   binfmt_misc
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   usbfs
nodev   pipefs
nodev   anon_inodefs
nodev   futexfs
nodev   tmpfs
nodev   inotifyfs
nodev   eventpollfs
nodev   devpts
        ext2
nodev   ramfs
nodev   hugetlbfs
        iso9660
nodev   mqueue
nodev   selinuxfs
        ext3
nodev   rpc_pipefs
nodev   autofs

3.文件系统的简单操作

    

    3.1.1df

    

   3.1.2 实例:

    -h  选项以KB以上的单位来显示,可读性高

[root@test6 ~]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/sda5             9.7G  1.1G  8.1G  12% /
/dev/sda1              99M   12M   83M  13% /boot
tmpfs                 252M     0  252M   0% /dev/shm
/dev/hdc              3.9G  3.9G     0 100% /mnt/cdrom
/dev/sda6              99M  5.6M   89M   6% /mnt/sda7

    -a 查看全部文件系统

[root@test6 ~]# df -a
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda5             10153988   1150388   8479484  12% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1               101086     11534     84333  13% /boot
tmpfs                   257652         0    257652   0% /dev/shm
none                         0         0         0   -  /proc/sys/fs/binfmt_misc
sunrpc                       0         0         0   -  /var/lib/nfs/rpc_pipefs
/dev/hdc               4087030   4087030         0 100% /mnt/cdrom
/dev/sda6               101086      5664     90203   6% /mnt/sda7

  3.2.1 du

    

  3.2.2 实例

    -s  查看指定目录所占空间

[root@test6 ~]# du -s /var/
31672   /var/

4.系统存储详解:

1.这里以 EXT2 文件系统为例
在Linux下,一个磁盘的最前面是MBR(MBR(main boot record) 主引导记录),大小为512Byte
在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode,最后是block。
对于每一个block而言,一般大小是4K,如果一个block已经存放了一个大小为1K的文件,那么剩余的空间是无法再被使用的。
2.MBR包括三部分内容:
分区表:指出有几个分区,每个分区的起始扇区号、大小和操作系统类型及其他特性
自举装入程序:PC机启动时由bios装入内存执行。如果装了多个操作系统,将根据选择去读出对
应分区的boot sector程序装入内存,执行该操作系统的自举程序。
校验信息:检验是否正确
3.boot sector (引导扇区)应当包含如下信息:
本分区操作系统类型
数据区大小
根目录区允许最大目录项(在根目录区最多创建多少个文件)
如果该分区安装了操作系统并被设置为活动分区,那还会包含一段“引导程序”;如果没有安装系
统,则该分区引导扇区为空或其中的数据是无效的。(windows默认活动分区为C)
4.MBR和boot sector的区别:
两者关系是自上而下的的关系。
1.启动顺序由先后。pc机启动时,先自行MBR,在根据选择自行某个分区下的boot sector(选择执行的boot sector所在分区就是活动分区。用户选择一个操作系统,实际上也就是选择一个分区作为活动分区)
2.boot sector可以为空(没装系统),但MBR必须包含内容。
3.MBR必须被读取并执行;引导扇区根据选择执行。
4.MBR实际上包含的内容也比boot sector广泛,MBR相当于包含了硬盘整体层面上的引导扇区(自检装入程序)、根目录区(分区表)。
5.superblock (超级块):里面的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中的每个block的大小、硬盘分区上一共有多少个blockgroup、以及每个block group中有多少个inode
一般一个文件的属性和占有的block号都是存放在inode中的,而block存放的是文件的实际内容。
每一个block和inode都是有编号的
在inode中记录一个文件消耗的空间是128Byte。
在superblock中记录的是inode和block的信息,比如有多少个block,已经用了多少个block,还有多少个block。
如果一个分区比较大,block会很多,这个时候可以将block分组,即block group
每一个block group中第一个部分存放的是superblock,作用是记录一共有多少个block,还剩多少个block。这个只是记录使用的情况,而具体被使用的编号需要在block对照表中查询了。
第二个部分存放的是系统文件的描述,包括每一个block group是从那一个block开始的,到那一个block结束的。
第三个部分是block对照表,作用是记录哪些block已经被使用了,哪些block没有被使用,第四个部分是inode的对照表,作用是记录哪些inode已经被使用了,哪些inode内有被使用,对照表也称作为位图。
第五个部分是indoe表:*文件的字节数
*文件拥有者的UserID*文件的GroupID
*文件的读、写、执行权限
*文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
*链接数,即有多少文件名指向这个inode*文件数据block的位置可以用stat命令,查看某个文件的inode信息:statexample.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。纵观整个inode的C语言描述,没有发现关于文件名的东西,也就是说文件名不由inode保存,实际上系统是不关心文件名的,对于系统中任何的操作,大部分情况下你都是通过文件名来做的,但系统最终都要通过找到文件对应的inode来操作文件,由inode结构中 *i_op指向的接口来操作。
文件系统如何存取文件的:
1)、根据文件名,通过Directory里的对应关系,找到文件对应的Inodenumber
2)、再根据Inodenumber读取到文件的Inodetable
3)、再根据Inodetable中的Pointer读取到相应的Blocks
这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inodenumber。
第六个部分是block
在inode中记录一个文件消耗的空间是128Byte。inode每指向一个block,就要消耗空间4Byte,由此可得一个inode指向的文件最大为128Byte/4Byte*4K=128K。实际上一般系统将一个inode划分成12个直接区,1个间接去,1个2间接区,1个3间接区。
对于直接区,每一个直接区直接指向一个block
对于间接区,该间接区指向一个block,然后这个被指向的block再指向别的block,实际上间接区通过这个方法可以间接的指向4K/4Byte=1024个block。
同理2间接区先指向一个block,然后这个被指向的block再指向别的block,第二次被指向的block最终再指向实际用来存储的block,这样间接区通过这个方法可以间接的指向1024*1024=1048576个block。
3间接区同理可以推算,但是要注意的是在实际文件系统中,大于2K的block会收到文件系统本身的限制。
 

原文地址:https://www.cnblogs.com/sangmu/p/6648473.html