exFAT 檔案系統指南

阮一峰發表於2018-10-16

國慶假期,我拍了一些手機影片,打算存到新買的行動硬碟。

然後,就傻眼了。我的 Mac 電腦無法寫入行動硬碟,因為行動硬碟的預設檔案系統是 NTFS,Mac 不支援寫入 NTFS。

雖然可以買一個軟體解決這個問題,但是我不想為這種功能付錢。經過一番研究,我發現把行動硬碟的檔案系統改成 exFAT,就可以解決問題,Mac 原生支援讀寫 exFAT。

由於這個問題很普遍,下面我就來寫一寫跟 exFAT 相關的知識。

一、檔案系統

所謂檔案系統,就是檔案的儲存方式。簡單說,它就是一個門牌系統,為儲存裝置劃分門牌號,每個檔案分配一個門牌,然後就能按照門牌找到檔案。

沒有檔案系統的硬碟,就是一塊荒地。如果有人住在那裡,你只能說那裡有人住,精確位置你說不出來。只有劃分了路牌,你才能說出,這個人住在"人民路15號",這樣才能精確定位。檔案系統就是路牌的劃分方法。

儲存裝置都需要指定檔案系統,計算機才能讀寫。所謂"格式化",就是為硬碟安裝檔案系統。不同的作業系統有不同的檔案系統,Linux 使用 ext4,OSX使用 HFS +,Windows 使用 NTFS,Solaris 和 Unix 使用ZFS。如果計算機不認識某個檔案系統,就會顯示這塊盤無法讀寫。

現在的問題就是,NTFS 檔案系統是 Windows 的專有系統,Mac 可以讀,但是預設不能寫入。

二、Windows 的檔案系統

Windows 系統主要有三種檔案系統。

  • FAT32
  • NTFS
  • exFAT

格式化硬碟的時候,Windows 系統會提供這三種檔案系統讓你選。這時應該選哪一種呢?

FAT32 是最老的檔案系統,所有作業系統都支援,相容性最好。但是,它是為32位計算機設計的,檔案不能超過 232 - 1 個位元組,也就是不能超過 4GB,分割槽不能超過 8TB。目前來看,這個檔案系統有點過時了,只適合小檔案,如果有大的影片檔案,就不能使用它。

NTFS 是 Windows 的預設檔案系統,用來替換 FAT32。Windows 的系統盤只能使用這個系統,行動硬碟買來裝的也是它。

exFAT 可以看作是 FAT32 的64位升級版,ex就是 extended 的縮寫(表示"擴充套件的 FAT32"),功能不如 NTFS,但是解決了檔案和分割槽的大小問題,兩者最大都可以到 128PB。由於 Mac 和 Linux 電腦可以讀寫這種系統,所以行動硬碟的檔案系統可以改成它。

三、解決方案

行動硬碟買來後,你把它格式化成 exFAT 檔案系統,問題就解決了。

Windows 在資源管理器或我的電腦裡面,都可以進行格式化。

Mac 在磁碟工具進行格式化。

格式化完成後,就 OK 了。如果你使用 Linux 系統,可能需要裝一下 exFAT 支援,Ubuntu 和 Debian 執行下面的命令。


$ sudo apt-get install exfat-utils exfat-fuse

一般讀者讀到這裡,就可以了。如果你像我一樣,想用 Linux 進行 exFAT 格式化,請接著往下讀。

四、Linux 的 exFAT 格式化

Linux 進行硬碟格式化,需要先找到裝置路徑。


$ sudo fdisk -l

上面命令會列出本機的所有儲存裝置,行動硬碟一般是/dev/sdX1的形式,比如/dev/sdc1。這裡需要了解sdX1的含義,sd表示可移動裝置和SATA 裝置,X表示裝置的序號,依次為 a、b、c 等,最後的1表示這是該裝置的第一個分割槽。

然後,使用下面的命令進行格式化。


$ sudo mkfs.exfat /dev/sdX1

注意,如果你的儲存裝置只顯示為/dev/sdX,沒有最後的數字,表明這個裝置沒有分割槽。exFAT 只能用來格式化硬碟的一個分割槽,所以必須先分割槽,再格式化,下面介紹如何分割槽。

五、分割槽表

所謂硬碟分割槽,就是指一塊硬碟上面,同時存在多個檔案系統。每個檔案系統管理的區域,就稱為一個分割槽(partition)。比如,一塊 100 GB 的硬碟,可以一半是 NTFS 分割槽,另一半是 exFAT 分割槽。

硬碟必須先分割槽,才能指定每個區的檔案系統。分割槽大小、起始位置、結束位置、檔案系統等資訊,都儲存在分割槽表裡面。

分割槽表也分成兩種格式:MBR 和 GPT。前者是傳統格式,相容性好;後者更現代,功能更強大。一般來說,都推薦使用 GPT。gdisk命令用於分割槽操作。


$ sudo gdisk /dev/sdX
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help):

上面命令表示對/dev/sdX進行分割槽。輸出結果表明,這個裝置還沒有分割槽表。

第一步,o命令表示建立 GPT 分割槽表。


Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

第二步,n命令表示新建一個分割槽。


Command (? for help): n
Partition number (1-128, default 1):
First sector (34-16326462, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-16326462, default = 16326462) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700
Changed type of partition to 'Microsoft basic data'

上面程式碼中,分割槽號(Partition number,預設為1)、起始扇區、結束扇區,都可以接受預設值,直接按回車。這時整個硬碟只建一個分割槽,佔據所有空間。檔案系統的型別要設成0700,代表 exFAT。

第三步,w命令表示寫入所有變更。


Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdX.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

到了這一步,分割槽表應該已經建立了。然後,使用上一節的命令,建立 exFAT 檔案系統。


$ sudo mkfs.exfat /dev/sdX1
mkexfatfs 1.0.1
Creating... done.
Flushing... done.
File system created successfully.

六、參考連結

(完)

相關文章