2021-04-20 18:44发布
1、Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型,比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。下面说明其支持的几个重要的文件系统2、ext专门为Linux设计的,为linux核心所做的第一个文件系统。单个文件最大限制:未知;该文件系统最大支持2GB的容量。3、ext2由Rémy Card设计,用以代替ext,是LINUX内核所用的文件系统。单个文件最大限制2TB;该文件系统最大支持32TB的容量。4、ext3一个日志文件系统。单个文件最大限制16TB,该文件系统最大支持32TB的容量。5、ext4Theodore Tso领导的开发团队实现,Linux系统下的日志文件系统。单个文件最大限制16TB,该文件系统最大支持1EB的容量。6、JFS2一种字节级日志文件系统,该文件系统主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。
比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型。
jpg属于图片格式所以和系统关系不大 只要系统有看图的工具就可以打开 rar这个应该是用zip命令但是rar官方有for
普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等
在Linux操作系统里有Ext2、Ext3、Linux swap和VFAT 种格式
1、Linux操作系统安装过程中的文件系统的选择; 1)ext2 文件系统; ext2文件系统应该说是Linux正宗的文件系统,早期的Linux都是用ext2,但随着技术的发展,大多Linux的发行版本目前并不用这个文件系统了;比如Redhat和Fedora大多都建议用ext3 ,ext3文件系统是由ext2发展而来的。对于Linux新手,我们还是建议您不要用ext2文件系统;ext2支持undelete(反删除),如果您误删除文件,有时是可以恢复的,但操作上比较麻烦; ext2支持大文件; ext2文件系统的官方主页是: http://e2fsprogs.sourceforge.net/ext2.html 2)ext3 文件系统:是由ext2文件系统发展而来; ext3 is a Journalizing file system for Linux(ext3是一个用于Linux的日志文件系统),ext3支持大文件;但不支持反删除(undelete)操作; Redhat和Fedora都力挺ext3;至于ext3文件系统的更多特性,请访问《Linux文件系统(filesystem)资源索引》 ; 3)reiserfs 文件系统; reiserfs文件系统是一款优秀的文件系统,支持大文件,支持反删除(undelete);在我的测试ext2、reiserfs反删除文件功能的过程中,我发现reiserfs文件系统表现的最为优秀,几乎能恢复90%以上的数据,有时能恢复到100%;操作反删除比较容易;reiserfs支持大文件; 4)、Linux 支持的文件系统; Linux目前几乎支持所有的Unix类的文件系统,除了我们在安装Linux操作系统时所要选择的ext3、reiserfs和ext2外,还支持苹果MACOS的HFS,也支持其它Unix操作系统的文件系统,比如XFS、JFS、Minix fs及UFS等,您可以在kernel的源码中查看;如果您想要让系统支持哪些的文件系统得需要把该文件系统编译成模块或置入内核; 当然Linux也支持Windows文件系统NTFST和fat,但不支持NTFS文件系统的写入;支持fat文件系统的读写 Linux也支持网络文件系统,比如NFS等;
Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型。比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
v Linux 支持的文件系统类型
v Linux 系统的目录结构
v Linux 常用命令
v 熟悉L inux 支持的文件系统类型
v 了解ext2和ext3文件系统之间的异同
v 熟悉Linux 系统的目录结构
v 熟悉Linux 的常用命令
不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,以相互交换数据,通常操作系统都能支持多种类型的文件系统。例如Windows XP,系统默认或推荐采用的文件系统是NTFS,但同时也支持FAT32 或FAT16 文件系统。
Linux 内核支持是多种不同类型的文件系统,对于RedHat Linux,系统默认使用ext2、ext3 和swap 文件系统。
下面是对Linux 常用的文件系统类型。
ext 是第一个专门为Linux 设计的文件系统类型,称为扩展文件系统,在Linux 发展的早期,起过重要的作用。由于在稳定性、速度和兼容性方面存在许多缺陷,现在已经很少使用。
ext2 是为解决ext文件系统存在的缺陷而设计的可扩展、高性能的文件系统,称为二级扩展文件系统。ext2 于1993 年发布,在速度和CPU 利用率上具有较突出的优势,是GNU/Linux 系统中标准的文件系统,支持256 个字节的长文件名,文件存取性能极好。
ext3 是ext2 的升级版本,兼容ext2,在ext2 的基础上增加了文件系统日志记录功能,称为日志式文件系统,是目前Linux 默认采用的文件系统。日志式文件系统在因断电或其他异常事件而停机重启后,操作系统会根据文件系统的日志,快速检测并回复文件系统到正常的状态,并可提高系统的恢复时间,提高数据的安全性。若对数据有较高的安全性要求,建议使用ext3 文件系统。
日志文件系统是目前Linux 文件系统发展的方向,除了RedHat Linux采用的ext3外,常用的还有reiserfs 和jfs 等日志文件系统。
swap 文件系统用于Linux的交换分区。在Linux 中,使用整个交换分区来提供虚拟内存,其分区大小一般应是系统物理内存的2倍。
在安装Linux操体系统时,就应该创建交换分区,它是Linux正常运行所必需的,其类型必须是swap。交换分区由操作系统自行管理。
vfat 是Linux对DOS、Windows 系统下的FAT (包括FAT16 和 FAT32 )文件系统的一个统称。RedHat Linux支持FAT16 和FAT32 分区,也能在该系统中通过相关命令创建FAT分区。
NFS 即网络文件系统,用于在UNIX 系统间通过网络进行文件共享,用户可以将网络中NFS 服务器提供的共享目录,挂载到本地的文件目录中,从而实现访问NFS 文件系统中的内容。
该文件系统是光盘所使用的标准文件系统,Linux 对该文件系统也有很好的支持,不仅能读取光盘和光盘ISO 映像文件,而且还支持在Linux环境中刻录光盘。
RedHat Linux 支持的文件系统很多,在此不一一介绍。
本文将对Linux下常见的几种文件系统进行对比,包括ext2、ext3、ext4、XFS和Btrfs,希望能帮助大家更好的选择合适的文件系统。
内容来自于网上找的资料以及自己的一些经验,能力有限,错误在所难免,仅供参考
历史
文件系统
创建者
创建时间
最开始支持的平台
1994
IRIX, Linux, FreeBSD
Sun
2004
Solaris
众多开发者
2006
Linux
Oracle
2007
从创建时间可以看出他们所处的不同时代,因为Btrfs的实现借鉴自ZFS,所以这里也将ZFS列出来作为参考。
大小限制
最大文件名长度
最大文件大小
最大分区大小
ext2
255 bytes
2 TB
16 TB
ext3
ext4
1 EB
XFS
8 EB
Btrfs
16 EB
最大文件和分区大小受格式化分区时所采用的块大小(block size)所影响,块越大,所支持的最大文件和分区越大,也越可能浪费磁盘空间,上表列出的数据基于4K的块大小。
代码规模
从代码规模可以看出文件系统的功能丰富程度以及复杂度,下面列出的数据来自于kernel-4.1-rc8,只是简单的用wc -l来统计,没有过滤空行、注释等。
源文件(.c)
头文件(.h)
8363
1016
16496
1567
44650
4522
89605
15091
105254
7933
Btrfs还在快速的开发过程中,代码行数可能还有比较大的变化
XFS和Btrfs都使用了B-tree
ext的优点是比较简单,文件比较少时性能较好,比较适合文件少的场景,主要缺点如下
inode的数量是固定不变的,在格式化分区的时候可以指定inode和数据块所占空间的比例,但一旦格式化好,后续就没法再改变了
当块大小为4K时,单个文件大小不能超过2TB,分区大小不能超过16TB(目前硬盘大小一般都只有几TB,所以也不是什么大问题,)
一个目录下最多只能有32000个子目录
由于目录里面存储的文件和子目录都是以线性方式来组织的,所以遍历目录效率不高,尤其当目录下文件个数达到10K以上规模的时候,速度会明显的变慢
当底层的磁盘分区空间变大时(使用LVM时很常见),ext2没法动态的扩展来使用增加的空间
没有日志(Journal)功能,所以数据的安全性不高
ext3在ext2的基础上实现了下面几个功能,其它的都保持不变,即ext2的缺点ext3也有
支持日志(Journal)功能,数据的安全性较ext2有很大的提高
当底层的分区空间变大时,ext3可以自动扩展来使用增加的空间
使用HTree来组织目录里面的文件和子目录,使目录下的文件和子目录数不再受性能限制(数量超过10K也不会有性能问题)
ext4借鉴了当前成熟的一些文件系统技术,在ext3上增加了一些功能,并且对性能做了一些改进,主要变化如下
当块大小为4K时,支持的最大文件和最大分区大小分别达到了16TB和1EB
不再受32000个子目录数的限制,支持不限数量的子目录个数
支持Extents,提高了大文件的操作性能
内部实现上支持一次分配多个数据块,较ext3的性能有所提高
支持延时分配(即支持fallocate函数)(fallocate是libc的函数,在不支持该功能的文件系统上,libc会创建一个占用磁盘空间文件)
支持在线快速扫描
支持在线碎片整理(单个文件或者整个分区)
日志(Journal)支持校验码(checksum),数据的安全性进一步提高
支持无日志(No Journaling)模式(ext3不支持该功能),这样就和ext2一样,消除了写日志对性能的影响
支持纳秒级的时间戳
记录了文件的创建时间,由于相关的应用层工具还不支持,所以只能通过debug的方式看到文件的创建时间
这里是一个查看文件/etc/fstab创建时间的例子(文件存在/dev/sda1分区上):
dev@ubuntu:~$ ls -i /etc/fstab
10747906 /etc/fstab
dev@ubuntu:~$ sudo debugfs -R 'stat <10747906>' /dev/sda1
Inode: 10747906 Type: regular Mode: 0644 Flags: 0x80000
Links: 1 Blockcount: 8
ctime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
atime: 0x55d1b014:8bcf7b44 -- Mon Aug 17 05:57:40 2015
mtime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
crtime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
Size of extra inode fields: 28
EXTENTS: (0):46712815
Extents: 在最开始的ext2文件系统中,数据块都是一个一个单独管理的,inode中存有指向数据块的指针,文件占用了多少个数据块,inode里面就有多少个指针(多级),想象一下一个1G的文件,4K的块大小,那么需要(1024 * 1024)/4=262144个数据块,即需要262144个指针,创建文件的时候需要初始化这些指针,删除文件的时候需要回收这些指针,影响性能。现代的文件系统都支持Extents的功能,简单点说,Extent就是数据块的集合,以前一次分配一个数据块,现在可以一次分配一个Extent,里面包含很多数据块,同时inode里面只需要分配指向Extent的指针就可以了,从而大大减少了指针的数量和层级,提高了大文件操作的性能。
inode数量固定: 在ext2/3/4系列的文件系统中,inode的数量都是固定的,坏处是如果存很多小文件的话,有可能造成inode被用光,但磁盘还有很多剩余空间无法被使用的情况,不过它也有一个好处,就是一旦磁盘损坏,恢复起来要相对简单些,因为数据在磁盘上布局相对要固定简单。
xfs
和ext4相比,xfs不支持下面这些功能
不支持日志(Journal)校验码
不支持无日志(No Journaling)模式
不支持文件创建时间
不支持数据日志(data journal),只有元数据日志(metadata journal)
但xfs有下面这些特性
支持的最大文件和分区都达到了8EB
inode动态分配,从而不受inode数量的限制,再也不用担心存储大量小文件导致inode不够用的问题了。
更大的xattr(extended attributes)空间,ext2/3/4及btrfs都限制xattr的长度不能超过一个块(一般是4K),而xfs可以达到64K
内部采用Allocation groups机制,各个group之间没有依赖,支持并发操作,在多核环境的某些场景下性能表现不错
提供了原生的dump和restore工具,并且支持在线dump
btrfs
btrfs是一个和ZFS类似的文件系统,支持的功能非常多,据说将来会替换ext4成为Linux下的默认文件系统。这里列举一些重要的功能
支持的最大文件和分区达到了16EB
支持COW(copy on write)
针对小文件和SSD做了优化
inode动态分配
支持子分区(Subvolumes),子分区可以单独挂载
支持元数据和数据的校验(crc32)
支持压缩,去重
支持多个磁盘和分区,可动态扩展
支持LVM,RAID的功能(有了btrfs,就不再需要lvm和软raid了)
增量备份和恢复
支持快照
将ext2/3/4转换成btrfs(反过来不行)
btrfs最大的缺点就是由于其COW的实现方式,导致碎片化问题比较严重,不太适合频繁写的场景,比如数据库、虚拟机的磁盘文件等。不过大部分场合不需要担心,btrfs有在线的碎片整理工具。
如何选择
下表仅供参考
适用场景
原因
U盘
U盘一般不会存很多文件,且U盘的文件在电脑上有备份,安全性要求没那么高,由于ext2不写日志(journal),所以写U盘性能比较好。当然由于ext2的兼容性没有fat好,目前大多数U盘格式还是用fat
对稳定性要求高的地方
有了ext4后,好像没什么原因还要用ext3,ext4现在的问题是出来时间不长,还需要一段时间变稳定
小文件较少
ext系列的文件系统都不支持inode动态分配,所以如果有大量小文件需要存储的话,不建议用ext4
小文件多或者需要大的xttr空间,如openstack swift将数据文件的元数据放在了xttr里面
xfs支持inode动态分配,所以不存在inode不够的情况,并且xttr的最大长度可以达到64K
没有频繁的写操作,且需要btrfs的一些特性
btrfs虽然还不稳定,但支持众多的功能,如果你需要这些功能,且不会频繁的写文件,那么选择btrfs
另外,ext系列文件系统内部结构相对简单一些,出问题后恢复相对容易。
结束语
本篇没有比较它们的性能,在通常情况下,他们之间没有太大的性能差别,只有在特定的场景下,才能看出区别,如果对性能比较敏感,建议根据自己的使用场景来测试不同的文件系统,然后根据结果来选择。
使用命令:chmod 744 myflile就可以实现以上的操作。
关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间分析解决这类问题,关...
chmod 命令:chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。1. 文字设定法:chmod [who] [+ | - | =] ...
Linux chattr 命令一般,chattr命令用于更改Linux文件上属性。以下是它的语法:chattr [ -RVf ] [ -v version ] [ mode ] files...下面是man手册对它的描述:chattr 改变一个Linux文件系统上的文件属性。一个通用格式是:+-=[aAcCdDeijsStTu]‘+’选项,将给...
命令格式cat [选项] [文件]...命令功能cat主要有三大功能:一次显示整个文件:cat filename从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.将几个文件合并为一个文件:cat file1 file2 > file命令参数-n 或 --number 对输出的所有行编号,...
shell的执行过程: 首先,脚本是从上至下从左至右执行每一行的语句的。 其次,当执行脚本时会进入一个新的shell,也成为nologin shell,在该shell下执行完成后,再返回执行前的shell。更加详细的讲解请楼主参考鸟哥linux网站中的bash shell章节有图能让您更...
学习linux为什么要学习Shell: 1、首先我们了解一下shell编程是什么,其实shell编程就是一坨linux命令的集合再加上一些控制语句而已 2、为什么要学习linux下的shell编程,我们平时在做运维工作时总会遇到一些重复的工作,如果我们会shell编程的话就可以将这些...
1.服务器一般情况下只有在进行项目部署或者是出现问题的时候才需要进行远程连接操作,在进行连接的时候我们一般都是使用的外部连接软件2.启动软件,点击快速连接,我们要选择连接的协议3.协议选择要然后填写服务器的IP地址和用户名,然后点击连接4.在通过验证...
1.正确的关机流程为:sysnc ? shutdown ? reboot ? halt;2.sync 将数据由内存同步到硬盘中。3.shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:4.shutdown –h 10 ‘This server will shutdown after 10 mins’ ...
一个典型的Linux发行版包括:Linux核心,一些GNU库和工具,命令行shell,图形界面的X窗口系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公包,编译器,文本编辑器到科学工具的应用软件。主流的Linux发行版:Ubuntu, DebianGNU/Linux ,Fedora,Gento...
linux的基础启动流程1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。4. 核心执行init程序并获...
点击运行或者win+R调出运行窗口,输入regedit打开Windows注册表在注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config找到AnnounceFlags 双击修改值为5保存1. 在注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentC...
你可以经常去一些linux的论坛!~那里有许多知识的~你也可以下载一些自学教程!~当然是从入门开始了!~安装和使用的基本命令什么的!~和你学windows开始一样,由浅入深!~http://www.linux8.net/http://www.chinalinuxpub.com/http://linux.chinaitlab.com/Lin...
1、cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:cd /root/Docements # 切换到目录/root/Docementscd ./path # 切换到当前目录下的path...
目录/bin存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。/etc存放系统管理和配置文件/home存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /usr用于存放系统应用程序,比较重要的目录/u...
最多设置5个标签!
1、Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型,比如Btrfs、JFS、
ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。下面说明其支持的几个重要的文件系统
2、ext专门为Linux设计的,为linux核心所做的第一个文件系统。单个文件最大限制:未知;该文件系统最大支持2GB的容量。
3、ext2由Rémy Card设计,用以代替ext,是LINUX内核所用的文件系统。单个文件最大限制2TB;该文件系统最大支持32TB的容量。
4、ext3一个日志文件系统。单个文件最大限制16TB,该文件系统最大支持32TB的容量。
5、ext4Theodore Tso领导的开发团队实现,Linux系统下的日志文件系统。单个文件最大限制16TB,该文件系统最大支持1EB的容量。
6、JFS2一种字节级日志文件系统,该文件系统主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。
比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型。
jpg属于图片格式所以和系统关系不大 只要系统有看图的工具就可以打开 rar这个应该是用zip命令但是rar官方有for
Linux文件类型常见的有:
普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等
在Linux操作系统里有Ext2、Ext3、Linux swap和VFAT 种格式
1、Linux操作系统安装过程中的文件系统的选择; 1)ext2 文件系统; ext2文件系统应该说是Linux正宗的文件系统,早期的Linux都是用ext2,但随着技术的发展,大多Linux的发行版本目前并不用这个文件系统了;比如Redhat和Fedora大多都建议用ext3 ,ext3文件系统是由ext2发展而来的。对于Linux新手,我们还是建议您不要用ext2文件系统;ext2支持undelete(反删除),如果您误删除文件,有时是可以恢复的,但操作上比较麻烦; ext2支持大文件; ext2文件系统的官方主页是: http://e2fsprogs.sourceforge.net/ext2.html 2)ext3 文件系统:是由ext2文件系统发展而来; ext3 is a Journalizing file system for Linux(ext3是一个用于Linux的日志文件系统),ext3支持大文件;但不支持反删除(undelete)操作; Redhat和Fedora都力挺ext3;至于ext3文件系统的更多特性,请访问《Linux文件系统(filesystem)资源索引》 ; 3)reiserfs 文件系统; reiserfs文件系统是一款优秀的文件系统,支持大文件,支持反删除(undelete);在我的测试ext2、reiserfs反删除文件功能的过程中,我发现reiserfs文件系统表现的最为优秀,几乎能恢复90%以上的数据,有时能恢复到100%;操作反删除比较容易;reiserfs支持大文件; 4)、Linux 支持的文件系统; Linux目前几乎支持所有的Unix类的文件系统,除了我们在安装Linux操作系统时所要选择的ext3、reiserfs和ext2外,还支持苹果MACOS的HFS,也支持其它Unix操作系统的文件系统,比如XFS、JFS、Minix fs及UFS等,您可以在kernel的源码中查看;如果您想要让系统支持哪些的文件系统得需要把该文件系统编译成模块或置入内核; 当然Linux也支持Windows文件系统NTFST和fat,但不支持NTFS文件系统的写入;支持fat文件系统的读写 Linux也支持网络文件系统,比如NFS等;
Linux操作系统使用虚拟文件系统(VFS)向上和用户进程文件访问系统调用接口,向下和具体不同文件系统的实现接口。VFS屏蔽了具体文件的实现细节,向上提供统一的操作接口。通过VFS可以实现任意的文件系统,这些文件系统通过文件访问系统调用都可以访问。所以Linux系统核心可以支持十多种文件系统类型。比如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
第3章Linux磁盘文件管理
本章要点
v Linux 支持的文件系统类型
v Linux 系统的目录结构
v Linux 常用命令
学习要求
v 熟悉L inux 支持的文件系统类型
v 了解ext2和ext3文件系统之间的异同
v 熟悉Linux 系统的目录结构
v 熟悉Linux 的常用命令
3.1 Linux 支持的文件系统类型
不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,以相互交换数据,通常操作系统都能支持多种类型的文件系统。例如Windows XP,系统默认或推荐采用的文件系统是NTFS,但同时也支持FAT32 或FAT16 文件系统。
Linux 内核支持是多种不同类型的文件系统,对于RedHat Linux,系统默认使用ext2、ext3 和swap 文件系统。
下面是对Linux 常用的文件系统类型。
3.1.1 ext2 与ext3文件系统
ext 是第一个专门为Linux 设计的文件系统类型,称为扩展文件系统,在Linux 发展的早期,起过重要的作用。由于在稳定性、速度和兼容性方面存在许多缺陷,现在已经很少使用。
ext2 是为解决ext文件系统存在的缺陷而设计的可扩展、高性能的文件系统,称为二级扩展文件系统。ext2 于1993 年发布,在速度和CPU 利用率上具有较突出的优势,是GNU/Linux 系统中标准的文件系统,支持256 个字节的长文件名,文件存取性能极好。
ext3 是ext2 的升级版本,兼容ext2,在ext2 的基础上增加了文件系统日志记录功能,称为日志式文件系统,是目前Linux 默认采用的文件系统。日志式文件系统在因断电或其他异常事件而停机重启后,操作系统会根据文件系统的日志,快速检测并回复文件系统到正常的状态,并可提高系统的恢复时间,提高数据的安全性。若对数据有较高的安全性要求,建议使用ext3 文件系统。
日志文件系统是目前Linux 文件系统发展的方向,除了RedHat Linux采用的ext3外,常用的还有reiserfs 和jfs 等日志文件系统。
3.1.2 swap 文件系统
swap 文件系统用于Linux的交换分区。在Linux 中,使用整个交换分区来提供虚拟内存,其分区大小一般应是系统物理内存的2倍。
在安装Linux操体系统时,就应该创建交换分区,它是Linux正常运行所必需的,其类型必须是swap。交换分区由操作系统自行管理。
3.1.3 vfat 文件系统
vfat 是Linux对DOS、Windows 系统下的FAT (包括FAT16 和 FAT32 )文件系统的一个统称。RedHat Linux支持FAT16 和FAT32 分区,也能在该系统中通过相关命令创建FAT分区。
3.1.4 NFS文件系统
NFS 即网络文件系统,用于在UNIX 系统间通过网络进行文件共享,用户可以将网络中NFS 服务器提供的共享目录,挂载到本地的文件目录中,从而实现访问NFS 文件系统中的内容。
3.1.5 ISO 9660文件系统
该文件系统是光盘所使用的标准文件系统,Linux 对该文件系统也有很好的支持,不仅能读取光盘和光盘ISO 映像文件,而且还支持在Linux环境中刻录光盘。
RedHat Linux 支持的文件系统很多,在此不一一介绍。
回答: 2021-12-02 14:59
本文将对Linux下常见的几种文件系统进行对比,包括ext2、ext3、ext4、XFS和Btrfs,希望能帮助大家更好的选择合适的文件系统。
内容来自于网上找的资料以及自己的一些经验,能力有限,错误在所难免,仅供参考
历史
文件系统
创建者
创建时间
最开始支持的平台
1994
IRIX, Linux, FreeBSD
Sun
2004
Solaris
众多开发者
2006
Linux
Oracle
2007
Linux
从创建时间可以看出他们所处的不同时代,因为Btrfs的实现借鉴自ZFS,所以这里也将ZFS列出来作为参考。
大小限制
文件系统
最大文件名长度
最大文件大小
最大分区大小
ext2
255 bytes
2 TB
16 TB
ext3
255 bytes
2 TB
16 TB
ext4
255 bytes
16 TB
1 EB
XFS
255 bytes
8 EB
8 EB
Btrfs
255 bytes
16 EB
16 EB
最大文件和分区大小受格式化分区时所采用的块大小(block size)所影响,块越大,所支持的最大文件和分区越大,也越可能浪费磁盘空间,上表列出的数据基于4K的块大小。
代码规模
从代码规模可以看出文件系统的功能丰富程度以及复杂度,下面列出的数据来自于kernel-4.1-rc8,只是简单的用wc -l来统计,没有过滤空行、注释等。
文件系统
源文件(.c)
头文件(.h)
ext2
8363
1016
ext3
16496
1567
ext4
44650
4522
XFS
89605
15091
Btrfs
105254
7933
Btrfs还在快速的开发过程中,代码行数可能还有比较大的变化
XFS和Btrfs都使用了B-tree
ext2
ext的优点是比较简单,文件比较少时性能较好,比较适合文件少的场景,主要缺点如下
inode的数量是固定不变的,在格式化分区的时候可以指定inode和数据块所占空间的比例,但一旦格式化好,后续就没法再改变了
当块大小为4K时,单个文件大小不能超过2TB,分区大小不能超过16TB(目前硬盘大小一般都只有几TB,所以也不是什么大问题,)
一个目录下最多只能有32000个子目录
由于目录里面存储的文件和子目录都是以线性方式来组织的,所以遍历目录效率不高,尤其当目录下文件个数达到10K以上规模的时候,速度会明显的变慢
当底层的磁盘分区空间变大时(使用LVM时很常见),ext2没法动态的扩展来使用增加的空间
没有日志(Journal)功能,所以数据的安全性不高
ext3
ext3在ext2的基础上实现了下面几个功能,其它的都保持不变,即ext2的缺点ext3也有
支持日志(Journal)功能,数据的安全性较ext2有很大的提高
当底层的分区空间变大时,ext3可以自动扩展来使用增加的空间
使用HTree来组织目录里面的文件和子目录,使目录下的文件和子目录数不再受性能限制(数量超过10K也不会有性能问题)
ext4
ext4借鉴了当前成熟的一些文件系统技术,在ext3上增加了一些功能,并且对性能做了一些改进,主要变化如下
当块大小为4K时,支持的最大文件和最大分区大小分别达到了16TB和1EB
不再受32000个子目录数的限制,支持不限数量的子目录个数
支持Extents,提高了大文件的操作性能
内部实现上支持一次分配多个数据块,较ext3的性能有所提高
支持延时分配(即支持fallocate函数)(fallocate是libc的函数,在不支持该功能的文件系统上,libc会创建一个占用磁盘空间文件)
支持在线快速扫描
支持在线碎片整理(单个文件或者整个分区)
日志(Journal)支持校验码(checksum),数据的安全性进一步提高
支持无日志(No Journaling)模式(ext3不支持该功能),这样就和ext2一样,消除了写日志对性能的影响
支持纳秒级的时间戳
记录了文件的创建时间,由于相关的应用层工具还不支持,所以只能通过debug的方式看到文件的创建时间
这里是一个查看文件/etc/fstab创建时间的例子(文件存在/dev/sda1分区上):
dev@ubuntu:~$ ls -i /etc/fstab
10747906 /etc/fstab
dev@ubuntu:~$ sudo debugfs -R 'stat <10747906>' /dev/sda1
Inode: 10747906 Type: regular Mode: 0644 Flags: 0x80000
Links: 1 Blockcount: 8
ctime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
atime: 0x55d1b014:8bcf7b44 -- Mon Aug 17 05:57:40 2015
mtime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
crtime: 0x5546dc54:6e6bc80c -- Sun May 3 22:41:24 2015
Size of extra inode fields: 28
EXTENTS: (0):46712815
Extents: 在最开始的ext2文件系统中,数据块都是一个一个单独管理的,inode中存有指向数据块的指针,文件占用了多少个数据块,inode里面就有多少个指针(多级),想象一下一个1G的文件,4K的块大小,那么需要(1024 * 1024)/4=262144个数据块,即需要262144个指针,创建文件的时候需要初始化这些指针,删除文件的时候需要回收这些指针,影响性能。现代的文件系统都支持Extents的功能,简单点说,Extent就是数据块的集合,以前一次分配一个数据块,现在可以一次分配一个Extent,里面包含很多数据块,同时inode里面只需要分配指向Extent的指针就可以了,从而大大减少了指针的数量和层级,提高了大文件操作的性能。
inode数量固定: 在ext2/3/4系列的文件系统中,inode的数量都是固定的,坏处是如果存很多小文件的话,有可能造成inode被用光,但磁盘还有很多剩余空间无法被使用的情况,不过它也有一个好处,就是一旦磁盘损坏,恢复起来要相对简单些,因为数据在磁盘上布局相对要固定简单。
xfs
和ext4相比,xfs不支持下面这些功能
不支持日志(Journal)校验码
不支持无日志(No Journaling)模式
不支持文件创建时间
不支持数据日志(data journal),只有元数据日志(metadata journal)
但xfs有下面这些特性
支持的最大文件和分区都达到了8EB
inode动态分配,从而不受inode数量的限制,再也不用担心存储大量小文件导致inode不够用的问题了。
更大的xattr(extended attributes)空间,ext2/3/4及btrfs都限制xattr的长度不能超过一个块(一般是4K),而xfs可以达到64K
内部采用Allocation groups机制,各个group之间没有依赖,支持并发操作,在多核环境的某些场景下性能表现不错
提供了原生的dump和restore工具,并且支持在线dump
btrfs
btrfs是一个和ZFS类似的文件系统,支持的功能非常多,据说将来会替换ext4成为Linux下的默认文件系统。这里列举一些重要的功能
支持的最大文件和分区达到了16EB
支持COW(copy on write)
针对小文件和SSD做了优化
inode动态分配
支持子分区(Subvolumes),子分区可以单独挂载
支持元数据和数据的校验(crc32)
支持压缩,去重
支持多个磁盘和分区,可动态扩展
支持LVM,RAID的功能(有了btrfs,就不再需要lvm和软raid了)
增量备份和恢复
支持快照
将ext2/3/4转换成btrfs(反过来不行)
btrfs最大的缺点就是由于其COW的实现方式,导致碎片化问题比较严重,不太适合频繁写的场景,比如数据库、虚拟机的磁盘文件等。不过大部分场合不需要担心,btrfs有在线的碎片整理工具。
如何选择
下表仅供参考
文件系统
适用场景
原因
ext2
U盘
U盘一般不会存很多文件,且U盘的文件在电脑上有备份,安全性要求没那么高,由于ext2不写日志(journal),所以写U盘性能比较好。当然由于ext2的兼容性没有fat好,目前大多数U盘格式还是用fat
ext3
对稳定性要求高的地方
有了ext4后,好像没什么原因还要用ext3,ext4现在的问题是出来时间不长,还需要一段时间变稳定
ext4
小文件较少
ext系列的文件系统都不支持inode动态分配,所以如果有大量小文件需要存储的话,不建议用ext4
xfs
小文件多或者需要大的xttr空间,如openstack swift将数据文件的元数据放在了xttr里面
xfs支持inode动态分配,所以不存在inode不够的情况,并且xttr的最大长度可以达到64K
btrfs
没有频繁的写操作,且需要btrfs的一些特性
btrfs虽然还不稳定,但支持众多的功能,如果你需要这些功能,且不会频繁的写文件,那么选择btrfs
另外,ext系列文件系统内部结构相对简单一些,出问题后恢复相对容易。
结束语
本篇没有比较它们的性能,在通常情况下,他们之间没有太大的性能差别,只有在特定的场景下,才能看出区别,如果对性能比较敏感,建议根据自己的使用场景来测试不同的文件系统,然后根据结果来选择。
相关问题推荐
使用命令:chmod 744 myflile就可以实现以上的操作。
关于CLOSE_WAIT和TIME_WAIT状态,服务器端都有可能出现,TIME_WAIT出现应该是短连接较多,需要通过修改内核参数解决,CLOSE_WAIT状态则是服务器程序可能有问题,服务器需要主动close,以及epoll多路复用模型中使用linger调整关闭等待时间分析解决这类问题,关...
chmod 命令:chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。1. 文字设定法:chmod [who] [+ | - | =] ...
Linux chattr 命令一般,chattr命令用于更改Linux文件上属性。以下是它的语法:chattr [ -RVf ] [ -v version ] [ mode ] files...下面是man手册对它的描述:chattr 改变一个Linux文件系统上的文件属性。一个通用格式是:+-=[aAcCdDeijsStTu]‘+’选项,将给...
命令格式cat [选项] [文件]...命令功能cat主要有三大功能:一次显示整个文件:cat filename从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.将几个文件合并为一个文件:cat file1 file2 > file命令参数-n 或 --number 对输出的所有行编号,...
shell的执行过程: 首先,脚本是从上至下从左至右执行每一行的语句的。 其次,当执行脚本时会进入一个新的shell,也成为nologin shell,在该shell下执行完成后,再返回执行前的shell。更加详细的讲解请楼主参考鸟哥linux网站中的bash shell章节有图能让您更...
学习linux为什么要学习Shell: 1、首先我们了解一下shell编程是什么,其实shell编程就是一坨linux命令的集合再加上一些控制语句而已 2、为什么要学习linux下的shell编程,我们平时在做运维工作时总会遇到一些重复的工作,如果我们会shell编程的话就可以将这些...
1.服务器一般情况下只有在进行项目部署或者是出现问题的时候才需要进行远程连接操作,在进行连接的时候我们一般都是使用的外部连接软件2.启动软件,点击快速连接,我们要选择连接的协议3.协议选择要然后填写服务器的IP地址和用户名,然后点击连接4.在通过验证...
1.正确的关机流程为:sysnc ? shutdown ? reboot ? halt;2.sync 将数据由内存同步到硬盘中。3.shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:4.shutdown –h 10 ‘This server will shutdown after 10 mins’ ...
一个典型的Linux发行版包括:Linux核心,一些GNU库和工具,命令行shell,图形界面的X窗口系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公包,编译器,文本编辑器到科学工具的应用软件。主流的Linux发行版:Ubuntu, DebianGNU/Linux ,Fedora,Gento...
linux的基础启动流程1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。4. 核心执行init程序并获...
点击运行或者win+R调出运行窗口,输入regedit打开Windows注册表在注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config找到AnnounceFlags 双击修改值为5保存1. 在注册表找到如下位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentC...
你可以经常去一些linux的论坛!~那里有许多知识的~你也可以下载一些自学教程!~当然是从入门开始了!~安装和使用的基本命令什么的!~和你学windows开始一样,由浅入深!~http://www.linux8.net/http://www.chinalinuxpub.com/http://linux.chinaitlab.com/Lin...
1、cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:cd /root/Docements # 切换到目录/root/Docementscd ./path # 切换到当前目录下的path...
目录/bin存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。/etc存放系统管理和配置文件/home存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /usr用于存放系统应用程序,比较重要的目录/u...