1. 计算机的文件系统

文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)
https://en.wikipedia.org/wiki/File_system
https://zh.wikipedia.org/wiki/文件系统
https://zh.wikipedia.org/wiki/文件系统列表
https://zh.wikipedia.org/wiki/文件系统的对比
这里能看到有上百种文件系统。不过普通人能接触到的并不多,下面会简单列出十多个通常会用到或可能用到,以及应该了解到的文件系统。对于微软的Windows系统和苹果的macOS系统,都有专用的文件系统,简单了解即可,不必深究。对于Linux系统,就要多了解一些相关概念,选择适合自己的文件系统。

2. 文件系统的分类

2.1 磁盘文件系统

磁盘文件系统是一种设计用来利用数据存储设备来保存计算机文件的文件系统,最常用的数据存储设备是磁盘驱动器,可以直接或者间接地连接到计算机上。例如:
Windows系的:FAT、exFAT、NTFS
macOS系的:HFS、HFS+、 APFS
Linux系的:ext2、ext3、ext4、ODS-5、btrfs、XFS、UFS、ZFS。

2.2 网络文件系统(NFS,Network File System)

网络文件系统 (Network File System, NFS) 是一种分布式文件系统协议 (Distributed file system, DFS),最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。
https://zh.wikipedia.org/wiki/网络文件系统
https://zh.wikipedia.org/wiki/分散式檔案系統
https://zh.wikipedia.org/wiki/9P

2.2.1 GFS

GFS专门为Google的核心数据即页面搜索的存储进行了优化。还有如下特点:

  • 数据使用大到若干G字节的大文件持续存储。
  • 而这些文件极少被删除、覆盖或者减小;通常只是进行添加或读取操作。
  • 集群中的节点是由廉价的“常用”计算机组成。
  • 集群中的节点失效是一种常态,而不是一种异常。

https://zh.wikipedia.org/wiki/Google檔案系統(Google File System, GFS)

2.2.2 NAS

性价比较高的网络存储方案,适合家用,小工作室组建,详见下文。

2.3 其他类型

数据库文件系统,闪存文件系统等。

2.4 存储架构

https://blog.51cto.com/xxr007/2287063
https://www.ibm.com/developerworks/cn/linux/l-linux-storage/index.html

2.4.1 DAS 直连存储

https://zh.wikipedia.org/wiki/直连式存储(Direct-Attached Storage, DAS)

2.4.2 SAN 区域网络存储 共享块设备

https://zhuanlan.zhihu.com/p/39362930
https://blog.51cto.com/superleedo/1889012
https://blog.csdn.net/reblue520/article/details/51277712
https://www.linuxidc.com/Linux/2019-02/157128.htm

2.4.3 NAS 网络附加存储 共享文件系统

https://zh.wikipedia.org/wiki/網路附加儲存(Network Attached Storage, NAS)
https://zh.wikipedia.org/wiki/RAID
NAS和传统的文件存储服务或直接存储设备(DAS)不同的地方,在于NAS设备上面的操作系统和软件只提供了数据存储、数据访问、以及相关的管理功能;此外,NAS设备也提供了不只一种文件传输协议。NAS系统通常有一个以上的硬盘,而且和传统的文件服务器一样,通常会把它们组成RAID来提供服务;有了NAS以后,网络上的其他服务器就可以不必再兼任文件服务器的功能。NAS的型式很多样化,可以是一个大量生产的嵌入式设备,也可以在一般的计算机上运行NAS的软件。
NAS用的是以文件为单位的通信协议,例如像是NFS(在UNIX系统上很常见)或是SMB(常用于Windows系统)。
NAS产品是真正即插即用产品。NAS设备一般支持多计算机平台,用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合UNIX/Windows NT局域网内。
NAS设备的物理位置同样是灵活的,它们可放置在工作组内,靠近数据中心的应用服务器,或者也可放在其他地点,通过物理链路与网络连接起来。无需应用服务器的干预,NAS设备允许用户在网络上存储数据,这样既可减小CPU的开销,也能显著改善网络的性能。
消费性PC所用的NAS操作系统:著名的开放源代码NAS系统例如FreeNAS、Openfiler等。FreeNAS基于FreeBSD系统[2],Openfiler基于Linux。
http://www.freenas.org/
https://en.wikipedia.org/wiki/List_of_NAS_manufacturers

家用DIY示例
【翼王】DIY一台高性能的MINI ITX文件服务器,还要能使用万兆网络
https://www.youtube.com/watch?v=iN_unArno0Y&t=88s
配置清单:https://youtu.be/iN_unArno0Y?t=926


3. 主流操作系统与文件系统

Linux系统兼容大部分的文件系统,所有主流文件系统。
FAT32文件系统兼容所有桌面主流操作系统。移动存储U盘会用于多种操作系统,所以通常会使用FAT32模式。主要缺点是不支持大于4Gb的文件,分区不能超过8Tb。
ExFAT,微软2006年推出针对移动闪存盘的文件系统,解决FAT32不支持大文件的缺点,算是FAT32的64位版本,最大文件和分区上限都增加到128Pb。
https://en.wikipedia.org/wiki/ExFAT
Linux系统支持ExFAT需要安装:https://github.com/relan/exfat
http://www.ruanyifeng.com/blog/2018/10/exfat.html

3.1 Microsoft Windows

  • DOS时代 FAT16
  • Windows98时代 FAT32
  • WindowsXP到现在 NTFS

https://zh.wikipedia.org/wiki/NTFS
https://docs.microsoft.com/zh-cn/windows/desktop/FileIO/filesystem-functionality-comparison
https://events.static.linuxfound.org/images/stories/pdf/lceu11_munegowda_s.pdf

3.2 Apple macOS

选择苹果的好处,不用选择,也没的选择。
macOS HFS(~-1998) > HFS+(1998-2016) > APFS(2016-~)
https://zh.wikipedia.org/wiki/分层文件系统(Hierarchical File System, HFS)
https://zh.wikipedia.org/wiki/苹果文件系统

3.3 Linux系统的文件系统

https://zh.wikipedia.org/wiki/Ext4
https://zh.wikipedia.org/wiki/Btrfs
https://zh.wikipedia.org/wiki/ZFS
https://zh.wikipedia.org/wiki/XFS
https://wiki.archlinux.org/index.php/File_Systems
https://zh.wikipedia.org/wiki/邏輯捲軸管理員(Logical Volume Manager, LVM)

3.3.1 ext3,ext4,xfs和btrfs文件系统性能对比

原文链接:http://www.ilsistemista.net/index.php/linux-a-unix/6-linux-filesystems-benchmarked-ext3-vs-ext4-vs-xfs-vs-btrfs.html?start=1
中文翻译:https://cloud.tencent.com/developer/article/1084858

3.3.2 多款Linux默认使用的主要文件系统对比。

Linux是开放源代码的自由操作系统,支持最多的文件系统。目前主流的是ext4文件系统。搜索很多页面都有提到的btrfs可能会替代ext4。
CentOS是RedHat的社区版本,被很多中小企业使用,从CentOS7开始,使用XFS作为默认的文件系统,LVM +XFS模式。https://www.zhihu.com/question/24413471

历史 大小限制 代码规模(2017-2)
文件系统 创建者 创建时间 最开始支持的平台 最大文件名长度 最大文件 最大分区 最多子目录 源文件(.c) 头文件(.h)
ext2 Rémy Card 1993 Linux,Hurd 255 bytes 2 TB 16 TB 32000个 8363 1016
ext3 Dr. Stephen C. Tweedie 1999 Linux 255 bytes 2 TB 16 TB 32000个 16496 1567
ext4 众多开发者 2006 Linux 255 bytes 16 TB 1 EB 64000个 44650 4522
XFS SGI 1994 IRIX, Linux, FreeBSD 255 bytes 8 EB 8 EB   89605 15091
Btrfs Oracle 2007 Linux 255 bytes 16 EB 16 EB   105254 7933

 

3.3.3 Linux主流文件系统特点

请看原文:https://segmentfault.com/a/1190000008481493 这里只摘录少部分特有的。
Ext4,已经被大部分Linux发行版本接受,成为现在的主流文件系统。
inode的数量都是固定的,好处是一旦磁盘损坏,恢复起来要相对简单些,因为数据在磁盘上布局相对要固定简单。坏处是如果存很多小文件的话,有可能造成inode被用光,但磁盘还有很多剩余空间无法被使用的情况。
XFS,目前的企业应用,RedHat系的默认文件系统。
内部采用Allocation groups机制,各个group之间没有依赖,支持并发操作,在多核环境的某些场景下性能表现不错。提供了原生的dump和restore工具,并且支持在线dump
Btrfs,2014年推出稳定版本,不过一直被指性能太差。
功能全面,针对小文件和SSD做了优化,支持子分区(Subvolumes),子分区可以单独挂载,支持子分区(Subvolumes),子分区可以单独挂载。

4. 逻辑卷管理 (Logical Volume Manager, LVM)

是Linux环境下对磁盘分区进行管理的一种机制,用户在无需停机的情况下可以方便地调整各个分区大小。它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。

4.1 LVM的基本组成块(building blocks)如下:

物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。 Think of physical volumes as big building blocks which can be used to build your hard drive.
卷组Volume group (VG):将一组物理卷收集为一个管理单元。Group of physical volumes that are used as storage volume (as one disk). They contain logical volumes. Think of volume groups as hard drives.
逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。A "virtual/logical partition" that resides in a volume group and is composed of physical extents. Think of logical volumes as normal partitions.
物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)。A small part of a disk (usually 4MB) that can be assigned to a logical Volume. Think of physical extents as parts of disks that can be allocated to any partition.

4.2 LVM的优点

  1. 比起正常的硬盘分区管理,LVM更富于弹性:
  2. 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
  3. 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
  4. 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
  5. 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.
  6. 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
  7. 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
  8. 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

这些优点使得LVM对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍。

4.3 LVM的缺点

在系统设置时需要更复杂的额外步骤。
更多信息,及使用指南:
https://en.wikipedia.org/wiki/Logical_volume_management
https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)
https://wiki.archlinux.org/index.php/Installation_guide
https://wiki.archlinux.org/index.php/LVM
https://wiki.archlinux.org/index.php/RAID
http://cn.linux.vbird.org/linux_basic/0420quota_3.php
https://wiki.ubuntu.com/Lvm
https://linux.cn/article-3218-1.html

5. 总结:

Windows操作系统用户使用NTFS文件系统;MacOS操作系统用户使用 APFS文件系统;这些专有系统默认的文件系统,没的选择。
移动存储U盘,TF卡等闪存介质,使用ExFAT格式。启动U盘通常使用兼容性更好的FAT32格式。也可以给U盘分区,不同的分区使用不同的格式。
Linux桌面系统目前主流使用Ext4文件系统;RedHat及CentOS的企业应用则默认使用 XFS文件系统,LVM+XFS模式。同时可以关注Btrfs的发展。