zoukankan      html  css  js  c++  java
  • Linux 的Ext2

    Linux的正规文件系统:Linux second extended file system  Ext2fs

    新技术:LVM  

        Software raid

    文件系统是如何运行的?

    操作系统的文件数据除了文件实际内容外,还包括文件权限(rwx),文件属性(所有者,属组,时间参数等)

    文件系统通常会将这俩部分的数据分别存放在不同的块:

    权限与属性放置到inode中

    实际数据则放置在data block块中

    另外还包括一个superblock会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。

    索引式文件系统

    权限与属性是为了保护每个用户所拥有数据的隐秘性

    除非进行磁盘格式化(或者利用resize2fs等命令更改文件系统大小),否则inode与block固定后就不再变动。

    然而当数据量很大的时候,会有很多的inode与block,将所有的inode与block放置在一起是不明智的,数量太大,不易管理。

    所以Ext2在磁盘格式化时区分为多个块组(block group),每个块拥有独立的/inode/data block/superblock系统。

    因此,一块硬盘的最大容量,与这块硬盘可存放的最大单一文件容量是不一样的概念。

    Ext2 已足够支持大于2GB以上的单一文件容量。

    每个block块内最多只能够放置一个文件的数据,

    如果一个文件大于一个block的大小,则一个文件会占用多个block数量,

    如果一个文件小于一个block的大小,则该block的剩余空间不能够再被使用了,(造成磁盘空间的浪费)

    若block过大(如4k),而系统中存在大量小文件,则会造成巨大的磁盘资源浪费

    若block过小,则系统中的大型文件会占用更多的block,而block信息是记录在inode中的,inode需要记录更多的block,此时可能会造成文件系统不良的I/O读写性能。

    因此在格式化文件系统时,block设定的大小,最好根据该文件系统的用途,而设定。

    inodetable(inode表格)

    inode内容主要记录文件的属性以及该文件实际数据是放置在哪几号block内!

    基本上,inode记录的文件数据至少有下面这些:

    该文件的访问方式(rwx)

    该文件的所有者与属组(owner/group)

    该文件的大小

    该文件创建或状态改变的时间(ctime)

    最近一次读取的时间(atime)

    最近修改的时间(mtime)

    定义文件特性的标志(flag),如SetUID等

    该文件真正内容的指向(pointer)

    inode的数量与大小

    每个inode大小均固定为128bytes

    每个文件都仅会占用一个inode

    因此文件系统能够创建的文件数量与inode的数量有关

    inode记录大量block信息的策略:

    系统将inode记录block号码的区域定义为12个直接、一个间接、一个双间接与一个三简介记录区

    Superblock

    Superblock是记录整个文件系统相关信息的地方,没有Superblock,就没有这个文件系统了

    它记录的主要信息有:

    block与inode的总量

    未使用与已使用的inode/block数量

    block与inode的大小(block为1K,2K,4K,inode为128bytes)

    文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息。

    一个validbit数值,若此文件系统已被挂载,则valid bit 为0,若未被挂载,则valid bit 为1.

    一个文件系统应该仅有一个Superblock,而事实上除了第一个block group 内会含有superblock外,

    其他block group也可能含有superblock,且这些superblock主要是作为对第一个block group内superblock的备份

  • 相关阅读:
    幸福之路
    mysql8.0.25安装配置教程(windows 64位)
    解决git@gitee.com: Permission denied (publickey).
    python路径拼接os.path.join()函数的用法
    如何正确的看待Python里的GIL锁
    安装激活Golang
    Django的Orm操作数据库
    爬虫技术栈点
    Django
    Python/数据库/Django笔记
  • 原文地址:https://www.cnblogs.com/xxdfly/p/5585274.html
Copyright © 2011-2022 走看看