移動硬盤使用什么文件系統格式


起因

為什么要研究這個問題呢?我最近為了將一部 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM