文件系统概述和ext2文件系统(代码片段)

shizhuoping shizhuoping     2023-04-11     472

关键词:

文件系统概述和EXT2文件系统

文件系统概述

常用的文件系统有windows98前的FAT、windows2000后的NTFS、linux的Ext2/3/4、SGI的XFS文件系统等

对于传统的文件系统而言,一个分区槽只能格式化为一个文件系统,但是目前由于LVM与软件磁盘阵列技术的出现,使一个分区可以对应多个文件系统,故以下关于文件系统的讨论都不表示针对一个分区了,只是介绍文件系统的特性。

linux操作系统会将文件权限、文件属性存在inode中,一个文件对应一个inode,而文件的实际数据会被放入data block中,要读一个文件首先找到该文件的inode,就能迅速找到block,inode中记录了文件数据的实际放置block,这种读取方式就是索引式文件系统:

技术图片

而光盘采用的FAT文件系统没有inode的存在,此时一个文件的存储依赖block之间的联系,读完一个block后才能找到下一个block,如果block很分散读取速度很慢:

技术图片

所谓的碎片整理就是因为文件写入的block太分散,导致系统效率不高采取的措施。如果文件太过离散就会降低读取性能,这也是每个分区不宜设置过大的原因。

EXT2文件系统

ext2系统在格式化的时候分为多个区块群组(block group),然后每个区块群组都有独立的inode和block系统,这是为了处理大量inode和block而做出的应对措施。文件系统示意图如下:

技术图片

每个文件系统都有一个启动扇区(boot sector),一个block group对应一套独立系统。

data block

这个区域是文件真正数据存放的位置,ext2所支持的block大小有1K/2K/4K,block本身也记录block编号,所以block越大可记录的编号越多,文件系统最大文件个数也就越多,同时一个文件可占用的block也越多,文件系统能容纳的最大文件限制也越大,因block大小产生的文件系统限制:

技术图片

一个文件只能占用整数个block,若文件小于block,剩余容量也不能被使用了,因此如果linux平时处理的都是小于1K的文件的话,尽量设置block为1K,这样能最大程度利用磁盘空间,如果平时处理的文件较大,就适当提高block大小,以免block号码存储过多反而导致系统浪费。

ll命令查看文件信息时可以发现文件大小总是1024的整数倍,这就是因为一个文件只能占用整数个block的缘故。

inode table

每个文件都有一个inode,这里记录的是文件的权限、所有者和所属组、容量、ctime、atime、mtime和block编号。此外每个inode大小是固定为128bytes的(ext4中可以设置为256bytes),因为大小固定,所以一个inode记录的block就是有限的,linux巧妙的用多级索引的方式让一个inode存尽可能多的block:

技术图片

由上图所示,一个inode会有一部分直接指向block的区域,还存在间接、双间接和三间接,也就是inode指向的block不是存储文件数据的,而是存储其他block编号的,就这样极大的扩展了一个inode可指向的block数。

对ext2来说,一个inode最多可有12个直接指向block的区域,1个间接,1个双间接和1个三间接:

直接指向的数据块一共12K,1个间接可以指向的数据块共256*1K(每个block号码大小为4bytes,相当于一个1K的block最多能存256个block号码),双间接指向的数据共256*256*1K,三间接为256*256*256*1K,加起来一共16GB,也就是block大小为1K时文件系统能容纳的最大文件大小。

如果一个文件100K,block大小为4K,那么会分配100/4+1=26个block,因为inode只能有12个直接指向,需要多分配一个block来记录剩余的block号。

superblock

它是存储文件系统相关信息的位置,它记录了block和inode的总量,使用情况,大小,挂载时间等。一个文件系统只有一个superblock,它一般都在第一个blockgroup中,其他的blockgroup中即使有superblock也仅仅是备份而已。

filesystem description文件系统说明

它记录了该blockgroup的起始和结束的block号码,以及记录每个区段的superblock、datablock等具体在那些block之间。

block bitmap区块对照表和inode bitmap(inode对照表)

block bitmap记录了哪些block是空的,inode bitmap记录了哪些inode是未使用的。当新增文件时要修改这两个区域,此外还需要修改superblock,所以这些经常变动的数据被称为metadata中介数据

dumpe2fs

这个命令可以查询文件系统相关信息,使用前先用blkid命令查看所有被格式化的装置,如/dev/vda1等,然后用dumpe2fs命令后加装置名即可查看该文件系统信息,主要包括superblock信息、每个block group的信息等。但是对于CentOS7来说,预置的文件系统是xfs,需要自己切换成ex4后才能查看。

目录树

目录是一种特殊的文件,目录会分配到一个inode和至少一块block,inode记录目录权限和属性,以及目录的block号,而block记录在这个目录下文件的名称和被该文件占用的inode号。

由上可知,目录的inode并不记录目录下的文件名,而是block在记录目录下的文件名,只有进入block中才能对目录下文件进行更名/新增/删除,所以目录的w权限可以对其中文件更名/新增/删除。

读取一个文件/etc/passwd的流程:

通过挂载点信息找到inode号码为128的根目录inode(对XFS文件系统来说,最顶层的挂载点一般inode号为128),进入其中读取根目录的block。然后找到etc/的inode,进而找到etc/的block,然后在该block中找到/etc/passwd的inode,通过inode找到他的block读取数据。这个过程中每次找到inode有相应的r和x权限才能进入目录进行下一步操作。

文件系统(代码片段)

...作系统”的最重要的部件是什么,那就莫过于进程管理和文件系统了。文件系统调用-->VFS-->具体文件系统VFS文件系统与具体文件系统的连接通过:file_operations、inode_operations、dentry_operations、super_operations数据结构连接的。设备... 查看详情

u-boot命令篇|ext格式文件系统操作命令(代码片段)

  uboot有ext2和ext4这两种格式的文件系统的操作命令,常用的就四个命令,分别是:ext2load、ext2ls、ext4load、ext4ls和ext4write。这些命令的含义和使用与fatload、fatls和fatwrite一样,只是ext2和ext4都是针对ext文件系统的... 查看详情

linux基础知识|文件系统(代码片段)

Linux基础知识|文件系统前言Linux的传统的文件系统为Ext2(Linuxsecondextendedfilesystem,ext2fs),在传统的磁盘和文件系统中,一个分区就只能被格式化为一个文件系统,所以可以说成一个filesystem就是一个分区,但是由于新... 查看详情

[posix]文件系统(概述)(代码片段)

1.文件名由除系统目录分隔符(unix是/,windows是)和空字符“ 查看详情

11磁盘存储和系统分区管理文件管理系统(代码片段)

文件系统操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等支持的文件系统:ls/lib/modul... 查看详情

四linux磁盘与文件系统管理(代码片段)

一、Linux文件系统每种操作系统能够使用的文件系统并不相同,Linux的正统文件系统为Ext2(Linuxsecondextendedfilesystem,ext2fs)。现在通常可以称呼一个可被挂载的数据为一个文件系统。文件系统的运行机制与操作系统的文... 查看详情

linuxbtrfs文件系统(代码片段)

1、Btrfs文件系统简介文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用ext2/3,ext文件系统以其卓越的稳定性成为了事实上的Linux标准文件系统。近年来ext2/3暴露出了一些扩展性问题,于是便催生了ext4... 查看详情

第8章文件系统管理_文件系统和常用命令

1.文件系统(1)ext2文件系统  ext2是ext文件系统的升级版本,RedHatLinux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件(1TB=1024GB=1024*1024KB)(2)ext3文件系统  ext3文件系统是ext2文件系... 查看详情

linux支持啥格式的硬盘?

linux支持什么格式的硬盘?它又使用什么文件系统格式?linux从硬件角度上基本支持所有的硬盘,软件上也支持大量的文件系统。1)ext2文件系统;  ext2文件系统应该说是Linux正宗的文件系统,早期的Linux都是用ext2,但随着技术... 查看详情

nfs文件系统及搭建nfs共享服务(代码片段)

一、什么是文件系统?  文件系统是对一个存储设备上的数据和元数据进行组织的一种机制。文件系统是在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区上组织文件方式方法,常见文件系统如ext2、ext3、ext4、NTFS... 查看详情

:java之文件系统操作(java.io.file)和文件内容的读写(代码片段)

注意:如果对文件概念不是特别理解而,可查看(王道408考研操作系统)第四章文件管理-第一节1:文件管理初识文章目录一:对文件系统操作(Java.io.File)(1)概述(2)示例二:文件内容的读和写(数据流)(1)FileInputStream概... 查看详情

linux系统能够直接读取的分区类型是啥

以下是Linux支持的文件系统汇总1.minix:是Minix操作系统使用的文件系统,是Linux最先使用的文件系统。它有许多缺点:分区只能小于64MB,只支持短文件名,单一的时间戳,等等。在软盘和动态磁盘领域仍然有用。2.ext是对Minix的扩展。已... 查看详情

linux运维从入门到进阶(代码片段)

 Linux磁盘管理知识点磁盘和文件系统简介文件系统工具磁盘分区管理交换分区逻辑卷和阵列  磁盘和文件系统介绍正如上文中提到的,Linux中一切都是文件。这个重要的概念贯穿整个Linux的始末,磁盘也是如此。各种接... 查看详情

linux基础io(代码片段)

目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情

linux基础io(代码片段)

目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情

linux系统中系统文件有啥特点

Linux系统中系统文件有什么特点?第1个特点:内核相关文件在/boot目录下第2个特点:设备相关文件在/dev目录下都3个特点,系统和服务配置在/etc/下第4个特点,库文件在/lib下其它也没啥了。参考技术A般linux常用的文件系统有ext2、e... 查看详情

sysfs文件系统(代码片段)

...性目录blockbusclassdevdevicefirmwarefskernelmodulepower由来  sysfs文件系统是Linux众多文件系统中的一个。在Linux系统中,每一个文件系统都有其特殊的用途,如ext2用于快速读写存储文件,ext3用来记录日志文件。  Linux设备... 查看详情

sysfs文件系统(代码片段)

...性目录blockbusclassdevdevicefirmwarefskernelmodulepower由来  sysfs文件系统是Linux众多文件系统中的一个。在Linux系统中,每一个文件系统都有其特殊的用途,如ext2用于快速读写存储文件,ext3用来记录日志文件。  Linux设备... 查看详情