文件系统
文件系统是一种存储和组织计算机数据的方法,它使得对其存取和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种访问资料的界面而已,实际的数据可能是通过网络协议(如NFS、SMB、9P等)提供的或者暂存于内存上,甚至可能根本沒有对应的文件(如proc文件系统)。
严格地说,文件系统是一套实现了数据的存储、分级组织、存取和获取等操作的抽象数据类型(Abstract data type)。
磁盘文件系统
磁盘文件系统是一种设计用来利用数据存储设备来保存计算机文件的文件系统,最常用的数据存储设备是磁盘驱动器,可以直接或者间接地连接到计算机上。例如:檔案配置表(FAT12、FAT16、FAT32、exFAT)、New Technology File System、分層檔案系統HFS、HFS Plus、延伸檔案系統(ext1、ext2、ext3、ext4)、ODS、btrfs、XFS、UFS、ZFS。有些文件系统是行程文件系统(也有译作日志文件系统)或者追踪文件系统
光碟
闪存文件系统
闪存文件系统是一种设计用来在闪存上储存文件的文件系统。随着移动设备的普及和闪存容量的增加,这类文件系统越来越流行。
尽管磁盘文件系统也能在闪存上使用,但闪存文件系统是闪存设备的首选,理由如下:
- 擦除区块:闪存的区块在重新写入前必须先进行擦除。擦除区块会占用相当可观的时间。因此,在设备空闲的时候擦除未使用的区块有助于提高速度,而写入数据时也可以优先使用已经擦除的区块。
- 随机访问:由于在磁盘上寻址有很大的延迟,磁盘文件系统有针对寻址的优化,以尽量避免寻址。但闪存没有寻址延迟。
- 写入平衡(Wear levelling):闪存中经常写入的区块往往容易损坏。闪存文件系统的设计可以使数据均匀地写到整个设备。
日志文件系统具有闪存文件系统需要的特性,这类文件系统包括JFFS2和YAFFS。也有为了避免日志频繁写入而导致闪存寿命衰减的非日志文件系统,如exFAT。
数据库文件系统
文件管理方面的一个新概念是一种基于数据库的文件系统的概念。不再(或者不仅仅)使用分层结构管理,文件按照他们的特征进行区分,如文件类型、专题、作者或者亚数据进行区分。于是文件检索就可以按照SQL风格甚至自然语言风格进行。
网络文件系统
网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制。
DOS / Microsoft Windows支援的檔案系统
| Windows | FAT12/FAT16 | FAT32/VFAT | FAT64/exFAT | NTFS |
| Windows 3.x或更早(MS-DOS 6.22)(PC-DOS 7.0) | 可讀/可寫 | 不支援 | 不支援 | 不支援 |
| Windows 95 | 可讀/可寫 | 不支援 | 不支援 | 不支援 |
| Windows 95(OSR2以後)Windows 98(含SE)ME | 可讀/可寫 | 可讀/可寫 | 不支援 | 不支援 |
| Windows NT 4.0 及以前 | 可讀/可寫 | 不支援 | 不支援 | 可讀/可寫 |
| 2000Windows XPWindows VistaServer 2003Server 2008 (R2)Windows 7Windows 8Server 2012 (R2)Windows 8.1 Windows 10 | 可讀/可寫 | 可讀/可寫 | 可讀/可寫 | 可讀/可寫 |
| Windows CE | 可讀/可寫 | 可讀/可寫 | 可讀/可寫 | 不支援 |
Linux支援的檔案系統
随着Linux的不断发展,它所支持的文件系统也在迅速扩充,Linux系统核心可以支持十多种文件系统类型:Btrfs、JFS、ReiserFS、exFAT、ext、ext2、ext3、ext4、XFS、ISO 9660、Minix、MSDOS、UMSDOS、VFAT、NTFS(Linux Kernel內建的NTFS驅動程式,寫入功能不穩定)、HPFS、NFS、SMB、SysV、PROC等。
注意:部分Linux发行版的Kernel預設不編譯Kernel內建的NTFS文件系统支援,常見的在Linux下讀寫NTFS的解决方法是安装NTFS-3G或ufsd等NTFS驱动程序。部分Linux发行版对NTFS的支援度並不高。
macOS(Mac OS X)的文件系统
从1998年到2016年间使用HFS+,再早採用HFS。从2016年发布的macOS Sierra起,使用苹果文件系统(APFS)。
FAT16
优点:兼容性最好,某些数码设备可能对FAT32和NTFS格式的存储卡支持不太好,因此只能使用FAT16
缺点:最大仅支持2GB分区,空间浪费大
备注:赶紧看看U盘是不是FAT格式,如果是就改用FAT32吧
FAT32(vFAT)
优点:兼容性好
缺点:单个文件不能超过4GB,不支持512MB以下容量的U盘
备注:如果U盘容量达8GB以上,发现4GB文件拷不进去的话,可以考虑换用NTFS或ExFAT格式了
http://elm-chan.org/docs/fat_e.html
ExFAT
优点:专为闪存和U盘设计,空间浪费小
http://elm-chan.org/docs/exfat_e.html
NTFS
优点:兼容性好,支持任意大小的U盘
缺点:会缩短闪存寿命
备注:反正U盘超便宜,不怕坏的朋友们使用NTFS其实挺好
分布式存储
什么是分布式存储
在开始介绍分布式存储之前,先了解一下,非分布式的存储方案。
在单机时代,将文件直接存储在服务部署的服务器上——
- 直连存储(DAS):存储和数据直连,拓展性、灵活性差。
为了扩展,将文件和服务分离,通过网络连接——
- 中心化存储(NAS、SAN):设备类型丰富,通过网络互连,具有一定的拓展性,但是受到控制器能力限制,拓展能力有限。同时,设备到了生命周期要进行更换,数据迁移需要耗费大量的时间和精力。
分布式存储:通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。
分布式存储的优势
可扩展:分布式存储系统可以扩展到数百甚至数千个这样的集群大小,并且系统的整体性能可以线性增长。
高可用性:在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性
低成本:分布式存储系统的自动容错和自动负载平衡允许在成本较低服务器上构建分布式存储系统。此外,线性可扩展性还能够增加和降低服务器的成本。
弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行
主流分布式文件存储系统
目前主流的分布式文件系统有:GFS、HDFS、Ceph、Lustre、MogileFS、MooseFS、FastDFS、TFS、GridFS等。
1、GFS(Google File System)
Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统。尽管Google公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。
2、HDFS(Hadoop Distributed File System)
HDFS(Hadoop Distributed File System)是 Hadoop 项目的一个子项目。是 Hadoop 的核心组件之一, Hadoop 非常适于存储大型数据 (比如 TB 和 PB),其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
3、TFS(Taobao FileSystem)
TFS是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器 集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化 了文件的访问流程,一定程度上为TFS提供了良好的读写性能。
4、Lustre
Lustre是是由SUN公司开发和维护的集群文件系统,它不具备数据安全特性,单盘故障会导致系统失效,需要配合RAID来使用(感谢评论区老哥指出错误)。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数据量存储系统。目前Lustre已经运用在一些领域,例如HP SFS产品等。
5、 MooseFS
MooseFS是一款相对小众的分布式文件系统,不需要修改上层应用接口即可直接使用,支持FUSE的操作方式,部署简单并提供Web界面的方式进行管理与监控,同其他分布式操作系统一样,支持在线扩容,并进行横向扩展。MooseFS还具有可找回误操作删除的文件,相当于一个回收站,方便业务进行定制;同时MooseFS对于海量小文件的读写要比大文件读写的效率高的多。
但MooseFS的缺点同样明显,MFS的主备架构情况类似于MySQL的主从复制,从可以扩展,主却不容易扩展。短期的对策就是按照业务来做切分,随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大。并且对于其单点问题官方自带的是把数据信息从Master Server同步到Metalogger Server上,Master Server一旦出问题Metalogger Server可以恢复升级为Master Server,但是需要恢复时间。目前,也可以通过第三方的高可用方案(heartbeat+drbd+moosefs)来解决 Master Server 的单点问题。
6、MogileFS
由memcahed的开发公司danga一款perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等。MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上。
7. FastDFS
是一款类似Google FS的开源分布式文件系统,是纯C语言开发的。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
8、GlusterFS
开源分布式横向扩展文件系统,可以根据存储需求快速调配存储,内含丰富的自动故障转移功能,且摈弃集中元数据服务器的思想。适用于数据密集型任务的可扩展网络文件系统,具有可扩展性、高性能、高可用性等特点。gluster于2011年10月7日被Red Hat收购。
9、 GridFS
MongoDB是知名的NoSQL数据库,GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储。文件在GridFS中会按4MB为单位进行分块存储。