Linux文件系统基础(1)

本文首发于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题

理想的代码优化方式团队日常协作中,自然而然的会出现很多重复代码,根据这些代码的种类,之前可能会以以下方式处理方式描述应用时可能产生的问题硬编码多数新手,或逐渐腐坏的项目会这么干,会直接复制之前实现的代码带来…

React Native之Flexbox布局和监测文本输入onChangeText

1 Flexbox布局 1) flexDirection 可以决定布局的主轴,子元素是应该沿着水平轴(row)方向排列,还是沿着竖直轴(column)方向排列 2) justifyContent 决定其子元素沿着次轴(与主轴垂直的轴,比如若主轴方向为row,则次轴方向为…

半年总结——欲戴王冠,必承其重

【Introduction】 每一个女生都梦想着作为一个女王。但是你仅仅看到了女王头上金闪闪的王冠,却不知道在这个王冠下。她是怎样成长的!假设你想要做到有女王一样的权利,就必需要承担一个女王应该做到的事情!——欲带王冠&#xff0c…

SQL日期时间格式自由转换大全

日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/

一维数组和二维数组的区别_数组指针和指针数组的区别

数组指针和指针数组的区别 - hongcha_717 - 博客园​www.cnblogs.com数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的…

mysql 配置多个数据库连接_总结MySQL修改最大连接数的两个方式

问题在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections”-mysql 1040错误,这是因为访问MySQL且还未释放的连接数目已经达到MySQL的上限。通常,mysql的最大连接数默认…

饿了么超级会员,年卡低至108元!饿了么会员,点外卖超省钱!

饿了么是大家常用的外卖平台,经常点外卖的朋友,充个饿了么超级吃货卡,还是能省不少钱的,今天给大家带来饿了么会员特价充值,会员秒到!饿了么超级会员特价充值月卡:原价15元,特价仅需…

React Native之内部方法常用几种写法和调用规则

1 简单部分代码 export default class App extends Component<Props> {render() {return (<View style{styles.container}><View style{styles.welcome}><Button onPress{this.showMsg}titleprees me showMsg/> <Button onPress{() > {this.sho…

阿里云欧洲数据中心开放运营:与沃达丰达成战略合作

摘要&#xff1a;近日&#xff0c;阿里云在德国宣布正式登陆欧洲市场&#xff0c;其位于欧洲的数据中心正式开放运营&#xff0c;同时与沃达丰达成战略合作&#xff0c;携手为欧洲提供云计算服务&#xff0c;并为中国企业进入欧洲市场提供互联网基础设施便利。 据悉&#xff0c…

C#ListView控件添加复选框并获取选中的数目

1、添加复选框:listView1.CheckBoxes = true; 2、选中listview并获取选中的数目: private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e){e.Item.Selected = e.Item.Checked;m = listView1.CheckedItems.Count;label1.Text = "当前选中数:"…

MFS学习总结

MFS学习总结 MFS概述、特性和新版改进MFS 工作原理和设计架构MFS的安装、部署、配置MFS的高级特性MFS的性能测试MFS集群的维护MFS的常见问题和建议对策一、MFS概述、特性和新版改进 MooseFS是一个分布式存储的框架&#xff0c;其具有如下特性&#xff1a; Free(GPL)通用文件系统…

python打开csv文件乱码_python脚本解决csv文件用excel打开乱码

import os path csv文件路径 targetPath 转换编码保存路径 def getfiles(path): path_collection[] for dirpath,dirnames,filenames in os.walk(path): for file in filenames: fullpathos.path.join(dirpath,file) path_collection.append(fullpath) return path_collection…

Linux - 命令

1、查看目录下有什么文件/目录操作 > ls //list列出目录文件的信息 > ls -l //list -list 以“详细信息”查看目录文件 > ls -a //list -all查看目录“全部&#xff08;包括隐藏文件&…

c 编程 mysql结果集_使用mysql C语言API编写程序—MYSQL数据库查询操作(执行查询操作,获取查询结果的字段数,记录行数,...

//MYSQL_RES保存查询结构MYSQL_RES*result_ NULL;interror_code 0; //保存错误码charerror_info[1024] \0; //保存错误信息//对mysql数据库进行查询操作:charquery_sql[1024] "select * from db_name.table_name";//构建查询sql语句if(result_! NULL) //防止之前…

介绍一款受欢迎的.NET 开源UI库

概述今天要带大家了解的是一款WPF的开源控件库MahApps.Metro。MahApps.Metro是用于创建现代WPF应用程序的工具包&#xff0c;它许多开箱即用的好东西。目前支持的NET Framework 4.6.2及更高版本、.NET Core 3.1, .NET 5 and .NET 6 (on Windows)。官网学习文档地址&#xff1a;…

图像分类中混淆矩阵精度验证法中的几个指标说明

ToolBox->Classification->PostClassification->Confusion Matrix->Using Ground Truth ROIs,可以得到如下的分类精度验证的混淆矩阵。 要看懂这个精度验证结果,需要了解几个混淆矩阵中的几项评价指标:

React Native之触摸事件(Touchable系列和onLongPress)

1 触摸事件 普通点击我们可以使用onPress方法,我们可以使用Touchable 系列控件设计我们的按钮 TouchableHighlight 背景会在用户手指按下时变暗 TouchableNativeFeedback用户手指按下时形成类似墨水涟漪的视觉效果 TouchableOpacity指按下时降低按钮的透明度&#xff0c;而…

社交背水一战?校园日记背后,支付宝野心你真能懂?

“校园日记”昨天火了一天&#xff0c;我们也是时候来聊聊支付宝背后的具体战略和意图了。今天早上看到虎嗅的头条《支付宝的“圈子”&#xff0c;阿里做社交的背水一战》&#xff0c;文章观点主要分析了支付宝做社交的必要性&#xff0c;以及这次切入社交领域的巧妙性。 这篇文…

WebForm 使用点滴。。。。

WebForm使用方式与WinForm很是相似&#xff0c;可控性非常高&#xff01; 1、调用别的按钮事件&#xff1a; BtnSelect_Click(sender, e);转载于:https://www.cnblogs.com/chenmfly/p/4409447.html

System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。...

在NHibernate数据库查询中出现了这个错误&#xff0c;由于是数据库是mysql的&#xff0c;当定义的字段为char(36)的时候就会出现这个错误。 【解决方法】 将char(36) 改成varchar(40)就行了 参考&#xff1a;http://www.cnblogs.com/end/archive/2012/12/26/2834068.html转载于…