ext2:早期linux中常用的文件系统
ext3:ext2的升级版,带日志功能
RAMFS:内存文件系统,速度很快
NFS:网络文件系统,由SUN发明,主要用于远程文件共享
MS-DOS:MS-DOS文件系统
VFAT:Windows95/98操作系统采用的文件系统
FAT:WindowsXP操作系统采用的文件系统
NTFS:WindowsNT/XP操作系统采用的文件系统
HPFS:OS/2操作系统采用的文件系统
PROC:虚拟的进程文件系统
ISO9660:大部分光盘所采用的文件系统
ufsSun:OS所采用的文件系统
NCPFS:Novell服务器所采用的文件系统
SMBFS:Samba的共享文件系统
XFS:由SGI开发的先进的日志文件系统,支持超大容量文件
JFS:IBM的AIX使用的日志文件系统
ReiserFS:基于平衡树结构的文件系统
udf:可擦写的数据光盘文件系统
查看 Linux 支持的文件系统有哪些,可以察看底这个目录:
[root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
系统目前已加载到内存中支持的文件系统则有:
[root@www ~]# cat /proc/filesystems
查看各分区的文件系统:
[root@www ~]# df -lhT
查看文件系统参数
[root@www ~]# tune2fs -l /dev/sda2
ext2
ext2文件系统的数据块大小一般为1024B、2048B或4096B
ext2文件系统采用的索引节点(inode):索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。
e.g:假设数据块大小为1024B,利用12个直接指针,可以保存最大为12KB的文件,当文件超过12KB时,则要利用单级间接指针,该指针指向的数据块保存有一组数据块指针,这些指针依次指向包含有实际数据的数据块,假如每个指针占用4B,则每个单级指针数据块可保存1024/4=256个数据指针,因此利用直接指针和单级间接指针可保存1024*12+1024*256=268KB的文件。
当文件超过268KB时,再利用二级间接指针,直到使用三级间接指针。利用直接指针、单级间接指针、二级间接指针、三级间接指针可保存的最大文件大小为:1024*12+1024*256+1024*256*256+1024*256*256*256=16843020KB,约16GB,若数据块大小为2048B,指针占4B,则最大文件大小为:2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792KB约268GB
若数据块大小为4096B,指针占4B,则最大文件大小为:4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744KB,约4TB
注:ext2文件系统最大文件名长度:255个字符
ext2文件系统的缺点:
ext2在写入文件内容的同时并没有同时写入文件meta-data,其工作顺序是先写入文件的内容,然后等空闲时候才写入文件的meta-data。若发生意外,则文件系统就会处于不一致状态。在重新启动系统的时候,linux会启动fsk(filesystemcheck)的程序,扫描整个文件系统并试图修复,但不提供保证。
ext3
ext3基于ext2的代码,所以磁盘格式与ext2相同,使用相同的元数据。
ext2文件系统无损转化为ext3文件系统:
[root@www ~]# tune2fs -j /dev/sda2
日志块设备(Journalingblockdevicelayer,JBD)完成ext3文件系统日志功能。JBD不是ext3文件系统所特有的,它的设计目标是为了向一个块设备添加日志功能。当一个文件修改执行时,ext3文件系统代码将通知JBD,称为一个事务(transaction)。发生意外时,日志功能具有的重放功能,能重新执行中断的事务。
日志中的3种数据模式:
1)data=writeback:不处理任何形式的日志数据,给用户整体上的最高性能
2)data=odered:只记录元数据日志,但将元数据和数据组成一个单元称为事务(transaction)。此模式保持所句句的可靠性与文件系统的一致性,性能远低于data=writeback模式,但比data=journal模式快
3)data=journal:提供完整的数据及元数据日志,所有新数据首先被写入日志,然后才被定位。意外发生过后,日志可以被重放,将数据与元数据带回一致状态。这种模式整体性能最慢,但数据需要从磁盘读取和写入磁盘时却是3种模式中最快的。
ext3文件系统最大文件名长度:255个字符
ext3文件系统的优点:可用性、数据完整性、速度、兼容性
ext3与ext4的主要区别
Linux kernel自2.6.28开始正式支持新的文件系统 Ext4, Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构,而不仅仅像Ext3对Ext2那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
1.与Ext3兼容。执行若干条命令,就能从Ext3在线迁移到Ext4,而无须重新格式化磁盘或重新安装系统。原有Ext3数据结构照样保留,Ext4作用于新数据,当然,整个文件系统因此也就获得了Ext4所支持的更大容量。
2.更大的文件系统和更大的文件。较之Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及16TB 的文件。
3.无限数量的子目录。Ext3目前只支持32,000个子目录,而Ext4支持无限数量的子目录。
4.Extents。Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在Ext3中要建立25,600个数据块(每个数据块大小为 4KB)的映射表。而Ext4引入了现代文件系统中流行的extents概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的25,600个数据块中”,提高了不少效率。
5.多块分配。当 写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6.延迟分配。Ext3的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7.快速 fsck。以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
8.日志校验。日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9.“无日志”(No Journaling)模式。日志总归有一些开销,Ext4允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10.在线碎片整理。尽管延迟分配、多块分配和extents能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。
11.inode 相关特性。Ext4 支持更大的inode,较之Ext3默认的inode大小128字节,Ext4为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或inode版本),默认inode大小为256字节。Ext4 还支持快速扩展属性(fast extended attributes)和inode保留(inodes reservation)。
12.持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4在文件系统层面实现了持久预分配并提供相应的API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
13.默认启用 barrier。磁 盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写commit记录,若commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4默认启用barrier,只有当barrier之前的数据全部写入磁盘,才能写 barrier之后的数据。(可通过“mount -o barrier=0″命令禁用该特性。)
Linux 的系统都是透过一个名为 Virtual Filesystem Switch (VFS)的核心功能去读取 filesystem 的