移动硬盘使用什么文件系统格式

起因

为什么要研究这个问题呢?我最近为了将一部 1080p 的电影从 Windows 拷贝到 Mac, 将移动硬盘其中一个分区格式成 exFAT。结果拷贝完之后(可能是没有弹出直接拨线了,记不清了),硬盘在 Mac 中两个分区都识别不出来了,不单单是 exFAT 那个分区,连我备份资料的 HFS+ 分区也识别不出来。吓了我一跳,折腾了一天才将资料拷贝回来。

为此我搜索了文件系统格式的区别,也看了些知乎的答案。先将我自己的结论放到前面,有兴趣再看后面理由。

移动硬盘没有必要不用分区,就格式成你最常用的系统格式。假如你主要是用 Mac, 就格式成 HFS+(Mac OS 扩展);假如主要是用 Windows,就格式成 NTFS。假如你同时用 Mac 和 Windows,都需要备份,就买两个移动硬盘,一个格式成 HFS+, 一个格式成 NTFS。再购买一个 64G(或 128G)的 U 盘,格式成 exFAT, 方便拷贝资料。

理由

对于我来说,移动硬盘的主要作用是备份资料,不是临时将资料拷来拷去,最重要是安全,而不是方便。安全和方便同时满足当然最好,但安全和方便往往是矛盾的,太追求安全就不够方便,太追求方便就不够安全。当没有出事的时候,普遍人都是贪图一时方便,当真正出事的时候,才会后悔。我也是这样的啦,用备份资料的移动硬盘去分区拷电影,就是一种不够谨慎的行为。

为什么我那样想拷电影呢?因为我最近搬家了,买了一部 55 寸的电视,很想试试在大屏幕上看电影会有多清晰。而刚搬家,网线还没有从旧地址迁移过去,家里没有网络。于是就在公司 Windows 上挂着迅雷下电影,同时下载 1080p 和 4k 的 《金刚》(2005 版),想对比一下。周五晚下班下载完那个 1080p 的,就用移动硬盘先将 1080p 的拷贝回去。其实我是有个 64G 的 U 盘的,只是快下班了,嫌它拷贝慢。结果就出问题了,Mac 识别不出来了,看不成电视,周末还要去折腾。

原谅我啰啰嗦嗦离题了,言归正传。假如你认同我的观点,移动硬盘用于备份资料,安全性比方便性更重要。移动硬盘自然选择带有日志(Journaling)功能的文件系统,Mac 上就是 HFS+ 和 APFS, 其中 HFS+ 主要用于传统的机械磁盘,APFS 用于 SSD 磁盘。大容量的移动硬盘通常是机械磁盘。Windows 上带日志功能的只有 NTFS。而 U 盘主要用于临时拷贝文件,方便性比安全更重要。可同时被 Mac 和 Windows 方便读取的格式就只有 Fat32 和 exFAT。其中 Fat32 不支持大于 4G 的文件,就被排除了。所以 U 盘格式成 exFAT。exFAT 没有日志功能,出错了不可恢复,但没有关系,最多就重新格式一下。

当然你可以不认同我基本观点,觉得方便使用更重要。自然也可以用移动硬盘去拷贝资料,它速度快些。无关系,我只说自己的理由,作为参考。

上述假设在 Windows 和 Mac 上使用,假如在 Linux 上使用移动硬盘呢?我其实不知道。但绝大多数人都是使用 Mac 和 Windows, 使用 Linux 基本是些专业用户,也不会被移动硬盘使用什么文件系统这种琐碎婆妈的问题难住。

其它讨论

很多人使用移动硬盘主要是用来存放电影,比如存储了一堆经典电影,想在智能电视或者在电视盒子上面看。这些安卓智能设备只认 Windows 文件格式,比如 NTFS 或 exFAT, 不认 Mac 格式。这种情况下,就算你是用 Mac 电脑,也只能将存放电影的移动硬盘格式成 NTFS。但这时需要再购买一个移动硬盘,专门用于存放个人资料。个人资料和经常观看的电影在物理上隔离,而不应该用同一个移动硬盘分区。

移动硬盘存放资料,但资料的重要性是不同的。越跟个人密切相关的资料就越宝贵,比如包含回忆的照片,自己写过的代码或文章,亲手画的设计稿,房子装修的水电布局图。这些个人资料是无价的,失去就再也找不回了,甚至会遗憾一生,比如丢失逝去亲人的录音或照片。至于高清收藏的电影、漫画、书籍、音乐,舍不得删除,时不时就拿出来翻翻。这种公共资料虽然也珍贵,但丢失了只会心痛一下,也可以找回来。至多挂着网,一天二十四小时重新下载。

假如你真关心个人资料,而存放电影的移动硬盘经常需要连接各设备,拿出来翻翻。就应该将个人资料和公共资料的移动硬盘从物理上分开。通常越个人的资料容量越小,一些不怕公开的照片存放在云盘上,其它私密资料在家里电脑上存放一份,移动硬盘上放一份,公司电脑存放一份基本就行了。

NTFS 在 Mac 上默认可读,但不可写入,那假如我在 Mac 上下载了一部电影,想放到 NTFS 的移动硬盘上,到电视上看怎么办。通常来说,资料读的频率会比写的频率高得多。想在 Mac 上写入 NTFS,可使用 mount_ntfs 来加载一下,搜索一下 mount_ntfs 关键字就可找到教程。有个免费软件 Mounty for NTFS 的软件为 mount_ntfs 添了个图形界面。嫌 mount_ntfs 不够稳定,也可以用虚拟机去装个 Windows, 利用虚拟机将文件写入 NTFS。

有些人会觉得会很麻烦啊,自己不会,也不想弄。只想方便些的,难道就没有一种文件格式又安全,又可方便同时让 Mac 和 Windows 读写吗?很遗憾,暂时没有。exFAT 够方便,但不够安全。

有些人可能会觉得用移动硬盘备份,再用 U 盘拷贝又麻烦又费钱,自己太穷花不起。但其实 1T 的移动硬盘 350 左右,2T 的移动硬盘 500 左右,64G 的 U 盘 60 左右,128G 的 U 盘 100 左右。这个钱还是花得起的。不然拿着个移动硬盘去打印店打印,出问题了,再花上移动硬盘几倍的钱去修复,并且会很麻烦。

有些人觉得将 exFAT 说得太不安全了,自己很小心的,每次都弹出再拨线,没有啥问题的。我自问算是很小心的人了。锁门后会身体撞撞看看有没有真正锁上,有时下了楼会再跑上去再看看。每个网站使用一个随机密码。加完班,觉得打的回家上高速不安全,宁愿自己花钱坐地铁,就算打车可以报销。但就算我这种小心的人也遇到问题了。当你很想着做某件事时,往往自动忽略其它事,危险就在此时发生。就算自己知道每次都弹出在拨线,有时也会出现不小心碰到移动硬盘,就断电了。其实我最后也不清楚是否真的是这个 exFAT 的问题,也有可能冤枉了它,只是我不想再试了。

总结一下,我认为移动硬盘主要用于备份,安全性比方便性更重要,选用带日志功能的文件系统,也不要经常将资料拷来拷去。真正需要拷贝资料使用 U 盘。

总结完毕,但这篇文章还没有完。接下来说明一些基本概念,做个记录。也可当成科普。

文件系统

上面提到文件系统,以及 NTFS、exFAT 等名词,可能有人不清楚具体意思。在我刚接触电脑的时候,也没有文件系统这个概念。我只知道 C 盘、D 盘、E 盘,只知道装个软件就可以看电影,电影放到 D 盘的某个文件夹下。

这就是文件系统给我们的好处,让我们直接使用路径、文件夹、文件等具体直观的概念。而不用直接接触扇区、磁道,一个个二进制位。磁盘存放的都是二进制数据,二进制数和二进制数据之间,其实没有任何区别。磁盘本身并不知道这片区域存放的到底是什么东西,是电影、是音乐、是软件。磁盘只管存储二进制数据,二进制数据本身代表什么,磁盘根本不在乎。

读取磁盘的二进制数据,并将其理解成一个个文件夹,一个个路径、一个个电影,是操作系统的任务。读写磁盘的数据需要按照一定的规则进行,大家约定好规则,你按照一定规则写入,我才能按照规则理解读取出来。假如没有规则,将数据写入磁盘是任意的,数据就全乱了,不能识别了。

这种将文件如何存放到磁盘的规则,就叫文件系统。规则约定如何存放文件、如何存放路径、如何存放文件夹,只要遵守相同的规则,Mac 存放进去的文件,Windows 就可以读取出来。

文件存放的规则有很多套,不同的操作系统,规则都有所不同。有些规则是公开的,有些规则是系统私密的。因此就有多种不同的文件系统格式,NTFS 是一种文件系统格式,exFAT 是另一种文件系统格式。不同文件格式都有基本相同的抽象,有目录、有路径,就算底层的文件系统不同,用户的操作习惯都是相同的。

格式化(format)

磁盘格式化,是对磁盘或者分区进行初始化。按照文件系统定义的规则写入基本的数据。比如使用 NTFS 进行格式化后,磁盘的固定位置就记录下这个信息。操作系统载入这个磁盘后,从固定位置读取这个信息后,就知道后续的所有读写都按照 NTFS 定义的规则进行。

这种初始化会导致现有的磁盘或分区中所有的文件被清除。这就导致很多用户错误认为,格式化就是清除所有,U 盘格式化,U 盘里面的东西就没有了。

通常操作系统会同时支持多个文件系统格式,在磁盘开始位置读取到这个分区是使用了什么文件系统。假如识别到 NTFS,就按照 NTFS 的规则进行读写,识别到 extFAT 就切换到 extFAT 的规则进行读写。假如操作系统不支持这种文件系统,就不能将其中数据读取出来。

快速格式化和一般格式化

在 Windows 的格式化对话框中,会有个“快速格式化”的勾选框。勾选后就是快速格式化,不勾选就是一般格式化。

他们的区别在于,快速格式化只写入基本的数据,清除掉一些索引信息,这样所有文件索引不到,被认为不存在了,但实际其真正内容还在磁盘中。

比如你的某张照片内容,在磁盘的 1000 位置。索引信息在开始的位置,当还没有格式化时,系统通过索引一级一级找到照片在磁盘的位置,可以读取到照片的资料。当快速格式化时,将基本数据写入磁盘 0 到 100 的位置,于是 0 到 100 原有的信息就被覆盖清除掉了。系统就认为这个磁盘中没有文件,但实际上 101 到 100000 的位置,数据还是原来的数据,你的照片内容还在原来的磁盘位置,只是索引丢失就找不到了。

快速格式化十分快。文件的内容其实还在的,就算经过快速格式化,利用一些软件,还是可以恢复原来的数据。

一般格式化除了写入必要的初始化数据,还会将磁盘全部覆盖一些新数据,比如全部写入 0 或者其它数字。另外一般格式化还会扫描磁盘,检查是否有坏道,将坏道记录下来,写文件的时候不写在坏的地方。

一般格式化比较慢,文件的内容通常不可恢复。

日常使用,假如没有啥敏感信息,硬盘也没有坏道,快速格式化就行了。但假如磁盘有敏感的信息,磁盘读取比较慢,怀疑有坏道了,就可以使用一般格式化。一般格式化会更多写磁盘,反复格式化可能会损害磁盘。

同理,日常删除文件,清空回收站。实际上也只是删除了索引,将文件标记成已删除,但实际文件的内容还在的。利用一些软件,还是可以恢复回来。假如真的太敏感,不想让别人恢复,可以用一些软件的粉碎机功能。文件粉碎机除了删除索引,还会往原来的文件内容的磁盘位置写入垃圾数据。这样就不能被恢复了。

日志文件系统(Journaling file system)

上文说过 exFAT 文件系统不安全,是它没有日志功能。那什么是日志功能呢?日志(journaling) 这个词就是记录、登记的意思。日志功能就是在写文件的时候,先在日志中做个记录,记录完后才真正写入文件中。日志也是磁盘中的一块二进制位置,专门开辟出一个用于读写日志的区域,不用来存储文件数据。

就算你读了上面一段话,应该还是不明白日志功能时什么。要明白什么是日志功能,先要明白假如没有日志功能会怎么样。

当系统往磁盘写入数据的时候,任何时候都可能断电。典型的是 U 盘或者移动硬盘没有弹出就直接拨掉。文件系统需要解决一个问题,假如写文件写到一半就突然断电了,应该怎么办?

文件系统给用户的是目录、子目录、路径、文件这种抽象。这种目录、子目录的抽象是一种树状结构。文件系统在磁盘上实现了一种树状结构,每个目录实际上是某种索引。根目录是最上层的索引,子目录是中间的索引,文件就是最终的叶子。经过一级一级的索引,才能找到文件本身。

当写磁盘时,除了修改文件本身的数据,还可能修改目录索引。磁盘断电可能会出现在任何时候,假如断电时没有写磁盘,通常没有啥问题。但假如断电时在写文件,文件数据就丢失了一半,文件就损坏了。而假如断电时正在修改索引数据,就会导致索引不完整,读不出来,这个索引下的一大片数据就找不到了。索引在树状结构的位置越高,越靠近根索引,找不到的文件数据就越多。

exFAT 文件格式没有日志功能,没有记录下操作信息。遇到这种断电而数据不完整的情况,就没有足够的信息自动恢复。可能会丢一片文件,也可能直接分区不再可读。

NTFS 这种带日志功能的文件系统,在写文件时,会先在日志中做记录。将全部信息都写到日志后,再提交日志。我们可以举个简化例子,跟真实细节会有点不同,但了解其基本思想就够了。

比如我要写文件,经历了 4 个操作。

op1, op2, op3, op4

这 4 个操作需要同时完成,或者同时不能完全。假如只做完 op1、op2,突然断电,没有做完 op3、op4。文件系统处于数据不完整的中间状态。当没有日志功能的时候,这种中间状态就很难恢复。

当有日志功能的时候,系统不会直接做这个 4 个操作,而是将这 4 个操作先记录下来,写到日志中。变成

begin, op1, op2, op3, op4, end

begin 为操作开始,end 为操作结束。写入日志后,将操作提交时。再依次做 begin, op1, op2。假如这时断电,文件系统处于中间状态。但当磁盘再次通电的时候,系统从日志中获取信息,发觉还没有执行 end, 就表示上一次操作不完整。于是就重新执行

begin, op1, op2, op3, op4, end

文件系统也就从中间状态恢复过来了。基本原理就是这样,细节上面每个带日志的文件系统都可能有所不同。

这种思路是从数据库中借鉴过来的,数据库必须这种原子提交。原子(Atom)在这里是不可分割,必须是一个整体的意思。比如用户转账,实际分两个步骤,先从 A 账号扣钱,再往 B 账户加钱。两个步骤是不可分的整体,必须全部完全,或者全部不完成,不能处于中间状态。

有个细节需要提一下,op1, op2, op3 等操作没有必要是原子的,op1 这个操作也可以做一半,另一半没有完全。但 end 这个操作必须是原子的,end 是一个结束标记,必须一次完成。幸好磁盘可以保证任何 512 字节的写入都是原子的。

经过上述讨论,前文说不带日志的文件系统不够安全,并非是指这种系统将磁盘从物理上弄烂。比如磁头弯曲了,或者某个盘面刮花了之类。移动硬盘也没有那样容易烂。这里的不安全是指 exFAT 这种文件系统格式在文件系统不完整时,难以恢复过来。丢失索引,就丢失了一片数据。不过计算丢失索引,文件内容实际还在,是可以恢复过来的。只是恢复起来麻烦。找专业的人去恢复,恢复一个硬盘的数据,都够你重新买几个硬盘了。当文件系统不完整,导致分区读不出来时,重新格式一下,磁盘就恢复了。只是数据就丢失了。

就算使用 NTFS 这种带日志的文件格式,也应该养成弹出再拨线的好习惯。假如磁盘的碟片在高速转动,突然拨出断电,相当于高速行驶的大巴来个急刹车,反复多次还是会伤磁盘的。

Fat32、NTFS、exFAT、HFS+、APFS

有很多种不同的文件系统,假如是 Windows 和 Mac 用户,常见的就是上述几种。其中 Fat32、NTFS、exFAT 这三种格式是微软公司开发的,HFS+、APFS 这两种格式是苹果公司开发的。

FAT 是文件配置表(File Allocation Table)的首字母缩写,最开始供 MS-DOS 使用,一直演化。最开始有 Fat12,之后到 Fat16,到现在的 Fat32。Fat32 中的 32 是指 32 位。32 位最大值为 2 的 32 次方,就是 4G。Fat32 最大的限制是不能存储大于 4G 的文件。

NTFS 是 New Technology File System 的缩写,是微软为 Windows NT 开发的文件系统。80 年代,微软和 IBM 合作,开发图形操作系统 OS/2。但两个公司在很多问题上都有分歧,合作终止。微软让 Dave Cutler 领导开发下一代的操作系统。起初项目代号为 N10(N-Ten),也就是 NT, 只是后来 NT 的含义变成了很商业的 New Technology。OS/2 的文件系统叫 HPFS,包含许多重要功能。NTFS 借鉴了 HPFS,有很多共同之处。因为开发 NTFS、HPFS 这两个文件系统的就是同一批人。在 Windows 系统上,默认的文件格式就就是 NTFS。

exFAT 为(Extended File Allocation Table),也被称呼为 Fat64。NTFS 使用日志,会比非日志的文件格式读写更多的磁盘,对闪存储造成较大的负担,理论上 NTFS 格式的 U 盘容易损坏。exFAT 是微软专门为闪存开发的一种开发的文件格式,支持存储大于 4G 的文件。其实 U 盘也没有那样容易烂,烂了就换一个。U 盘格式成 exFAT 只是为了方便,Mac 和 Windows 都可读写,也可存放大文件。但正如上述,exFAT 没有日志功能。

初代的 Macintosh,文件系统叫 HFS(Hierarchical File System)。HFS 之后经过改进,就叫 HFS Plus 或 HFS+。在 APFS 之前,苹果的设备都使用 HFS+ 文件系统, 包括 iPhone、iPod。使用苹果的磁盘管理工具,不会直接显示为 HFS+, 而会显示 Mac OS 扩展。HFS+ 有多个选项,

  • 是否带日志功能。日志功能上面说了,应该选择带日志功能。貌似非日志功能已经不能选了。
  • 是否区分大小写。不区分大小写时,abc.txt 和 ABC.txt 就是同一个文件。区分大小写,abc.txt 和 ABC.txt 就是不同的文件。默认情况下,Mac 系统不会区分大小写,iOS 设备区分大小写。因此在做 iOS 开发时,有时 App 在模拟器上运行,可以找到文件。而在真机运行,就找不到文件。
  • 是否加密。选择加密时,要读取这个磁盘数据,就需要输入密码。

APFS 最苹果最新的文件系统,是 Apple File System 的缩写。HFS+ 文件系统有很久历史了,是针对传统的机械磁盘开发的文件系统。而苹果的所有设备,无论是 Mac 还是 iPhone, 都已经使用了 SSD 磁盘。因而针对于 SSD 做优化,开发了最新的下一代文件系统 APFS,在 iOS 10.3 时正式引入。APFS 支持写时复制,同一个文件,无论复制多少份,假如不修改,这个文件的实际内容只会在磁盘中存储一份,只是其索引有 N 份。当这个文件被修改,文件内容才会被真正复制。

=======================

转载自:https://zhuanlan.zhihu.com/p/59747958

原文地址:https://www.cnblogs.com/hd92/p/15116878.html