- 浏览: 659523 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
HkEndless:
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
Spring CallBack回调机制介绍 -
hanmiao:
写的真乱啊,完全不知所云...
Java如何调用可执行文件和批处理命令 -
junia_1:
junia_1 写道 shock: ...
为什么要使用EJB -
junia_1:
shock:
为什么要使用EJB -
coollifer:
不错
SQL Server数据导入到Oracle中的方法
文件系统是操作系统最为重要的一部分,它定义了磁盘上储存文件的方法和数据结构。文件系统是操作系统组织、存取和保存信息的重要手段,每种操作系统都有自己的文件系统,如Windows所用的文件系统主要有FAT16、FAT32和NTFS,Linux 所用的文件系统主要有ext2、ext3、Ext4 和ReiserFS等。
我们知道,一块磁盘,要先分区,然后再格式化,否则不能使用,而这个格式化的过程,就是文件系统创建的过程,也可以这要理解,磁盘上的一个分区,就
是一个文件系统。这个就像我们在使用windows系统的时候,把磁盘分区可以格式化成FAT32,也可以格式成NTFS,这个完全自己来掌握,但所格式
化的文件系统必需是你使用的系统所能认出来的。这就是为什么NTFS的文件系统,不能直接被Linux
系统所认识。同样,windows也不能认识EXT3/Ext4一样的道理。
关于文件系统的定义,没有一个标准的答案,如果有更高兴趣来研究文件系统的朋友,可能找相关的资料来查阅。本文只是带大家初步来了解认识文件系统。
了解一些和文件系统相关的关键词
存储介质:硬盘、光盘、软盘、Flash盘、磁带、网络存储设备等。
磁盘的分区:这是针对大容量的存储设备来说的,主要是指硬盘;对于大硬盘,我们要合理规划分区,所以要谈到硬盘的分区。
文件系统的创建:这个过程是存储设备建立文件系统的过程,一般也被称为格式化或初始化,通过一些初始化工具来进行。
挂载(mount):文件系统只有挂载才能使用,Linux
的操作系统是通过mount进行的,挂载文件系统时要有挂载点,比如我们在安装Linux
的过程中,有时会提示我们分区,然后建立文件系统,接着是问你的挂载点是什么。我们在Linux系统的使用过程中,也会挂载其它的硬盘分区,也要选中挂载点,挂载点通常是一个空置的目录,最好是我们自建的空置目录;
文件系统可视的几何结构:文件系统的是用来组织和排列文件存取的,所以她是可见的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,他表现为由/起始的树形结构。
Linux系统上常见文件系统格式介绍
EXT1:第一个受Linux支持的文件系统是Minix文件系统。这个文件系统有严重的性能问题,因此出现了另一个针对Linux的文件系统,即扩展文 件系统。第1个扩展文件系统(ext1)由 Remy Card设计,并于 1992 年 4 月引入到 Linux 中。ext1文件系统是第一个使用虚拟文件系统(VFS)交换的文件系统。虚拟文件系统交换是在 0.96c 内核中实现的,支持的最大文件系统为2GB。
EXT2:第 2 个扩展文件系统(ext2)也是由 Remy Card 实现的,并于 1993 年 1 月引入到 Linux 中。它借鉴了当时文件系统(比如 Berkeley Fast File System [FFS])的先进想法。ext2 支持的最大文件系统为 2TB,但是 2.6 内核将该文件系统支持的最大容量提升到 32TB。
EXT3:第 3 个扩展文件系统(ext3)是 Linux 文件系统的重大改进,尽管它在性能方面逊色于某些竞争对手。ext3 文件系统引入了日志 概念,以在系统突然停止时提高文件系统的可靠性。虽然某些文件系统的性能更好(比如 Silicon Graphics 的 XFS 和 IBM® Journaled File System [JFS]),但 ext3 支持从使用 ext2 的系统进行就地(in-place)升级。ext3 由 Stephen Tweedie 实现,并于 2001 年 11 月引入。
Ext4:2.6.28内核是首个稳定的 Ext4 文件系统。在性能、伸缩性和可靠性方面进行了大量改进。最值得一提的是,ext4 支持 1
EB 的文件系统。ext4 是由 Theodore Tso(ext3 的维护者)领导的开发团队实现的,并引入到 2.6.19 内核中。目前,它在
2.6.28 内核中已经很稳定(到 2008 年 12 月为止)。
Ext4 从竞争对手那里借鉴了许多有用的概念。例如,在 JFS 中已经实现了使用区段(extent)来管理块。另一个与块管理相关的特性(延迟分配)已经在 XFS 和 Sun Microsystems 的 ZFS 中实现。
在Ext4 文件系统中,您可以发现各种改进和创新。这些改进包括新特性(新功能)、伸缩性(打破当前文件系统的限制)和可靠性(应对故障),当然也包括性能的改善。
swap: 它是Linux中一种专门用于交换分区的swap文件系统。Linux是使用这一整个分区作为交换空间。一般这个swap格式的交换分区是主内存的2倍。在内存不够时,Linux会将部分数据写到交换分区上。
文件系统工作原理
文件系统的工作与操作系统的文件数据有关。现在的操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如文件权限(rwx)与文件属性(所有者、用户组、时间参数等)。文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放到inode 中,数据则放到block 区块中。另外,还有一个超级区块(super block)会记录整个文件系统的整体信息,包括 inode与block的总量、使用量、剩余量等等等。
每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下:
superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
block:实际记录文件的内容,若文件太大时,会占用多个 block 。
由于每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据放置的 block 号码。 因此,我们可以知道的是,如果能够找到文件的 inode 的话,那么自然就会知道这个文件所放置数据的 block 号码, 当然也就能够读出该文件的实际数据了。这是个比较有效率的作法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据, 读写的效能比较好。
我们将 inode 与 block 区块用图解来说明一下,如下图所示,文件系统先格式化出 inode 与 block
的区块,假设某一个档案的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记录了档案数据的实际放置点为 2,
7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来!
那么数据的读取就如同下图中的箭头所指定的模样了。
图inode/block 资料存取示意图
这种数据存取的方法我们称为索引式文件系统(indexed allocation)。下面我们来看一下windows系统中的FAT,这种格式的文件系统并没有 inode 存在,所以 FAT 没有办法将这个文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中, 他的读取方式有点像底下这样:
图FAT文件系统资料存取示意图
上图中我们假设文件的数据依序写入1->7->4->15号这四个 block 号码中, 但这个文件系统没有办法一口气就知道四个 block 的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在何处。 如果同一个文件数据写入的 block 分散的太厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容。
这就是为什么在windows系统中常常需要碎片整理, 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差。这个时候可以通过碎片整理将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易。
FAT的文件系统需要不定期进行碎片整理,那么 Ext 是否需要磁盘整理呢?
由于 Ext 是索引式文件系统,基本上不需要进行碎片整理。但是如果文件系统使用太久, 常常删除/编辑/新增文件时,那么还是可能会造成文件数据太过于离散的问题,此时或许会需要进行重整一下的。 不过,似乎没有多少人来进行Linux磁盘的碎片啊!
如上所说的,inode 的内容在记录文件的权限与相关属性,至于 block 区块则是在记录文件的实际内容。 而且文件系统一开始就将 inode 与 block 规划好了,除非重新格式化(或者利用 resize2fs 等指令变更文件系统大小),否则 inode 与 block 固定后就不再变动。但是如果仔细考虑一下,如果我的文档系统高达数百GB时, 那么将所有的 inode 与 block 通通放置在一起将是很不智的决定,因为 inode 与 block 的数量太庞大,不容易管理。 因此 Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。
Ext2文件系统结构详解
ext2文件系统示意图
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序, 这是个非常重要的设计,这样我们就能够将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整颗硬盘唯一的 MBR, 这样也才能够制作出多重引导的环境啊!至于每一个区块群组(block group)的六个主要内容说明如下:
data block (资料区块)
data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block
大小有 1K, 2K 及 4K 三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode 的记录啦。
不过要注意的是,由于 block 大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。 因为 block 大小而产生的
Ext2 文件系统限制如下图:
你需要注意的是,虽然 Ext2 已经能够支持大于 2GB 以上的单一文件容量,不过某些应用程序依然使用旧的限制, 也就是说,某些程序只能够捉到小于 2GB 以下的文件而已,这就跟文件系统无关了!
注:
原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
每个 block 内最多只能够放置一个档案的数据;
如果档案大于 block 的大小,则一个档案会占用多个 block 数量;
若档案小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费);
若档案很大的话,就会占用更多的block,将会降低文件系统的读写效能。
inode table (inode 表格)
再来讨论一下 inode 这个吧!如前所述 inode 的内容在记录档案的属性以及该档案实际数据是放置在哪几号 block 内! 基本上,inode 记录的文件数据至少有底下这些:
该文件的存取模式(read/write/excute);
该文件的拥有者与群组(owner/group);
该文件的容量;
该文件建立或状态改变的时间(ctime);
最近一次的读取时间(atime);
最近修改的时间(mtime);
定义文件特性的旗标(flag),如 SetUID...;
该文件真正内容的指向 (pointer);
inode 的数量与大小也是在格式化时就已经固定了,除此之外 inode 还有以下特色
每个 inode 大小均固定为 128 bytes;
每个文件都仅会占用一个 inode ;
文件系统能够建立的文件数量与 inode 的数量有关;
系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。
Superblock (超级块)
Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了。他记录的信息主要有:
block 与 inode 的总量;
未使用与已使用的 inode / block 数量;
block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。
Superblock 是非常重要的,因为我们这个文件系统的基本信息都写在这里。一般来说, superblock 的大小为 1024bytes。
Filesystem Description (文件系统描述说明)
这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。
block bitmap (区块对照表)
如果你想要新增文件时总会用到 block ,那要使用哪个 block
来记录呢?当然是选择空的block 来记录新文件的数据。 那你怎么知道哪个 block 是空的?这就得要透过 block bitmap
的辅助了。从 block bitmap 当中可以知道哪些 block 是空的,因此我们的系统就能够很快速的找到可使用的空间来处文件。
同样的,如果你删除某些文件时,那么那些档案原本占用的 block 号码就得要释放出来, 此时在 block bitmap 当中相对应到该
block 号码的标志就得要修改成为未使用的,这就是 bitmap 的功能。
inode bitmap (inode 对照表)
这个其实与 block bitmap 是类似的功能,只是 block bitmap 记录的是使用与未使用的 block 号码, 至于 inode bitmap 则是记录使用与未使用的 inode 号码。
最后给一张EXT3文件系统结构图,大家可以详细的来解读EXT文件系统。
发表评论
-
Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf
2012-04-14 00:48 1698LD_LIBRARY_PATH Linux环境变量名,该 ... -
Linux系统下查找大文件或目录的技巧
2012-01-09 11:34 1093当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否删 ... -
Linux中如何杀掉僵尸进程
2012-01-08 11:06 11541检查当前僵尸进程信息 $ ps -ef | grep de ... -
Linux系统中增加Swap分区大小
2012-01-07 22:22 12381、检查当前的分区情况: [root@localho ... -
Linux系统调优:提高磁盘吞吐量
2011-10-28 23:13 2603在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不 ... -
ssh密钥对的自动登录
2011-10-30 02:34 1524说明: 什么是基于ssh密钥对的自动登录? 下面从整体上 ... -
利用shell和iptables实现自动拒绝恶意试探连接SSH服务
2011-10-06 16:49 1104利用shell和iptables实现自动拒绝恶意试探连接SSH ... -
Linux系统下比较两个文件并删除相同部分
2011-10-04 22:17 1394方法一: comm -23 file1 file2 ... -
redhat 内核参数意思
2011-08-31 01:23 1726一、前言 本文档针对OOP8生产环境,具体优化策略需要根据实 ... -
Linux裸设备总结
2011-08-29 19:56 13371、什么裸设备?字符设 ... -
linux nfs配置概要
2011-08-29 19:11 932利用nfs 可以共享系统中的指定文件夹给网络中的其它机器。我们 ... -
linux操作系统下NTP服务器配置
2011-08-25 09:23 1768Network Time Protocol(NTP ... -
优化Linux生产服务器的经验之谈
2011-08-23 21:21 1390一、时间同步 生产环境下的服务器对时间的要求是精准的,编辑 ... -
NTP服务器安装手记
2011-08-23 21:13 1545NTP服务器安装手记随着时间的推移,计算机的时钟会倾向于漂移。 ... -
Linux下oracle常见安装错误总结
2011-08-23 20:37 1564错误一: /tmp/OraInstall2007-1 ... -
LVM创建
2011-08-23 18:42 1440LVM (有点像 WIN 下的动态磁盘, ... -
chkconfig --add httpd
2011-08-22 10:07 1500Apache 无法自动启动, 1 、将 apa ... -
Linux下cache内存释放
2011-08-22 08:59 777/proc是一个虚拟文件系统,我们可以通过对它的读写操作做 ... -
Linux系统不响应SYN包的解决办法
2011-08-22 00:29 2285关于syn为什么没有回应的问题真是郁闷了好久。 现象就是在客户 ... -
Linux下使用Yum管理本地软件包(repository)
2011-08-21 23:52 1802在Linux系统的维护中,Linux软件包之间的依赖性是一件令 ...
相关推荐
### Linux系统文件系统的工作原理 #### 一、文件系统概述 ...此外,通过对比其他文件系统,我们可以更好地认识到Linux文件系统的优势所在。对于Linux用户和开发者而言,深入掌握文件系统的内部工作原理是非常有益的。
### Linux文件系统浅谈 #### 文件系统概述 文件系统作为操作系统的重要组成部分,承载着管理和组织存储设备上的数据的责任。...通过对本文所述内容的学习,相信读者们已经对Linux文件系统有了初步的认识和了解。
Linux 系统中使用了虚拟文件系统 VFS,从而允许 Linux 支持多种不同的文件系统,每个文件系统都要提供给 VFS 一个相同的接口。 Linux 系统支持三种类型的硬件设备:字符设备、块设备和网络设备。Linux 系统和设备...
认识文件类型、权限、SELinux 等概念对 Linux 系统的管理和安全非常重要。本节将详细介绍 Linux 文件相关知识点。 文件类型 Linux 文件类型可以分为七种:目录文件、普通文件、管道文件、链接文件、块设备文件、...
Linux的目录结构遵循特定的规则,例如/bin存储常用命令,/boot存放引导文件,/dev包含设备文件,/etc保存系统配置,/home是用户主目录,/lib包含系统库,/lost+found存储意外断电后可能找到的文件,/mnt用于临时挂载...
"Linux文件系统详解" Linux操作系统的文件系统是其高效运行的关键,综合了许多先进的操作系统的概念,并在广泛的应用领域证实了其自身的健壮性和高效性。深入全面掌握Linux文件系统是学习Linux的基础和难点。 文件...
剖析Linux中的虚拟文件系统VFS的认识 Linux虚拟文件系统VFS(Virtual Filesystem Switch)是一种抽象的文件系统接口,允许用户程序访问不同的逻辑文件系统,而不需要关心具体的文件系统实现细节。VFS将各种逻辑文件...
Linux文件系统是一个非常核心且复杂的主题,涉及到存储介质的管理、文件的组织、存储空间的分配和回收、文件的读写操作以及系统数据的...通过本文的介绍,可以初步认识Linux中的文件系统,为深入研究和应用打下基础。
Linux文件系统是操作系统的核心组成部分,它管理着...这种灵活性和可扩展性使得Linux成为企业级服务器和嵌入式设备的首选操作系统之一。理解并掌握这些文件系统的特点和用途,对于Linux用户和系统管理员来说至关重要。
通过对文件系统的设计和实现过程的深入理解,不仅可以增强我们对操作系统底层机制的认识,还能为开发更加高效稳定的文件系统奠定坚实的基础。希望本文能为想要深入了解文件系统实验的读者提供一定的帮助和启示。
VFS的工作方式是通过进程分析的方法,对VFS系统的文件操作过程和文件访问过程进行初步分析,从而总结出Linux的VFS文件系统在工作方式和结构上的优点,以便更好地认识VFS文件系统的特点。 Linux支持多种文件系统,如...
Linux 文件系统管理 - ...通过该实验,我们加深了对 Linux 文件系统权限的理解和 Linux 用户帐号与组管理的认识。我们还掌握了 Linux 文件共享的设置方法和权限设置方法。本实验为我们提供了实践经验和理论知识的结合。
在Linux操作系统中,文件系统是核心组成部分之一,它负责组织和管理存储设备上的数据。本文主要探讨了Linux文件系统的管理及用户维护方面的知识。 首先,Linux文件系统采用了一种层次结构,以根目录"/"为起点,向下...
它比早期的ext文件系统更为高效和稳定,支持大容量存储设备,是Linux环境下的主流文件系统之一。ext2文件系统的特点包括了对分区进行格式化的操作,格式化会指定一个特定的文件系统,并且一个分区通常只能有一个文件...
这种协作模式推动了Linux的快速发展,使其从一个简单的实验项目演变为全球最广泛使用的服务器操作系统之一。 Linux的早期发行版,如Debian、Fedora和openSUSE,是Linux发展的重要组成部分。这些发行版由不同的社区...
Linux系统中,硬盘内部结构和文件系统的组成是计算机存储和管理数据的基础。本文将从硬盘的内部结构开始,详细解释Linux GPT分区和文件系统的组成,最后介绍软硬链接的创建。 硬盘结构分为几个部分,包括机械硬盘和...
Linux操作系统作为开源界的佼佼者,在服务器、嵌入式系统和实时操作系统等众多领域...通过本文的分析,可以对Ext3文件系统的操作原理和性能特点有一个全面的认识,这将有助于在实际应用中更有效地部署和管理Linux系统。
第0章 计算机概论 ...第8章 Linux磁盘与文件系统管理 第9章 档案与文件系统的压缩与打包 第10章 vim程序编辑器 第11章 认识与学习BASH 第12章 正规表示法与文件格式化处理 第13章 学习Shell Scripts ........
在操作系统实验报告“文件管理”部分,我们关注的是如何为Unix/Linux系统设计一个简单的二级文件系统。这个实验旨在让学生深入理解文件系统的内部运作机制及其功能实现。以下是该实验涉及的关键知识点: 1. 文件...