linux ext,linux软件安装包

本篇文章给大家谈谈linux ext,以及linux软件安装包对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

Linux里面什么是ext2fs

EXT2FS第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd,Mac OS X(第3方),Darwin(第3方),BSD。ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat Linux等。

简介

其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86电脑系统中,簇最大为 4KB,则单一文件大小上限为 2048GB,而文件系统的容量上限为 16384GB。

但由于目前核心 2.4所能使用的单一分割区最大只有 2048GB,实际上能使用的文件系统容量最多也只有 2048GB。

至于Ext3文件系统,它属于一种日志文件系统,是对ext2系统的扩展。它兼容ext2,并且从ext2转换成ext3并不复杂。

Ext2文件系统具有以下一般特点:

1、当创建Ext2文件系统时,系统管理员可以根据预期的文件平均长度来选择最佳的块大小(从1024B——4096B)。例如,当文件的平均长度小于几千字节时,块的大小为1024B是最佳的,因为这会产生较少的内部碎片——也就是文件长度与存放块的磁盘分区有较少的不匹配。另一方面,大的块对于大于几千字节的文件通常比较合合适,因为这样的磁盘传送较少,因而减轻了系统的开销[1]。

2、当创建Ext2文件系统时,系统管理员可以根据在给定大小的分区上预计存放的文件数来选择给该分区分配多少个索引节点。这可以有效地利用磁盘的空间。

3、文件系统把磁盘块分为组。每组包含存放在相邻磁道上的数据块和索引节点。正是这种结构,使得可以用较少的磁盘平均寻道时间对存放在一个单独块组中的文件并行访问。

4、在磁盘数据块被实际使用之前,文件系统就把这些块预分配给普通文件。因此当文件的大小增加时,因为物理上相邻的几个块已被保留,这就减少了文件的碎片。

5、支持快速符号链接。如果符号链接表示一个短路径名(小于或等于60个字符),就把它存放在索引节点中而不用通过由一个数据块进行转换。

Ext2还包含了一些使它既健壮又灵活的特点:

1、文件更新策略的谨慎实现将系统崩溃的影响减到最少。我们只举一个例子来体现这个优点:例如,当给文件创建一个硬链接时,首先增加磁盘索引节点中的硬链接计数器,然后把这个新的名字加到合适的目录中。在这种方式下,如果在更新索引节点后而改变这个目录之前出现一个硬件故障,这样即使索引节点的计数器产生错误,但目录是一致的。因此,尽管删除文件时无法自动收回文件的数据块,但并不导致灾难性的后果。如果这种处理的顺序相反(更新索引节点前改变目录),同样的硬件故障将会导致危险的不一致,删除原始的硬链接就会从磁盘删除它的数据块,但新的目录项将指向一个不存在的索引节点。如果那个索引节点号以后又被另外的文件所使用,那么向这个旧目录的写操作将毁坏这个新的文件。

2、在启动时支持对文件系统的状态进行自动的一致性检查。这种检查是由外部程序e2fsck完成的,这个外部程序不仅可以在系统崩溃之后被激活,也可以在一个预定义的文件系统安装数(每次安装操作之后对计数器加1)之后被激活,或者在自从最近检查以来所花的预定义时间之后被激活。

3、支持不可变(immutable)的文件(不能修改、删除和更名)和仅追加(append-only)的文件(只能把数据追加在文件尾)。

4、既与Unix System V Release 4(SVR4)相兼容,也与新文件的用户组ID的BSD语义相兼容。在SVR4中,新文件采用创建它的进程的用户组ID;而在BSD中,新文件继承包含它的目录的用户组ID。Ext2包含一个安装选项,由你指定采用哪种语义。

即使Ext2文件系统是如此成熟、稳定的程序,也还要考虑引入另外几个负面特性。目前,一些负面特性已新的文件系统或外部补丁避免了。另外一些还仅仅处于计划阶段,但在一些情况下,已经在Ext2的索引节点中为这些特性引入新的字段。最重要的一些特点如下:

块片(block fragmentation)

系统管理员对磁盘的访问通常选择较大的块,因为计算机应用程序常常处理大文件。因此,在大块上存放小文件就会浪费很多磁盘空间。这个问题可以通过把几个文件存放在同一块的不同片上来解决。

透明地处理压缩和加密文件

这些新的选项(创建一个文件时必须指定)将允许用户透明地在磁盘上存放压缩和(或)加密的文件版本。

逻辑删除

一个undelete选项将允许用户在必要时很容易恢复以前已删除的文件内容。

日志

日志避免文件系统在被突然卸载(例如,作为系统崩溃的后果)时对其自动进行的耗时检查。

实际上,这些特点没有一个正式地包含在Ext2文件系统中。有人可能说Ext2是这种成功的牺牲品;直到几年前,它仍然是大多数Linux发布公司采用的首选文件系统,每天有成千上万的用户在使用它,这些用户会对用其他文件系统来代替Ext2的任何企图产生质疑。

Ext2中缺少的最突出的功能就是日志,日志是高可用服务器必需的功能。为了平顺过渡,日志没有引入到Ext2文件系统;但是,我们在后面“Ext3文件系统”中会讨论,完全与Ext2兼容的一种新文件系统已经创建,这种文件系统提供了日志。不真正需要日志的用户可以继续使用良好而老式的Ext2文件系统,而其他用户可能采用这种新的文件系统。现在发行的大部分系统采用Ext3作为标准的文件系统。

Linux支持多种不同类型的文件系统:网络文件系统NFS,磁盘文件系统Extfs,特殊文件系统proc、tmpfs等。

Ext2fs文件系统基本概念

Inode

Ext2fs中,每个文件都用如下图所示的inode结构来描述,用户空间操作的对象是文件路径和名称,系统kernel把路径名称解析成inode,通过inode号来访问它代表的文件。

Mode:包含两个数据,文件类型(普通文件/目录/字符设备/块设备/符号链接/管道)和用户访问权限信息(0660)。

Ownerinfo:文件属组信息。

Size:文件长度,单位是byte。

Timestamps:文件访问和修改的时间戳。

Linkscount:这个项在上图中没有体现,它记录了这个inode存在多少个链接,创建新文件时,其inode的linkscount应该为1,文件被删除后,这个inode的linkscount就变为0。

DataBlocks:指向真实的文件数据块,因为大文件可能会分配很多的block,直接在inode中保存所有的数据块指针将会比较困难,也会浪费掉很多空间,毕竟系统中大文件的数量是占少数的,所以设计了间接块指针(Indirectblocks)和二级块指针(Doubleblocks)来指向真实数据块。

实际上还应该包含了inode号。

目录

在Ext2fs中,目录被看做一种特殊文件,也用一个inode来描述,目录的datablock中保存了目录下的所有内容,每条内容叫做一个entry,结构如下:

每条entry都保存了inode号、entry的长度、文件名长度、文件类型,并且都是4字节对齐。

特别地,每个目录下有两个特殊的子目录,'.'和'..',分别代表当前目录和上一级目录,这两个目录文件其实是硬链接。其中'..'有一个重要的作用:FSchecker(可以把文件系统umount后手动执行e2fsck看看)在检查文件系统的时候,就会使用’..‘来检查目录是否可以追溯到挂载根目录,如果检查失败,目录便会被链接到挂载根目录下面的lost+found。

链接

为了方便系统内文件共享,Linux支持了两种基本的链接文件:硬链接和软链接(也叫符号链接)。

硬链接并不是一个独立的文件,不占用inode,只是在目录下创建了一条entry,其中inode号保存的是目标文件的inode号,访问硬链接时,文件系统通过inode将访问操作重定向到目标文件,实现了文件共享,所以硬链接就是多个文件名直接指向同一个inode,用stat命令也能看到其inode号就是目标文件的inode号,它的特点:

不能跨文件系统。

目标文件必须先存在(inode存在且linkcount不为0)。

只能对普通文件创建硬链接,目录不行。

删除一个硬链接文件并不影响其他有相同inode号的文件。

软链接是一个独立的文件,拥有自己的inode,其数据块存放的是目标文件的名称,访问软链接时,kernel先访问软链接的内容,拿到目标文件名,并重新启动路径解析,获取到目标文件inode号再向文件系统发起访问。软链接的特点:

可以跨文件系统。

文件和目录都可以。

可对不存在的文件或目标创建软链接。

软链接有自己文件属性和权限。

创建软链接时,链接计数i_nlink不会增加;

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即danglinglink,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

软链接的目标文件也可以是软链接,其解析过程是递归的。

注意:软链接创建时目标文件的路径指向使用绝对路径比较好,使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接,因为链接数据块中记录的也是相对路径指向。

下面这个图清晰描述了硬链接和软连接之间的区别:

Ext2fs基本结构

在创建文件系统的时候,Ext2fs将设备(磁盘或者分区)划分成1K、2K或者4K的block,然后通过Blockgroup来管理,Ext2fs/Ext3fs/Ext4fs的结构差不多(Ext2fs主要是少了日志功能相关的内容),大致如下图所示:

SuperBlock

SuperBlock是文件系统最重要的数据,它从设备开始位置偏移1024字节的地方开始存储,占用1个block。如果block的大小是1KB,那么SuperBlock就存放在block-1。如果block的大小是4KB,那Superblock就存放在block-0。

在Ext2fs的第一个版本(reverson0),每个BlockGroup都会存储一份SuperBlock的一份副本,因为对空间浪费比较严重,后来的版本就只在部分BlockGroup(0、1、3、5、7、9这几个group)中保留了SuperBlock的副本,在这几个Group,和SuperBlock一起备份的还有GroupDescriptor。当然,如果没有这么多Group,副本数量自然更少,在后面的demo中也可以看出来。其中Group-0中的SuperBlock叫作PrimarySuperBlock,文件系统被mount时,VFS读取的也正是这份。

SuperBlock里面的具体数据包括:

inode和block的总数,以及还有多少未分配。

每个BlockGroup有多少个inode和block。

文件系统唯一身份标识符(UUID),每个设备上的文件系统UUID都不一样。

...

GDT

GroupDescriptorTable,GDT在文件系统中的layout紧跟Superblock后面,是文件系统第二关键的数据,它主要用于存放所有BlockGroup的信息:

Ext2fs为GDT预留了一部分空间,用于文件系统扩容。

通过冗余提高了文件系统可靠性:在多个group中保存了关键数据的冗余副本,包括superblock、GDT,当这些关键数据损坏的时候,很容易从这些冗余副本中恢复。

提升性能:分成group后,inodetable和datablock之间的”距离“变近了,在执行I/O时,可能会减少磁头寻址的时间。

注:实际上inodesize,每个group中的block数等参数都可以在创建文件系统的时候指定,具体命令参数参考manpage。

Ext2fs的性能优化

为了提升I/O性能,Ext2fs内核代码也做了很多设计,其中有两个关键的技术:

提前读:当必须读取一个块时,内核代码在几个连续的块上请求I/O。通过这种方式,它试图确保要读取的下一个块已经加载到缓冲区缓存中。提前读通常在文件的连续读取期间执行,Ext2fs将它们扩展到目录读取,可以是显式读取(readdir(2)调用),也可以是隐式读取(namei内核目录查找)。

预分配:在将数据写入文件时,Ext2fs在分配新块时预先分配最多8个相邻块。具体预分配多少个块取决于blocksize:blocksize=1KB,每次预分配2个block;blocksize=2KB,每次预分配4个block;blocksize=4KB,每次预分配8个block。当然,对于用touch创建的空文件是不会预分配block的。即使在非常满的文件系统上,预分配命中率也只有75%左右。这种预分配在负载较大的情况下可以获得良好的写性能,同时它还允许将连续的块分配给文件,从而加快未来的顺序读取。

下面是Ext2fs、Ext3fs和Ext4fs的一个简单对比:

只有Ext2fs的Filesystemstate是notclean,Ext3fs和Ext4fs都是clean,Ext2fs刚被以读写模式mount时,这个state被设置成notclean,umount或者以只读模式mount时,state被设置成clean,启动时文件系统根据这个状态来决定是否要执行检查。

Ext3fs/Ext4fs的Superblock中多了关于日志功能的信息。

Ext4fs的每个group多了校验和(checksum)数据。

linux fsck.ext2命令详解

fsck.ext2命令是linux下的一个磁盘维护命令,它主要有一个功能,具体介绍如下:

fsck.ext2命令通常可以用在ext2文件系统中,若是ext2文件系统发生了错误,就可以使用fsck.ext2命令尝试进行修复。

fsck.ext2命令的具体命令的语法格式为fsck.ext2[参数]。

参数:

-a自动修复文件系统,且不询问任何问题

-c检查指定的文件系统内,有无损坏的区块

-d详细显示指令的执行过程,有利于进行排错或者分析程序执行的情形

-f强制对该文件系统进行完整检查,即使该文件系统在大概检查下没有问题

-F检查文件系统之前,先清理该保存设备区块内的数据

-v详细显示指令的执行过程

-V显示版本信息

参考范例:

检查特定的文件系统内,有无损坏的区块,具体命令为:

[root@linuxcool~]# fsck.ext2-c/dev/sdd1

浅析Linux标准的文件系统(Ext2/Ext3/Ext4)

全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版。Ext2被称为索引式文件系统,而Ext3/Ext4被称为日志式文件系统。Linux支持多种文件系统,包括网络文件系统(NFS)、Windows的Fat文件系统等。

查看Linux支持的文件系统:执行命令`ls-l/lib/modules/$(uname-r)/kernel/fs`或`cat/proc/filesystems`。

内核资料和学习资源:提供Linux内核技术交流群链接,整理了一些个人觉得较好的学习书籍、视频资料。进群私聊管理领取内核资料包(含视频教程、电子书、实战项目及代码)。还提供了免费加入学习的通道,包括Linux/c/c++/内核源码/音视频/DPDK/Golang云原生/QT。

核心设计数据存放区:这些元素相对稳定,磁盘格式化后,就固定下来了。inode的大小和数量都已固定,大小均为128Bytes(新的Ext4和xfs为258Bytes)。读取文件时,先读取inode里面记录的文件属性和权限,匹配正确后,才会读取文件内容(block)。在Linux系统中,实际使用inode来识别文件,而不是文件名。

查看文件或者文件系统的状态:查看系统各个文件系统的inode使用情况。

中介数据(metadata):这些元素是为了维持文件系统状态而设计出来的,当新增、编辑、删除文档时,都需要变更这些状态信息。整个文件系统的基本信息全部记录在superblock,它的大小一般为1024Bytes,如果它死掉,将会花费大量的时间去补救哦!!!除了第一个block group含有superblock外,后续block group都可能会含有备份的superblock,目的就是为了避免superblock单点无法救援的问题。

inode的作用:当用户搜索或者访问一个文件时,UNIX系统通过 inode表查找正确的 inode编号。在找到 inode编号之后,相关的命令才可以访问该 inode,并对其进行适当的更改。例如使用vi来编辑一个文件,通过 inode表找到 inode编号之后,才允许打开该 inode。在 vi的编辑会话期间,更改了该 inode中的某些属性,当您完成操作并键入:wq时,将关闭并释放该 inode。通过这种方式,如果两个用户试图对同一个文件进行编辑,inode已经在第一个编辑会话期间分配给了另一个用户 ID(UID),因此第二个编辑任务就必须等待,直到该 inode释放为止。

block的重要性:block是文件数据存储的原子单位,且每一个 block只能存储一个文件的数据。当格式化一个文件系统时,如果选择不当,就会造成大量的磁盘空间浪费。例如,如果文件系统选择的 block为4k,存储10000个小文件,每个500bytes,请问此时浪费了多少磁盘空间容量?答案是,每个文件浪费的磁盘容量= 4096- 500= 3596bytes,10000个文件浪费的磁盘容量= 10000* 3596~=34M,实际文件容量= 10000* 500~=4.7M,浪费率高达680%。

inode和block与文件大小的关系:数据实际存储在 block,为了能够快速地读取文件,每个文件都对应一个 inode索引文件,记录所有的 block编号。inode的大小只有128bytes或256bytes(ext4),如果一个文件太大,block数量很有可能会超过 inode可记录的数量。inode记录 block号码的区域被设计为 12个直接、一个间接、一个双间接、一个三间接记录区。

计算单文件最大容量:每个 block号码为数字,需要占据 4bytes。

查看磁盘和文档的容量:1.查看文件系统的整体磁盘容量。2.查看目录和文件容量。查看目录 geekbuying下所有目录的容量。统计当前目录容量。

总结:Ext家族是 Linux支持度最广、最完整的文件系统,当我们格式化磁盘后,就已经为我们规划好了所有的 inode/block/metadate等数据,这样系统可以直接使用,不需要再进行动态的配置。不过这也是它最显著的缺点,磁盘容量越大,格式化越慢。CentOS7.x已经选用 xfs作为默认文件系统,xfs是一种适合大容量磁盘和处理巨型文件的文件系统。

阅读剩余
THE END