本文首发于http://oliveryang.net,转载时请包含原文或者作者网站链接。

1. 什么是文件系统

直接引用来自维基百科文件系统的定义,

A file system is a set of abstract data types that are implemented for the storage,
hierarchical organization, manipulation, navigation, access, and retrieval of data.

文件系统就是一套抽象的数据类型,实现了数据的存储,层级组织,操作,浏览,访问和取回。

2. 文件系统分类

Linux恐怕是内置支持文件系统最多的操作系统了。Linux v4.4源代码里fs路径下的文件系统目录多达71个,

$ pwd
/ws/linux/fs
$ ls -dl */ | wc -l
71

2.1 文件系统的架构

按照文件系统的架构,文件系统大致上可以分为以下几类,

2.1.1 Local file systems

即本地文件系统。典型的例子有Ext4, Btrfs, XFS, ZFS等。

通常是在主机本地可见的存储介质上才能工作的文件系统。此类文件系统本身没有网络访问的能力。因此,如需访问远程
介质,需要接触底层协议(如iSCSI, Fiber Channel)才能管理和访问数据。

Linux上的本地文件系统很容易支持POSIX语义的文件API。

2.1.2 Special purpose file systems

即特殊目的文件系统。

  • Pseudo and virtual file systems

    实现操作系统内核的状态查询,管理控制,和文件抽象功能。例如,procfs, sysfs,tmpfs, debugfs, devfs。实现某种开发框架。例如FUSE(Filesystem in Userspace)提供了一种在用户空间开发文件系统的通用机制。此外,由于近来Docker为代表的容器技术的兴起,使verlayFS,Aufs这类支持对底层多个本地文件系统做union mount的文件系统技术得以广泛应用。

  • Cryptographic file systems

    专门用于文件系统级别的数据安全加密用途。例如,eCryptfs, SSHFS。

2.1.3 Network file systems

即网络文件系统。例如,NFS,CIFS(SMB)。

此类文件系统被设计为client-server结构。客户端的文件系统通过提供远程文件的访问协议,来访问服务端的文件系统。

网络文件系统一般很难支持完整的POSIX语义的文件访问。例如NFS文件的客户端可能缓存文件,导致数据在其它客户端或者服务端不同步的问题。另外,NFSv3及以前版本是无状态的协议,并不支持POSIX fcntl locks。NFS的文件锁是通过Network Lock Manager (lockd后台进程) 这个独立程序实现的。直到NFSv4改为有状态协议,才实现了文件锁,不需要NLM协同工作了。

针对本地文件系统开发和测试的应用,在网络文件系统上运行可能会有不同的行为,需要特别的处理。

NAS(Network Attach Storage)存储是外置存储设备的一大类,其中NFS和CIFS是支持的主要访问协议。

2.1.4 Clustered file systemas

即集群文件系统。引用集群文件系统在维基百科的定义如下,

A clustered file system is a file system which is shared by being simultaneously mounted
on multiple servers.

同一文件系统能否在多个主机上被同时挂载使用是集群文件系统的本质。根据架构上的差异,集群文件系统又被分为以下两大类,

  • Shared-disk file systems

    即共享磁盘的文件系统。这架构的Block级别的访问是集中共享式的。所有文件系统的主机通过同步和锁原语访问同一个Block Storage。

    通常,块存储的共享是通过SAN(Storage Area Network)来实现共享的。

    这一领域代表性的实现有,IBM的GPFS,Oracle的OCFS,中科蓝鲸的BWFS,Red Hat的GFS(Global File System)。

  • Distributed file systems

    即分布式文件系统。名字有些混淆。但和Share-disk类型的最大区别的,分布式文件系统的Block Storage不需要共享。每个节点都拥有自己私有的Block Storage。但文件系统集群对使用者依旧提供统一的视图,即全局的命名空间(Global Name Space)。

    分布式文件系统可以利用廉价的DAS(Direct Attach Storage)来架构一个高性能的文件集群。特别是当万兆以太网和Flash/SSD技术在数据中心变得越来越普及,DAS做分布式文件系统的优势越来越明显。

    典型的分布式文件系统有Apache HDFS,Google的GFS(Google File System), Redhat的Ceph和Glusterfs,Lustre,微软的DFS, EMC Isilon的OneFS。

2.2 存储介质和使用场景

按照存储介质和使用场景的不同,文件系统也可以划分为以下类型,

  • Disk file systems

    基于磁盘(HDD)特性设计的文件系统。例如,Ext4, UFS, XFS

  • Optical discs file systems

    基于光盘特性设计的文件系统。例如,ISO 9660, UDF(Universal Disk Format)。

  • Flash file systems

    基于Flash/SSD特性的文件系统。例如,JFFS2, YAFFS, F2FS. 传统的磁盘文件系统也可用于SSD,但是由于SSD的一些独有特性,并不能发挥出SSD的性能优势。因此,这类文件系统一般针对SSD的硬件特性,GC,Wear Leveling等做了特别的优化和设计上的考虑。

  • Tape file systems

    基于磁带特性设计的文件系统。例如,LTFS(Linear Tape File System)。

  • Database file systems

    为数据库使用场景特别优化的文件系统。例如,DBFS(Oracle Database file system)。

  • Transactional file systems

    为支持多个文件操作的原子性设计的文件系统。例如, Transactional NTFS,目前多为研究实验性质。

以上内容在互联网上已有不少论述,在此不一一赘述

转载于:https://www.cnblogs.com/ainima/p/6330780.html

Linux文件系统基础(1)相关推荐

  1. Linux文件系统基础

    Linux文件系统基础 文件系统概述 Linux文件系统的特点 Linux文件系统的组成 Linux文件系统类型 EXT文件系统 其他文件系统 文件和目录的基本概念 文件 目录 路径 文件系统概述 操 ...

  2. 文件系统调用和Linux文件系统基础

    文件系统调用和Linux文件系统基础 keywords fdisk.LBA.CHS.MBR.super struct.directory.file.inode.inode table.block.fi ...

  3. linux文件系统基础知识

    这两天看了一本fedora 6的实践教程,下面是有关linux文件系统知识的学习笔记: 1.linux文件系统分配策略:     块分配( block allocation ) 和 扩展分配  ( e ...

  4. unix/linux文件系统基础知识

    1.linux文件系统分配策略: 块分配( block allocation ) 和 扩展分配 ( extent allocation ) 块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪 ...

  5. Linux文件系统基础之inode和dentry

    inode和dentry在VFS和实体的文件系统(ext2.ext3等)中都是比较重要的概念.首先看一下虚拟文件系统的标准定义:虚拟文件系统(英语:Virtual file system,缩写为VFS ...

  6. Linux 文件系统基础

    1.FHS的概念 FHS的全称Filesystem Hierarchy Standard(文件系统层次化标准),基本上所有的Linux版本的系统都采用这种文件组织方式.它的主要作用是定义了系统中每个目 ...

  7. linux文件基础知识,linux文件系统基础知识

    利用直接指针.单级间接指针.二级间接指针.三级间接指针可保存的最大文件大小为: 1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,约 ...

  8. linux文件系统基础--VFS中的file、dentry和inode--讲得非常透的一篇文章

    毕业以来,我花了很多时间阅读内核的代码,深入Linux内核架构,深入理解Linux内核,Robert Love的Linux内核设计与实现,Linux的虚拟文件系统对应章节,也读了很多遍,每一次读,都有 ...

  9. linux操作系统基础与实训教程,清华大学出版社-图书详情-《Linux操作系统基础与实训教程》...

    前 言 随着计算机技术的不断发展,越来越多的用户认识到Linux的优点.作为唯一一款与微软Windows竞争的桌面操作系统,Linux逐渐受到用户的重视:并且随着其在市场中占有量的稳步提高,已经有越来 ...

最新文章

  1. mysql自增长2个增加_mysql – 添加第二个自动增量字段并允许重复
  2. NOIP2012开车旅行 【倍增】
  3. [渝粤教育] 四川农业大学 理论力学 参考 资料
  4. 能力=知识+技能+经验
  5. gprs模块http mqtt_在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议 | TsonTec:测量解决方案提供者...
  6. 诗与远方:无题(二十四)
  7. linux编译ios动态库,[Linux] linux下生成静态库和动态库
  8. C++程序代码:类实现——【calculator】计算器程序设计
  9. Linux命令--- /dev/null和/dev/tty
  10. 安卓开源项目周报0301
  11. ab test -- 实验效果不显著的改善方法 -- CUPED
  12. intellij idea文件颜色代表的含义
  13. 关于uIP的移植以及部分特性解析和勘误
  14. 地级市空气污染、空气质量、PM2.5日度数据
  15. 30系列NVIDIA显卡安装tensorflow 极简
  16. 阿童木录机固态硬盘MOV视频损坏修复
  17. 仿微信控制输入法的显示和隐藏
  18. MPU6050姿态解算1-DMP方式
  19. 谈技术文章翻译的信雅达-上
  20. 洛谷 P1162 填涂颜色 C++ 深搜 染色法

热门文章

  1. FileZilla搭建FTP服务器图解教程
  2. 网络基础:Ping命令的7种基础用法,掌握了秒变大神!
  3. Linux常见英文报错中文翻译(菜鸟必知)
  4. 什么是 Native、Web App、Hybrid、React Native和Weex?
  5. jvm 崩溃日志设置_JVM致命错误日志(hs_err_pid.log)分析(转载)
  6. 谷歌网络代理工具_谷歌更新了Dialogflow AI引擎,帮助客户创建更好的虚拟代理...
  7. python入门之运算符的使用的答案_python入门教程之基本算术运算符
  8. html引用c 变量,Y.A.K.E
  9. 【ROS问题】rqt_plot运行报错
  10. Java Observer Pattern(观察者模式)