分区
全新硬盘装系统之前,必须对其进行分区,硬盘分区初始化的格式主要有两种:传统的 MBR(Master Boot Record ,即主引导记录) 和新的 GPT( GUID Partition Table)。后者功能更强大,解决了 MBR 的许多限制。
MBR
MBR 早在 1983 年 IBM PC DOS 2.0 中就已经提出。之所以叫“主引导记录”,是因为它位于驱动器开始部分的主引导扇区,是硬盘的第一扇区。它由三个部分组成:Boot loader、硬盘分区表 DPT 和结束标志字。
- 第一部分为 Boot loader,位于主引导扇区的前 446 个字节,偏移地址为 0000H--0088H,是一小段代码,用于加载硬盘上其他分区上更大的加载器(如操作系统的启动加载器)。如果你安装了 Windows,Windows 启动加载器的初始信息就放在这个区域里。如果 MBR 的信息被覆盖导致 Windows不能启动,你就需要使用启动优盘中 DiskGenius 软件提供的重建 MBR 功能来使其恢复正常。如果你安装了 Linux,则这里通常存储的是 GRUB 启动加载器的初始信息。该区域主要提供以下三个功能:
- 提供启动引导菜单:使用者可以在该菜单中选择启动不同的开机项。在系统未加载前按下主板快速启动的快捷键就可以看到该菜单;
- 指向开机所需的核心文件来启动操作系统;
- 还可将开机引导权交给其它 loader。每个分区也拥有自己的启动扇区(Boot sector),开机引导程序除了可以装在这里外,还可装在各分区的启动扇区。
- 第二部分为 Disk partition table 区(DPT 分区表),占 64 个字节,偏移地址为 01BEH--01FDH,记录整个磁盘分区的状态,每 16 个字节标记一个分区,因此最多可记录 4 个分区。分区的单位是柱面,每个 16 字节的记录区记录了该分区从开始到结束的柱面号。所谓的分区操作即是对分区表进行设置,当文件系统要写入磁盘时,首先会参考分区表。在 MBR 分区表中,逻辑块地址采用 32 位二进制数表示,因此一共可表示 2 的 32 次方个逻辑块地址,所以,MBR 硬盘最大分区容量仅为 2.2 TB = 2^32 × 512 bytes;
- 第三部分是结束标志字,占 2 个字节,偏移地址为 01FEH--01FFH。固定为 55AA,是检验主引导记录是否有效的标志。该标志错误将导致系统不能启动。
上面所说的分区为主分区(primary partition)。一个磁盘或者 RAID 卷上只能有 4 个可启动的主分区。如果 MBR 分区方案需要使用 4 个以上的分区,那就需将至少一个主分区作为扩展分区(extend partition),然后在该扩展分区上面建立若干个逻辑分区(logic partition)。扩展分区可以被看作是容纳逻辑分区的容器。硬盘上最多只能有 1 个扩展分区(操作系统的限制)且其本身不能格式化,必须划分逻辑分区后才能使用,但扩展分区中的逻辑分区没有数量限制。扩展分区也被看作是一个主分区,因此,在存在扩展分区的情况下最多只能再建 3 个主分区(3 个主分区加 1 个可包含多个逻辑分区的扩展分区)。
扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和 MBR 结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的 EBR,分区表第三、第四项没有用到。简而言之,扩展分区严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个
逻辑分区的指针,这种指针结构是一个单向链表。
BIOS
BIOS(Basic Input Output System)即基本输入输出系统 ,它是个人电脑启动时加载的第一个软件。其实,它是一个存储在计算机内主板 BOIS 芯片上的程序,它保存着计算机最重要的基本输入输出的程序、加电自检程序(Power On Self Test,简称 POST 自检)和系统启动程序等。
一般在计算机启动时按 F2 或者 Delete 即可进入 BIOS 程序进行设置(一些特殊机型按 F1、Esc、F12 等进行设置)。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
UEFI
UEFI 的全称是 Unified Extensible Firmware Interface,意即统一可扩展固件接口,它是基于 EFI 1.10 标准为基础发展而来,值得注意的是在 UEFI 正式确立之前,Intel 就开始积极推进传统 BIOS 的升级方案,并最终确立了过渡方案 EFI 标准,直到 2007 年 Intel 将 EFI 标准的改进与完善工作交给 Unified EFI Form 进行全权负责,EFI 标准则正式更名为 UEFI。UEFI 其实和 BIOS 是同一类程序,是随着硬件发展而出现的 BIOS 升级版,被看做是有近20多年历史的传统的(Legacy)BIOS 的继任者。UEFI 一般就是指 UEFI BIOS 环境,而和 UEFI 比较时的所说的 BOIS 则是指传统的 BIOS 环境。
相比 BIOS,UEFI 的一些优点在于:
- 高效开发。BIOS 开发一般采用汇编语言,代码多是硬件相关的代码。而在 UEFI 中,绝大部分代码采用 C 语言编写,UEFI 应用程序和驱动甚至可以使用 C++ 编写。UEFI通过固件操作系统接口(BS 和 RT 服务)为 OS 和 OS 加载器屏蔽了底层硬件细节,使得 UEFI 上层应用可以方便重用。
- 可扩展性。UEFI 的模块化设计在逻辑上分为硬件控制与 OS(操作系统)软件管理两部分,硬件控制为所有 UEFI 版本所共有,而 OS 软件管理其实是一个可编程的开放接口。借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过 UEFI 加以实现,主板或固件厂商可以将它们作为自身产品的一大卖点。UEFI 也提供了强大的联网功能,其他用户可以对你的主机进行可靠的远程故障诊断,而这一切并不需要进入操作系统。
- 缩短启动和休眠恢复时间。UEFI 可运行于 32 位或 64 位模式,突破了传统 16 位代码的寻址能力,达到处理器的最大寻址,此举克服了 BIOS 代码运行缓慢的弊端。
- 启动的安全性。当系统的安全启动功能被打开后,UEFI 在执行应用程序和驱动前会先检测程序和驱动的证书,仅当证书被信任时才会执行这个应用程序或驱动。UEFI 应用程序和驱动采用 PE/COFF 格式,其签名放在签名块中。
- 更大的磁盘容量和分区数量。传统 MBR 分区最大只能支持 2.2 TB 的硬盘和 4 个主分区,而 UEFI 规范之一的 GPT 分区格式,则可以支持过百 TB 大小的硬盘和 100 个主分区。
- 兼容性。与 BIOS 不同的是,UEFI 体系的驱动并不是由直接运行在 CPU 上的代码组成的,而是用 EFI Byte Code(EFI字节代码)编写而成的。EFI Byte Code 是一组类似于 Java 类文件的虚拟机器指令,必须在 UEFI 驱动运行环境下被解释运行,由此保证了充分的向下兼容性。
- 鼠标操作。UEFI 内置图形驱动功能,可以提供一个高分辨率的彩色图形环境,用户进入后能用鼠标点击调整配置,一切就像操作 Windows 系统下的应用软件一样简单。
相比传统的 BIOS,UEFI 还提供了文件系统的支持,它能够直接读取 FAT、FAT32 分区中的文件,例如华硕、华擎等主板在 UEFI 环境下更新 BIOS 就可以直接读取 U 盘中的 BIOS 及其他文件,另外新的 UEFI 主板基本都提供了截屏功能,这些截屏图片都可以存储在U盘当中。
UEFI 还有一个重要特性就是在 UEFI 下运行应用程序,这类程序文件通常以 efi 结尾。利用 UEFI 可以直接识别 FAT 分区中的文件,又可直接在其中运行应用程序。我们就可以将 Windows 安装程序做成 efi 类型应用程序,然后把它放到任意FAT 分区中直接运行即可。
当然由于 UEFI 主要由高级语言编写(C语言),相比于传统 BIOS 的汇编语言,UEFI BIOS 在安全防护性方面相比传统 BIOS 要弱,比较容易遭到病毒的攻击,安全性有待进一步提升。不过在图形化界面、应用程序扩展面前,UEFI BIOS 还是非常成功的。
现在,多数主板为了兼容 MBR 分区表,一般会提供 Legacy BIOS 和 UEFI BIOS 启动模式选项,如果要使用 UEFI 模式安装操作系统,就必须开启 UEFI 模式。UEFI 模式可切换回 BIOS 模式,而仅有 BIOS 模式时无法切换为 UEFI 模式。
目前 64bit Windows Vista、7、8、8.1、10 都已经支持 GPT 分区表,而 Windows 8、8.1、10 都已经原生支持 UEFI,安装这些系统的时候:只要硬盘设置为 GPT 分区表 主板设置为 UEFI 启动后,就可以直接开始安装操作系统了。自 Win8 发布以来,新出厂的预装 Win8/Win8.1 的电脑都默认在 UEFI 式下启动操作系统。
而对于 Windows Vista、7 系统,就需要手动添加 UEFI 支持,我们可以找一份 Windows 8 或者 10 安装镜像,从安装文件中提取 Bootmgfw.efi 文件,重命名为 BOOTX64.EFI,拷贝到 Win7 安装文件的 \EFI\Boot\ 下,如果没有 BOOT 文件夹就新建一个。
GPT
GPT 的全称是 Globally Unique Identifier Partition Table,意即 GUID 分区表。UEFI BOIS 将逐渐取代 Legacy BOIS ,而 GPT 也将逐渐取代 MBR。UEFI 和 GPT 是相辅相成的,二者缺一不可,要想使用 GPT 分区表则必须是 UEFI BIOS 环境。
与支持最大 2T 磁盘和 RAID 卷且至多有 4 个主分区的 MBR 分区表相比, GPT 分区表能支持最大 18 EB(Exabytes)磁盘和 RAID 卷。并且磁盘和 RAID 卷的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区)。比如,在 Windows 系统上,由于系统的限制 GPT 最多只能支持 128个 磁盘分区,基本可以满足所有用户的存储需求。在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个 GPT 分区都分配完全唯一的标识符。
在安全性方面,GPT 分区表也进行了全方位改进。在早期的 MBR 磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT 在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT 还为这些信息保存了循环冗余校验码(CRC)以保证其完整性和正确性——如果数据被破坏,GPT 会发觉这些破坏,并从磁盘上的其他地方进行恢复。
MBR 还是 GPT
GPT 相对于诞生于 MS-DOS 时代的 MBR 而言,有许多优点。在做出选择前,需要考虑如下内容:
- 如果使用 GRUB legacy 作为 bootloader,必须使用 MBR。
- 如果使用传统的 BIOS,并且双启动中包含 Windows (无论是 32 位版还是 64位 版),必须使用 MBR。
- 如果使用 UEFI 而不是 BIOS,并且双启动中包含 Windows 64 位版,必须使用 GPT。
- 非常老的机器需要使用 MBR,因为 BIOS 可能不支持 GPT.
- 如果不属于上述任何一种情况,可以随意选择使用 GPT 还是 MBR。由于 GPT 更先进,建议选择 GPT。
- 建议在使用 UEFI 的情况下选择 GPT,因为有些 UEFI firmware 不支持从 MBR 启动。
- 为了使 GRUB 从一台有 GPT 分区的基于 BIOS 的系统上启动,需要创建一个 BIOS 启动分区, 这个分区和 /boot 没关系,仅仅是 GRUB 使用,不要建立文件系统和挂载。
以下为主流操作系统对 GPT 的支持情况列表。
操作系统 | 数据盘 | 系统盘 |
---|---|---|
Windows XP 32bit | 不支持 GPT 分区 | 不支持 GPT 分区 |
Windows XP 64bit | 支持 GPT 分区 | 不支持 GPT 分区 |
Windows Vista 32bit | 支持 GPT 分区 | 不支持 GPT 分区 |
Windows Vista 64bit | 支持 GPT 分区 | GPT 分区需要 UEFI BIOS |
Windows 7 32bit | 支持 GPT 分区 | 不支持 GPT 分区 |
Windows 7/10 64bit | 支持 GPT 分区 | GPT 分区需要 UEFI BIOS |
Linux | 支持 GPT 分区 | GPT 分区需要 UEFI BIOS |
更详细的支持列表可参考维基百科。
对于新平台用户(Intel 6 系以后 /AMD 900 系列以后和 A 系列)来说,都强烈推荐使用 GPT 分区表格式。目前包括 Win Vista、Win7、Win8、Win8.1、Win10 已经都支持读取和使用 GPT 分区表。而对于使用 Win8、Win8.1、Win10 的用户,换用 GPT 后开机启动速度也可以进一步得到显著提升。
选择引导方式和分区格式
由于现在刚出的新电脑基本都是 UEFI + GPT 的,如果要更换系统就必须按照 GPT 分区格式 + UEFI 引导的方式去安装。但如果想使用以前的 MBR 方式去安装(比如安装 Ghost 系统)那就只能将转换硬盘的分区格式转换为 MBR 、修改系统引导方式为 Legacy、重新分区再安装。
如果在分区格式为 MBR 的硬盘上安装较新的 Windows 系统时忘了把之前 MBR 分区格式改为 GPT,然后在选择 Windows 安装位置时不能继续,如下图所示。
这个时候就需要将硬盘分区格式修改为 GPT,修改系统引导方式为 UEFI、重新分区再安装。
查看操作系统的引导方式
Windows 系统
方法一
如果你知晓 GPT 与 UEFI 启动之间的关系,那么你可能知道,Windows 想要从 GPT 硬盘引导,就必须以 UEFI 方式启动(反之则不成立)。在磁盘管理(桌面右键计算机快捷方式——>管理——>磁盘管理)中选择一块磁盘,在其上面右键,点击“属性”菜单项,然后选择“卷”标签页,即可看一下分区类型,如果是 GPT,那么电脑肯定就是 UEFI 启动了。
方法二
该方法适用于 Win 8 及更高版本的 Windows 系统。按 Win+R 打开运行,输入 msinfo32,回车查看系统信息。在 BIOS 模式中如果显示“传统”,表示系统启动方式为 Legacy BIOS;如果为 UEFI,则显示 UEFI。
Linux 系统
方法一
可以通过查看是否存在 /sys/firmware/efi
目录就可以判断出是否为 UEFI 引导方式。
方法二
也可以通过安装 efibootmgr
程序,然后执行 sudo efibootmgr
命令即可查看 Linux 系统是否支持 UEFI 引导方式。
终极查看方法
下面介绍一种适用于任何操作系统的查看即修改方法。
在系统开始加载前按下热键(一般为 Del、F2 等)进入 BIOS。一般该功能一般位于 Boot 相关的菜单下,不同主板的电脑操作方式大同小异。如下图所示,可以查看当前的引导方法,也可以修改引导方式。
注意:UEFI 引导方式需要主板芯片组支持,如果你在 BIOS 设定中没有找到相应内容,那么很可能就是你的主板并不支持 UEFI 引导方式。近些年的新主板一般都支持 UEFI。
不同电脑的快捷启动键有所不同。
文件系统
文件系统概述
分区建立后,在将数据存储到分区之前,还必须要用某种文件系统对其进行格式化,这样操作系统才能使用它。创建文件系统的操作就是平时我们所说的格式化。格式化是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。
文件系统(File System)是操作系统中负责管理和存储文件信息的软件机构,用于向用户提供底层数据访问。它将设备中的空间划分为特定大小的块(或称为簇),一般每块 512 字节,一个块可能由若干个扇区组成。数据存储在这些块中,大小被修正为占用整数个块,由文件系统软件来负责将这些块组织为文件和树形目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备实际使用数据块的概念,用户使用文件系统来保存数据时不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。
文件系统是数据的组织者和提供者,并不一定只在特定存储设备上出现,实际上文件系统可能仅仅是一种访问数据的界面而已,实际的数据是通过网络协议(如 NFS、SMB、9P 等)提供的或者在内存上,甚至可能根本没有对应的文件(如 PROC 文件系统)。严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。
格式化通常分为低格(低级格式化)和高格(高级格式化)。
- 低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。大多数的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建硬盘扇区使硬盘具备存储能力的操作。
- 高级格式化又称逻辑格式化,即创建文件系统的过程。高格是根据用户选定的文件系统在磁盘的特定区域写入特定数据,以初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包括对主引导记录(MBR)中分区表相应区域的重写,根据用户选定的文件系统在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间以便用户使用该分区管理文件。
- 低格在硬盘出厂时已经完成。如果没有特别指明,对硬盘的格式化通常是指高格。
下图为一个全新的、未使用的磁盘驱动器的一种形象表示。
要在磁盘驱动器中保存数据,则首先需要格式化该磁盘驱动器。格式化(通常称“ 生成文件系统” )是向驱动器
中写入信息,在未格式化驱动器中为空白空间建立顺序。下图表示一个有文件系统的磁盘驱动器。
如上图所示,文件系统所指派的顺序涉及了一些折衷方案:
- 驱动器中的一小部分可用空间被用来存储与文件系统有关的数据,这可以被视作额外部分。
- 文件系统将剩余的空间分成小的一定大小的片段。在 Linux 中,这些片段就是块。
注:没有单一、通用的文件系统。不同的文件系统会彼此不兼容,也就是说,支持某一文件系统(或者相关的文件系统类型)的操作系统可能不支持另外一种文件系统。比如 Windows 不支持 ext4 等日志文件系统,而 Red Hat Enterprise Linux 就支持很多文件系统(包括许多被其他操作系统使用的文件系统),这就使得在不同文件系统之间的数据交换变得容易了。
在磁盘中写入文件系统只是第一步。这个进程的目的实际上是要保存和检索数据。下图显示了写入数据后的磁盘驱动器:
某些之前的空数据块现在也存放着数据。然而,只看这个框图,我们不能确认这个磁盘中有多少个文件系统。这有可能是一个,也有可能是多个,因为所有的文件都使用至少一个数据块,而有些文件则使用多个块。另外一个值得注意的地方是,已经被使用的块不一定组成连续的空间;未使用的和已使用的块可以散布排列。这被称作碎片。当尝试调整现存分区的大小时,碎片会对其产生影响。
和大多数与计算机相关的技术一样,与磁盘驱动器刚发明时相比,文件系统已经有了很大的变化。特别是保存信息的容量变得越来越大。同时额外的容量让使用磁盘驱动器的方法发生了根本改变。
生活中我们所说的磁盘格式就是指文件系统。不同的操作系统所使用的文件系统也不同。
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 | 可读/可写 | 不支持 | 不支持 | 可读/可写 |
2000、Windows XP、Windows Vista、Server 2003、Server 2008 (R2)、Windows 7、Windows 8、Server 2012 (R2)、Windows 8.1、Windows 10 | 可读/可写 | 可读/可写 | 可读/可写 | 可读/可写 |
注意:除非 NT 安装了 FAT32 For Windows NT 4.0,否则 NT 是不支持 FAT32。
FAT16
对电脑老手而言,对这种硬盘分区格式是最熟悉不过了它采用 16 位的文件分配表,能支持的最大分区为 2 GB,是曾经应用最为广泛和获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这一种格式,从 DOS、Win 3.x、Win 95、Win 97 到 Win 98、Windows NT、Windows 2000、Windows XP 以及 Windows Vista 和 Windows 7 的非系统分区,一些流行的 Linux 都支持这种分区格式。
但是 FAT16 分区格式有一个最大的缺点,那就是硬盘的实际利用效率低。因为在 DOS 和 Windows 系统中,磁盘文件的分配是以簇为单位的,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。而且每簇的大小由硬盘分区的大小来决定,分区越大,簇就越大。例如 1GB 的硬盘若只分一个区,那么簇的大小是 32 KB,也就是说,即使一个文件只有 1 字节长,存储时也要占 32 KB 的硬盘空间,剩余的空间便全部闲置在那里,这样就导致了磁盘空间的极大浪费。FAT16 支持的分区越大,磁盘上每个簇的容量也越大,造成的浪费也越大。所以随着当前主流硬盘的容量越来越大,这种缺点变得越来越突出。为了克服 FAT16 的这个弱点,微软公司在 Windows 97 操作系统中推出了一种全新的磁盘分区格式 FAT32。
FAT32
这种格式采用 32 位的文件分配表,使其对磁盘的管理能力大大增强,突破了 FAT16 对每一个分区的容量只有 2GB 的限制,可以支持的磁盘大小达到 32 GB,但是不能支持小于 512 MB 的分区。运用 FAT32 的分区格式后,用户可以将一个大硬盘定义成一个分区,而不必分为几个分区使用,大大方便了对硬盘的管理工作。而且,FAT32 还具有一个最大的优点是:在一个不超过 8GB 的分区中,FAT32 分区格式的每个簇容量都固定为 4KB,与 FAT16 相比,可以大大地减少硬盘空间的浪费,提高了硬盘利用效率,但是,FAT32 的单个文件不能超过 4G。
有时候我们往优盘(或内存卡)中复制的文件大小明明小于优盘的可用空间大小,系统却提示存储空间不足,这个时候突然发现我们的优盘是 FAT32 格式,而我们所传的单个文件也超过了 4 GB。这个时候可以将优盘格式化为 NTFS 格式即可。使用 Windows 系统格式化时可以选择“快速格式化’”,前提是磁盘没有损坏。
多数 Android 系统手机仅支持 FAT32 格式的存储设备。有时候给手机插上 OTG 优盘(或内存卡)后提示格式化为便携式存储设备,可能并不我们的优盘损坏了,而是其格式不是 FAT32。但如果我们不想将优盘格式化为 FAT32 怎么办呢?手机上安装一个 ES 文件浏览器打开 OTG 优盘即可。其实,某些国产 Android 定制系统中,像 Flyme 和 EMUI 这些系统已经解决了这个问题 ,系统完全支持除 FAST32 外的 NTFS 和 exFAT 等格式。
支持这一磁盘分区格式的桌面操作系统有 Windows 97/98/2000/XP/Vista/7/8 等。但是,这种分区格式也有它的缺点,首先是采用 FAT32 格式分区的磁盘,由于文件分配表的扩大,运行速度比采用 FAT16 格式分区的硬盘要慢;另外,由于 DOS 系统和某些早期的应用软件不支持这种分区格式,所以采用这种分区格式后,就无法再使用老的 DOS 操作系统和某些旧的应用软件了。
NTFS
NTFS 是一种新兴的磁盘格式,目前广泛应用于 Win Vista、Win 7、Win 8、Win 10 操作系统中。早期用在 Windows NT 网络操作系统中,但随着安全性的提高,在 Windows Vista 和 Windows 7 操作系统中也开始使用这种格式。其显著的优点是安全性和稳定性极其出色,在使用中不易产生文件碎片,对硬盘的空间利用及软件的运行速度都有好处。而且单个文件可以超过 4 GB。它能对用户的操作进行日志记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了网络系统与数据的安全。
exFAT
exFAT(全称 Extended File Allocation Table File System,扩展 FAT,即扩展文件分配表)是 Microsoft 在Windows Embeded 6.0(包括 Windows CE 6.0、Windows Mobile)中引入的一种适合于闪存的文件系统。对于闪存设备(比如优盘和内存卡),NTFS 过于复杂,exFAT 更为适用。
相对FAT文件系统,exFAT 有如下好处:
- 增强了台式电脑与移动设备的互操作能力;
- 单文件大小最大可达 16 EB(1 EB = 1024 PB,1 PB = 1024 TB);
- 簇大小可高达 32 MB;
- 采用了剩余空间分配表,剩余空间分配性能改进;
- 同一目录下最大文件数可达 65536 个;
- 支持访问控制;
- 支持 TFAT。
请注意:exFAT 只是一个折中的方案,只为 U 盘而生。采用该文件系统的闪存盘不支持 Windows Vista ReadyBoost。Windows Vista SP1 开始支持该文件系统。需要严格注意的是,Win Vista 以前系统并不支持这种格式,Win XP 可以通过替换驱动文件的方式支持此格式,但是只能读写,不能格式化。
Linux 系统支持的文件系统
ext
Linux 操作系统中引入的最早的文件系统叫作扩展文件系统(extended filesystem,简记为 ext)。 它为 Linux 提供了一个基本的类 Unix 文件系统:使用虚拟目录来操作硬件设备,在物理设备上按 定长的块来存储数据。ext2 文件系统拥有极快的速度和极小的 CPU 占用率,既可以用于标准的块设备(如硬盘),也被应用在软盘等移动存储设备上。
ext 文件系统采用名为 inode 的系统来存放虚拟目录中所存储文件的信息。 inode 系统在每个物理设备中创建一个单独的表(称为 inode 表)来存储这些文件的信息。Linux 通过唯一的 inode 号来引用 inode 表中的每个 inode ,这个值是创建文件时由文件系统分配的。文件系统通过 inode 号而不是文件全名及路径来标识文件。
ext2
最早的 ext 文件系统有不少限制,比如文件大小不得超过 2 GB。在 Linux 出现后不久, ext 文件系统就升级到了第二代扩展文件系统,叫作 ext2。 如你所猜测的,ext2 文件系统是 ext 文件系统基本功能的一个扩展,但保持了同样的结构。 ext2 文件系统扩展了 inode 表的格式来保存系统上每个文件的更多信息。ext2 的 inode 表为文件添加了创建时间值、修改时间值和最后访问时间值来帮助系统管理 员追踪文件的访问情况。ext2 文件系统还将允许的最大文件大小增加到了 2 TB(在 ext2 的后期版本中增加到了 32 TB),以容纳数据库服务器中常见的大文件。
除了扩展 inode 表外, ext2 文件系统还改变了文件在数据块中存储的方式。 ext 文件系统常见的问题是在文件写入到物理设备时,存储数据用的块很容易分散在整个设备中(称作碎片化, fragmentation)。数据块的碎片化会降低文件系统的性能,因为需要更长的时间在存储设备中查找 特定文件的所有块。 保存文件时,ext2 文件系统通过按组分配磁盘块来减轻碎片化。通过将数据块分组,文件系统在读取文件时不需要为了数据块查找整个物理设备。
多年来,ext 文件系统一直都是 Linux 发行版采用的默认文件系统。但它也有一些限制。inode 表虽然支持文件系统保存有关文件的更多信息,但会对系统造成致命的问题。文件系统每次存储或更新文件,它都要用新信息来更新索引节点表。问题在于这种操作并非总是一气呵成的。如果计算机系统在存储文件和更新索引节点表之间发生了什么,这二者的内容就不同步了。ext2 文件系统由于容易在系统崩溃或断电时损坏而臭名昭著。即使文件数据正常保存到了物理设 备上,如果索引节点表记录没完成更新的话,ext2 文件系统甚至都不知道那个文件存在。
ext 文件系统和 ext2 文件系统都存在安全操作的问题。而日志文件系统为 Linux 系统增加了一层安全性。它不再使用之前先将数据直接写入存储设备再更新 inode 表的做法,而是先将文件的更改写入到临时文件(称作日志, journal)中,在数据成功写到存储设备和 inode 表之后,再删除对应的日志条目。
如果系统在数据被写入存储设备之前崩溃或断电了,日志文件系统(Journal File System)下次会读取日志文件并处理上次留下的未写入的数据。 Linux 中有 3 种广泛使用的日志方法,每种的保护等级都不相同:
方法 | 描述 |
---|---|
数据模式 | 索引节点和文件都会被写入日志;丢失数据风险低,但性能差 |
有序模式 | 只有索引节点数据会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间取得了良好的折中 |
回写模式 | 只有索引节点数据会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍比不用日志好 |
数据模式日志方法是目前为止最安全的数据保护方法,但同时也是最慢的。所有写到存储设备上的数据都必须写两次:第一次写入日志,第二次写入真正的存储设备。这样会导致性能很差, 尤其是对要做大量数据写入的系统而言。
ext3
2001 年,ext3 文件系统被引入 Linux 内核中,它采用和 ext2 文件系统相同的索引节点表结构,但给每个存储设备增加了一个日志文件,以将准备写入存储设备的数据先记入日志。 默认情况下,ext3 文件系统用有序模式的日志功能——只将索引节点信息写入日志文件,直到数据块都被成功写入存储设备才删除。ext3 文件系统的这种机制可以在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。 你可以在创建文件系统时用简单的一个命令行选项将 ext3 文件系统的日志方法改成数据模式或回写模式。
虽然 ext3 文件系统为 Linux 文件系统添加了基本的日志功能,但它仍然缺少一些功能。例如,ext3 文件系统无法恢复误删的文件,它没有任何内建的数据压缩功能(虽然有个需单独安装的补 丁支持这个功能), ext3 文件系统也不支持加密文件。鉴于这些原因, Linux 项目的开发人员选择再接再厉,继续改进 ext3 文件系统。
ext4
扩展 ext3 文件系统功能的结果是 ext4 文件系统。ext4 文件系统在 2008 年受到 Linux 内核官方支持,现在已是大多数流行的 Linux 发行版(比如 Ubuntu、RHEL 6)采用的默认文件系统。它支持的存储容量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,ext4 文件系统能够批量分配 block 块,从而极大地提高了读写效率。
除了支持数据压缩和加密, ext4 文件系统还支持区段(extent)特性。区段在存储设备上按块分配空间,但在索引节点表中只保存起始块的位置。由于无需列出所有用来存储文件中数据的数据块,它可以在索引节点表中节省一些空间。 ext4 还引入了块预分配技术(block preallocation)。如果你想在存储设备上给一个你知道要变大的文件预留空间, ext4 文件系统可以为文件分配所有需要用到的块,而不仅仅是那些现在已经用到的块。 ext4 文件系统用 0 填满预留的数据块,不会将它们分配给其他文件。
JFS
作为可能依然在用的最老的日志文件系统之一, JFS(Journaled File System, 日志化文件系 统)是 IBM 在 1990 年为其 Unix 衍生版 AIX 开发的。然而直到第 2 版,它才被移植到 Linux 环境中。IBM 官方称 JFS 文件系统的第 2 版为JFS2,但大多数Linux系统提到它时都只用 JFS。除了用在 IBM Linux 上外, JFS 文件系统并没有流行起来,但你有可能在同 Linux 打交道的日 子中碰到它。
JFS 文件系统采用的是有序日志方法,即只在日志中保存索引节点表数据,直到真正的文件数据被写进存储设备时才删除它。这个方法在 ReiserFS 的速度和数据模式日志方法的完整性之间的采取的一种折中。 JFS 文件系统采用基于区段的文件分配,即为每个写入存储设备的文件分配一组块。这样可以减少存储设备上的碎片。
XFS
XFS 日志文件系统是另一种最初用于商业 Unix 系统而如今走进 Linux 世界的文件系统。美国硅图公司(SGI)最初在 1994 年为其商业化的 IRIX Unix 系统开发了 X FS。 2002 年,它被发布到了适用于 Linux 环境的版本。
XFS 文件系统采用回写模式的日志,在提供了高性能的同时也引入了一定的风险,因为实际数据并未存进日志文件。 XFS 文件系统还允许在线调整文件系统的大小,这点类似于 ReiserFS 文件系统,除了 XFS 文件系统只能扩大不能缩小。
尽管数据模式日志提供了最高的安全性,但是会对性能带来影响,因为索引节点和数据都需要被日志化。如果是回写模式日志, 性能倒是可以接受,但安全性就会受到损害。 就文件系统而言,日志式的另一种选择是一种叫作写时复制(copy-on-write,COW)的技术。COW 利用快照兼顾了安全性和性能。如果要修改数据,会使用克隆或可写快照。修改过的数据并不会直接覆盖当前数据,而是被放入文件系统中的另一个位置上。即便是数据修改已经完成,之前的旧数据也不会被重写。COW 文件系统已日渐流行,接下来会简要概览其中最流行的两种(ZFS 和 Btrf)。
RHEL 7 中默认使用 XFS 文件系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB,这几乎满足了所有需求。
ZFS
COW 文件系统 ZFS 是由 Sun 公司于 2005 年研发的,用于 OpenSolaris 操作系统,从 2008 年起开始向 Linux 移植,最终在 2012 年投入 Linux 产品的使用。 ZFS 是一个稳定的文件系统,与 Resier4、 Btrfs 和 ext4 势均力敌。它最大的弱项就是没有使用 GPL许可。自 2013 年发起的 OpenZFS 项目有可能改变这种局面。但是,在获得 GPL 许可之前, ZFS 有可能终无法成为 Linux 默认的文件系统。
Btrf
Btrfs 文件系统是 COW 的新人,也被称为 B 树文件系统。它是由 Oracle 公司于 2007 年开始研发的。 Btrfs 在 Reiser4 的诸多特性的基础上改进了可靠性。另一些开发人员最终也加入了开发过程, 帮助 Btrfs 快速成为了最流行的文件系统。究其原因,则要归于它的稳定性、易用性以及能够动态调整已挂载文件系统的大小。 OpenSUSE Linux 发行版最近将 Btrfs 作为其默认文件系统。除此之 外,该文件系统也出现在了其他 Linux 发行版中(如 RHEL),不过并不是作为默认文件系统。
VFAT
VFAT 叫长文件名系统,这是一个与 Windows 系统兼容的 Linux 文件系统,支持长文件名,可以作为 Windows 与 Linux 交换文件的分区。
swap
它是 Linux 中一种专门用于交换分区 swap 的文件系统。Linux 使用这一整个分区作为交换空间。一般这个 swap 格式的交换分区是物理内存的 2 倍,在内存不够时,Linux 会将部分数据写到交换分区上。
随着 Linux 的不断发展,它所支持的文件格式系统也在迅速扩充,Linux 系统核心可以支持十多种文件系统类型:Btrfs、JFS、ReiserFS、exFAT、EXT、EXT2、EXT3、EXT4、XFS、ISO 9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC 等。
注意:部分 Linux 发行版默认不支持 NTFS 文件系统,解决方法是安装 NTFS-3G 或 ufsd 等 NTFS 驱动程序。部分 Linux 发行版对 NTFS 的支持度并不高。