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会收到文件系统本身的限制。
     

  • 相关阅读:
    第一次作业
    C语言I博客作业04
    C语言I博客作业05
    c语言l博客作业02
    C语言I博客作业06
    linux下递归删除目录下所有exe文件
    CSS高级
    CSS样式
    CSS框模型
    Oracle的用户、角色和权限
  • 原文地址:https://www.cnblogs.com/sangmu/p/6648473.html
Copyright © 2011-2022 走看看