文件系统是对一个存储设备上的数据和元数据进行组织的机制。它的最终目的是把大量数据有组织的放入持久性(persistant)的存储设备中,比如硬盘和磁盘。文件系统(file system)是就是文件在逻辑上组织形式,它以一种更加清晰的方式来存放各个文件。数据被存入到某个分区中。
Windows当前的默认文件系统,NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。
Ext系列是Linux的老牌文件系统了,一直是Linux的主打,从Ext3开始支持日志,Ext4更加完善了很多功能。由于其组织形式的限制,很难将很多现代文件系统的功能加进去,所以Linux才会出Btrfs项目企图重头开发一个功能强劲的文件系统。
BTRFS(通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。目标是取代Linuxext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。
被称为真正的下一代文件系统,ZFS 提供卷管理(能够在单个文件系统中处理多个单独的存储设备),块级加密校验和(允许以极高的准确率检测数据损坏),自动损坏修复(其中冗余或奇偶校验存储可用),快速异步增量复制,内联压缩等,以及更多。
Linux支持的 文件系统有上百种,难道Linux内核需要对上百种一一适配吗?
不需要。为了支持各种不同的文件系统,Linux 内核在用户进程和文件系统的中间,又引入了一个抽象层,也就是虚拟文件系统 VFS(Virtual File System)。
VFS 定义了一组所有文件系统都支持的数据结构和标准接口。这样,用户进程和内核中的其他子系统,只需要跟 VFS 提供的统一接口进行交互就可以了,而不需要再关心底层各种文件系统的实现细节。
下图是:系统调用、VFS、缓存、文件系统以及块存储之间的关系。
先来介绍一下根文件系统:
根文件系统首先是一种文件系统,相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。
挂载:
在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。
挂载文件系统的过程:
在 Linux 系统启动阶段的最初阶段,root 文件系统就会被挂载到 root 目录下(
/
)。其它文件系统在之后通过 SystemV 下的
rc
或更新一些的 Linux 发行版中的
systemd
等 Linux 启动程序挂载。在启动进程中文件系统的挂载是由
/etc/fstab
配置文件管理的。
首先,在Linux下谈分区并不准确。
与Windows分区,一个分区一个盘符不同。Linux是一整个目录树,如下图。Linux先划分固定大小的磁盘空间,设置好文件系统后,将磁盘空间挂载到固定目录下。
在所有子目录中,粗体的目录组成了 root 文件系统的必需部分。它们(特别是它们包含的内容)必须在系统启动的时候出现,从而系统才能正确启动。剩下的非粗体的目录不需要在系统启动过程中出现,但会在之后挂载到 root 文件系统上,在开机阶段,它们为主机进行准备,从而执行有用的工作。
数据安全:在不损失数据的情况下重装系统,比如独立设置 /home 挂载点,重装系统的时候直接标记回 /home,数据不会有任何损失。
效率(机械硬盘):将数据集中在某个分区,读取数据时,硬盘只会搜索相应区段,提升读取速度。
关于/usr分区,多说一句,因为我经常搞机,重装比较多,如果单独划分 /usr分区,装完系统,直接挂载就可以使用以前的数据啦。
如果你是普通用户,可以不分此目录。但 建议把 根目录 分得大一点,其他的空间给 /home 分区。