常见文件系统的格式

时间:2022-08-21 16:06:41

写这篇博客的原因是,今天买了一块移动硬盘(NTFS格式的),然后发现,在Mac OS X下,硬盘里的文件是只读的,不能像里面写入数据,于是就整理了一下几种不同文件系统的区别。

本文的大部分内容来源于*,由笔者进行整理,由于知识水平有限,有些理解可能有偏差,具体以原文为准(文中已标记了出处),本文内容仅供参考

文件系统的概念

wikipedia文件系统

  文件系统(File System)是文件管理系统的简称,根据*的描述,文件系统是用来组织数据在存储介质上的存储方式以及检索方式的。没有文件系统,信息在存储介质上会是一个很大的信息块,没法知道一条信息什么时候会结束,也没法知道信息在什么时候开始,对信息的管理就会十分的麻烦。

  文件系统的种类有很多,每一种文件系统的结构,逻辑,存取速度,灵活性,安全性,大小,等等都不一样。

  文件系统可以被使用在很多不同的存储设备(storage devices)上,这些存储设备使用不同的媒介(media),比如磁带,移动硬盘,闪存等,有时候,计算机的主存(RAM)甚至会创建一个临时的文件系统来临时使用。

  总之,文件系统的类别有很多,也很复杂,又想弄明白文件系统的原理,需要学习的东西有很多,这里只介绍一些平时在使用不同的操作系统时可能用到的一些知识,几种不同系统下的常见文件系统格式。

常见文件系统的格式

windows系统常见的文件系统

  1. FAT

    wikipedia FAT文件系统

      FAT(File Allocation Table)文件系统诞生于1977年,它最初是为软盘设计的文件系统,但是后来随着微软推出dos和win 9x系统,FAT文件系统经过适配被逐渐用到了硬盘上,并且在那时的20年中,一直是主流的文件系统。

      后来随着硬件技术的进步,硬盘的容量也越来越大,这种文件格式逐渐被扩展了,出现了FAT12,FAT16,FAT32等文件系统,甚至后来还出现了FAT64的文件系统。

      在今天,FAT已经不是windows系统的主流文件系统了,但是它在软盘,闪存(u盘),以及很多嵌入式设备上还是很常见的。

      详细的情况wikipedia上有几张表,相关信息都可查看到。
      目前最通用的的是FAT32,很多U盘上都是FAT32格式,关于FAT32文件系统,以下几点值得注意:

    • 单个文件最大为4G
    • 最大文件数量268,435,437
    • 分区最大容量8TB
    • 可在多种操作系统读写

    有时候,我们向U盘拷贝大文件时,会发现拷不进去,实际上就是因为这个U盘是FAT32格式的。

  2. NTFS

      NTFS全称是New Technology File System,它是一种比FAT32功能更加强大的文件系统。
      从windows 2000之后的windows系统的默认文件系统都是NTFS,而且这些windows系统只能够安装在NTFS格式的磁盘上。
    NTFS具有以下特点:

    • 理论上最大文件尺寸可达16EB-1KB,实际上有16TB-64KB(1EB = 1024PB 1PB = 1024TB,至于理论和实际为什么差这么多,没有进行过深入研究,有可能是现在的科技还不足以制造出这么大的磁盘的)
    • 最大文件数量可达232-1个
    • 操作系统支持大部分windows系统,Unix/Linux系统,Mac OS(在Mac OS 10.4+系统上,NTFS格式是只读的,即在Mac系统下,你只能从NTFS格式的磁盘上读取数据,而不能写入数据)
    • NTFS系统是一个日志性的文件系统,系统中对文件的操作都可以被记录下来,当系统崩溃之后,利用日志功能可以修复数据

  由于在Mac系统下,ntfs是只读的,所以要想在Mac下想ntfs格式的硬盘写入数据,要装一个插件Paragon NTFS,但据说不是太稳定。
3. ExtFAT

   ExFAT(Extended File Allocation Table)又叫FAT64,看名字就知道它是对FAT文件系统的扩展。
  E下FAT是虽然也是微软开发的文件系统,但说它是windows下的文件系统并不合适,它是专门为闪存盘设计的文件系统,单个文件突破了4G的限制,而且分区的最大容量可达64ZB(比EB大一级的),建议512TB。
  ExFAT在windows,Linux以及Mac系统上,都可以读写,作为U盘或者是移动硬盘的格式还是比较合适的。

Mac OS系统常见的文件系统

  1. HFS/HFS+
      HFS全称叫分层文件系统(Hierarchical File System,HFS),诞生于1985年,最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。
      HFS+是一个HFS的改进版本,支持更大的文件,并用Unicode来命名文件或文件夹,代替了Mac OS Roman或其他一些字符集。
      HFS+的最大文件尺寸可以达到8EB,文件数量可以达到232 - 1个。
       由于这两种文件格式是苹果专有的文件系统,所以在windows系统下,是看不到HFS分区的。

Linux系统常见的文件系统

   这几种文件系统wikipedia上资料也不多,所以就直接拷过来了。

  1. Ext2
      wikipedia英文:https://en.wikipedia.org/wiki/Ext2
      wikipedia中文:https://zh.wikipedia.org/wiki/Ext2

      第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由RémyCard设计,用以代替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等。

  2. Ext3
      wikipedia英文:https://en.wikipedia.org/wiki/Ext3
      wikipedia中文:https://zh.wikipedia.org/wiki/Ext3

      第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统。它是很多Linux发行版的默认文件系统。Stephen Tweedie在1999年2月的内核邮件列表[2]中,最早显示了他使用扩展的ext2,该文件系统从2.4.15版本的内核开始,合并到内核主线中[3]。
      它的性能(速度)不如它的竞争对手,例如JFS2,ReiserFS和XFS,但它具有重要的优势,那就是它允许在适当的时候从流行的ext2文件系统升级,而无需备份和恢复数据;除此之外,它还具有比ReiserFS和XFS更低的的CPU使用率。
      尽管Ext3相对于Ext2有了不少的优势,但是它还是有一些劣势:
    (1)ext3会在删除文件时把文件的节点(inode)中的块指标清除。这样做可以在unclean载入文件系统后,重放日志时,可以减少对文件系统的访问。但也同样也增加了文件在反删除上面的困难。用户唯一的补救是在硬盘中捞取数据,并且要知道文件的起始到结束的块指标。尽管提供了比 ext2在删除文件上稍微高一些的安全性,却也无可避免的带来了不便之处。
    (2)Ext3不支持透明压缩(Ext2以非官方补丁支持)。
    (3)大小限制,见下表。

    块尺寸 最大文件尺寸 最大文件系统尺寸
    1KB 16GB 2TB
    2KB 256GB 8TB
    4KB 2GB 16TB
    8KB 16GB 32TB

    (4)Ext3在写入日志时,并不做校验和。如果barrier=1没有作为加载参数(在文件/etc/fstab),并且如果硬件在无次序的写入缓存,在崩溃时会严重损坏文件系统(该选项在大多数流行的Linux发行版中都没有被启用,所以大多数发行版的处境都很危险。)

3 . Ext4
  wikipedia英文:https://en.wikipedia.org/wiki/Ext4
  wikipedia中文:https://zh.wikipedia.org/wiki/Ext4
Ext4具有以下特点

  • 大型文件系统
      ext4文件系统可支持最高1 Exbibyte的分区[6]与最大16 Tebibyte的文件。
  • Extents
      ext4引进了Extent文件存储方式,以替换ext2/3使用的block mapping方式。Extent指的是一连串的连续实体block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中最高可达128MB[1]。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree方式被索引。
  • 向下兼容
      ext4向下兼容于ext3与ext2,因此可以将ext3和ext2的文件系统挂载为ext4分区。由于某些ext4的新功能可以直接运用在ext3和ext2上,直接挂载即可提升少许性能。
    ext3文件系统可以部分向上兼容于ext4(也就是说ext4文件系统可以被挂载为ext3分区)。然而若是使用到Extent技术的ext4将无法被挂载为ext3。
  • 预留空间
      ext4允许对一文件预先保留磁盘空间。目前大多数文件系统做到这点的方式是直接产生一个填满0的文件;ext4和XFS可以使用Linux核心中的一个新的系统调用“fallocate()”获取足够的预留空间。
  • 延迟获取空间
      ext4使用一种称为allocate-on-flush的方式,可以在数据将被写入磁盘(sync)前才开始获取空间;大多数文件系统会在之前便获取需要的空间。这种方式可以增加性能并减少文件分散程度。
  • 突破32000子目录限制
      ext3的一个目录下最多只能有32000个子目录。ext4的子目录最高可达64000,且使用“dir_nlink”功能后可以达到更高(虽然父目录的link count会停止增加)。为了避免性能受到大量目录的影响,ext4默认打开Htree(一种特殊的B树)索引功能。该功能已经实现于Linux核心2.6.23版。
  • 日志校验和
      Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。日志校验和的技术源于威斯康辛大学的一篇名为IRON File Systems的研究论文(见第六节 transaction checksums校验和处理)[7]
  • 在线磁盘整理
      对于在线磁盘整理工具有许多草案,但是这些草案都没有被包含在主流的内核当中。即使Ext4包含有许多避免磁盘碎片的技术,但是磁盘碎片还是难免会在一个长时间使用过的文件系统中存在。Ext4将会有一个具有磁盘整理功能的工具[8]。
  • 快速文件系统检查
      Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。这个特性已经在2.6.24版本的Linux内核中实现。