zoukankan      html  css  js  c++  java
  • 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会收到文件系统本身的限制。
     

  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/sangmu/p/6648473.html
Copyright © 2011-2022 走看看