Linux 文件系统
2015-06-04 10:25
351 查看
一、文件系统
文件系统是对一个存储设备上的数据和元数据进行组织的机制。由于定义如此宽泛,支持它的代码会很有意思。正如前面提到的,有许多种文件系统和媒体。由于存在这么多类型,可以预料到
Linux 文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。
Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。
例如,
SCSI(SAS)磁盘或 Serial Advanced Technology Attachment(SATA)磁盘。但是,当通过调用
二、LInux文件系统体系结构 (refer:
http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/)
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用
三、LInux虚拟文件系统VFS
1. 虚拟文件系统(VFS:virtual file system)其实也可以翻译成虚拟文件系统转换(virtual filesystem switch)。可以看出来它的作用就是提供一个通用的接口来处理与Unix标准文件系统相关的所有系统调用。
VFS 作为文件系统接口的根层。VFS 记录当前支持的文件系统以及当前挂装的文件系统。
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以统一的方式访问各种I/O设备。
虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。
2. VFS其实就是通用文件操作的统一API接口,因为LINUX支持很多文件系统,他不可能为每个文件系统都设计一个API接口,这样,LINUX累,运行在LINUX上的程序更累,所以LINUX为了简化操作,就设计的通用API接口(专业术语,就是虚拟文件系统),这样程序不必关心,运行在LINUX上的是哪个文件系统,就对程序透明了,而具体的文件系统操作,有LINUXn内核完成。
2. 虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。
- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质
- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分
3.VFS所支持的文件系统类型可以归结为以下三大类:
基于磁盘的文件系统(Ext2, Ext3等)
网络文件系统(NFS等)
特殊文件系统(proc, sysfs)
四、LInux 磁盘分区和目录(refer:
http://www.iteye.com/topic/816268)
1.分区和目录关系
Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。
Linux的文件结构是单个的树状结构.可以用tree进行展示。 在Ubuntu下安装tree(sudo apt-get install tree),并可通过命令来查看。
每次安装系统的时候我们都会进行分区,Linux下磁盘分区和目录的关系如下:
– 任何一个分区都必须挂载到某个目录上。
– 目录是逻辑上的区分。分区是物理上(物理磁盘)的区分。
– 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
– 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
以下是我们可能存在的一种目录和分区关系:
Q:如何查看分区和目录及使用情况?
– fdisk查看硬盘分区表
– df:查看分区使用情况
– du: 查看文件占用空间情况
Q: 为什么要分区,如何分区?
– 可以把不同资料,分别放入不同分区中管理,降低风险。
– 大硬盘搜索范围大,效率低
– 磁盘配合只能对分区做设定
– /home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片
2.Mount挂载
Linux的目录形成一个树形结构,根目录是 /。根目录位于根文件系统中,在Linux中通常是Ext2或Ext3。而其他文件系统挂载在根文件系统的子目录下。
在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂装(mount)。使用
挂载的概念 :当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。Mount命令可以实现挂载:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
Q:所有的磁盘分区都必须被挂载上才能使用,那么我们机器上的硬盘分区是如何被挂载的?
A:这主要是它利用了/etc/fstab文件。每次内核加载它知道从这里开始mount文件系统。每次系统启动会根据该文件定义自动挂载。若没有被自动挂载,分区将不能使用。 如下是我的/etc/fstab的定义,主要是根据装机的分区来的:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
#/dev/sda1被自动挂载到 /
UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5 被自动挂载到分区/home
UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /home ext3 relatime 0 2
#/dev/sda7 被自动挂载到/work
UUID=0f918e7e-721a-41c6-af82-f92352a568af /work ext3 relatime 0 2
#分区 /dev/sda6被自动挂载到swap
UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0
Q:移动硬盘如何挂载?如何挂载一个新的分区?
移动硬盘有驱动模块会自动挂载,如果有个新硬盘,要先进行分区,并通过mount命令挂载到某个文件夹。如果要自动挂载则可以修改/etc/fstab文件.
文件系统是对一个存储设备上的数据和元数据进行组织的机制。由于定义如此宽泛,支持它的代码会很有意思。正如前面提到的,有许多种文件系统和媒体。由于存在这么多类型,可以预料到
Linux 文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。
Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。
例如,
read函数调用可以从指定的文件描述符读取一定数量的字节。
read函数不了解文件系统的类型,比如 ext3 或 NFS。它也不了解文件系统所在的存储媒体(物理介质),比如 AT Attachment Packet Interface(ATAPI)磁盘、Serial-Attached
SCSI(SAS)磁盘或 Serial Advanced Technology Attachment(SATA)磁盘。但是,当通过调用
read函数读取一个文件时,数据会正常返回。本文讲解这个机制的实现方法并介绍 Linux 文件系统层的主要结构。
二、LInux文件系统体系结构 (refer:
http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/)
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用
sync命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。
三、LInux虚拟文件系统VFS
1. 虚拟文件系统(VFS:virtual file system)其实也可以翻译成虚拟文件系统转换(virtual filesystem switch)。可以看出来它的作用就是提供一个通用的接口来处理与Unix标准文件系统相关的所有系统调用。
VFS 作为文件系统接口的根层。VFS 记录当前支持的文件系统以及当前挂装的文件系统。
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以统一的方式访问各种I/O设备。
虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。
2. VFS其实就是通用文件操作的统一API接口,因为LINUX支持很多文件系统,他不可能为每个文件系统都设计一个API接口,这样,LINUX累,运行在LINUX上的程序更累,所以LINUX为了简化操作,就设计的通用API接口(专业术语,就是虚拟文件系统),这样程序不必关心,运行在LINUX上的是哪个文件系统,就对程序透明了,而具体的文件系统操作,有LINUXn内核完成。
2. 虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。
- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质
- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分
3.VFS所支持的文件系统类型可以归结为以下三大类:
基于磁盘的文件系统(Ext2, Ext3等)
网络文件系统(NFS等)
特殊文件系统(proc, sysfs)
四、LInux 磁盘分区和目录(refer:
http://www.iteye.com/topic/816268)
1.分区和目录关系
Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。
Linux的文件结构是单个的树状结构.可以用tree进行展示。 在Ubuntu下安装tree(sudo apt-get install tree),并可通过命令来查看。
每次安装系统的时候我们都会进行分区,Linux下磁盘分区和目录的关系如下:
– 任何一个分区都必须挂载到某个目录上。
– 目录是逻辑上的区分。分区是物理上(物理磁盘)的区分。
– 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
– 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
以下是我们可能存在的一种目录和分区关系:
Q:如何查看分区和目录及使用情况?
– fdisk查看硬盘分区表
– df:查看分区使用情况
– du: 查看文件占用空间情况
Q: 为什么要分区,如何分区?
– 可以把不同资料,分别放入不同分区中管理,降低风险。
– 大硬盘搜索范围大,效率低
– 磁盘配合只能对分区做设定
– /home /var /usr/local经常是单独分区,因为经常会操作,容易产生碎片
2.Mount挂载
Linux的目录形成一个树形结构,根目录是 /。根目录位于根文件系统中,在Linux中通常是Ext2或Ext3。而其他文件系统挂载在根文件系统的子目录下。
在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂装(mount)。使用
mount命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。
挂载的概念 :当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。Mount命令可以实现挂载:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
Q:所有的磁盘分区都必须被挂载上才能使用,那么我们机器上的硬盘分区是如何被挂载的?
A:这主要是它利用了/etc/fstab文件。每次内核加载它知道从这里开始mount文件系统。每次系统启动会根据该文件定义自动挂载。若没有被自动挂载,分区将不能使用。 如下是我的/etc/fstab的定义,主要是根据装机的分区来的:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
#/dev/sda1被自动挂载到 /
UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5 被自动挂载到分区/home
UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /home ext3 relatime 0 2
#/dev/sda7 被自动挂载到/work
UUID=0f918e7e-721a-41c6-af82-f92352a568af /work ext3 relatime 0 2
#分区 /dev/sda6被自动挂载到swap
UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0
Q:移动硬盘如何挂载?如何挂载一个新的分区?
移动硬盘有驱动模块会自动挂载,如果有个新硬盘,要先进行分区,并通过mount命令挂载到某个文件夹。如果要自动挂载则可以修改/etc/fstab文件.
相关文章推荐
- CentOS6.3 重启后/etc/resolv.conf被还原解决办法
- wpa_supplicant_8_ti hostapd wpa_supplicant TI 官方的wpa_supplicant hostapd 移植到linux
- Linux 命令笔记(1)
- linux程序分析工具介绍(二)—-ldd,nm
- 【转】Linux下tar.xz结尾的文件的解压方法--不错
- linux中echo命令向一个文件写入内容
- Linux下显示IP地理位置信息的小工具-nali
- 【转】linux tree命令以树形结构显示文件目录结构 ---- 不错
- linux 打开文件句柄数
- Linux的运行级别和chkconfig用法
- 首个开放汽车级 Linux 规范 AGL 发布
- Mac上制作Linux U盘启动盘
- CentOS Linux时出现GPT分区不能引导错误的解决办法
- Linux 配置samba
- linux控制台超时自动注销
- Linux中find用法
- 【Linux C程序设计】创建多线程
- linux下搭建svn代码库
- I2C-pcf8563
- linux在shell中获取时间