Think Deep,Work Lean

文件系统

Posted on By zack

前言

刚入手mac时,刚开始入手,各种不习惯,各种“我x,真他么难用”,最让我头疼的就是移动硬盘只能读无法写入,当时google解决了问题,但也是知其然而不知其所以然。如今用了半年之后,已深深爱上mac。

文件系统

所谓文件系统,就是文件的储存方式。简单来说就是一个门牌系统,为储存设备划分门牌号,每个文件分配一个门牌,然后就能按照门牌找到文件。没有文件系统的硬盘是一个荒地,即使有人在那住,也无能精确的描述其位置。储存设备都需要文件系统,计算机才能读写。所谓格式化,就是为硬盘安装文件系统。不同的操作系统有不同的文件系统。Linux使用ext4. OSX使用HFS+, Windows使用NTFS,Solaris和Unix使用ZFS。如果计算机不认识某个文件系统就会显示这个硬盘无法读写。以上问题就是,NTFS是windows的专有系统,Mac可读不可写。

Windows的文件系统

三种:FAT32 NTFS exFAT

使用windows格式化的时候会让你选择类型。

FAT32:最老的文件系统,所有操作系统都支持,兼容性最好。但是为32位计算机设计的,文件不能超过2^32-1个字节,即不能超过4G;分区不能超过8T。适合小文件,大视频文件不适合。因此将硬盘格式改为这个后,mac就能读写。

NTFS:Windows默认文件系统,系统盘只能使用这个。移动硬盘买来后安装的也是这个系统。

exFAT: 可以看作是FAT32的64位升级版,ex就是extended的缩写,即扩展的FAT32。功能不如NTFS,但解决了文件和分区的大小问题,两者最大都可以达到128PB。MAC、Windows和Linux都可以读写这个。因此这个是最优选择。买来的移动硬盘直接格式化成这个就问题全部解决。

windows格式化方式不用说了,Mac在硬盘工具格式化,Linux安装工具exfat-untils exfat-fuse

Linux的exFAT格式化

fdisk -l

上面命令会列出本机的所有储存设备,移动硬盘一般是/dev/sdX1的形式,比如/dev/sdc1。这里需要了解sdX1的含义,sd表示可移动设备和SATA 设备,X表示设备的序号,依次为 a、b、c 等,最后的1表示这是该设备的第一个分区

格式化

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.

感谢软一峰大神