國慶假期,我拍了一些手機視頻,打算存到新買的移動硬盤。
然後,就傻眼了。我的 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.
六、參考鏈接
- Formatting a Universal Drive
- What's the Difference Between FAT32, exFAT, and NTFS?
- How to Mount and Use an exFAT Drive on Linux
(完)