在 Linux 上格式化 U 盘与 SD 卡

在 Linux 上使用新的 U 盘或 SD 卡之前,可能需要先对其进行分区和格式化。大多数可移动驱动器出厂时已预先格式化为 FAT32,开箱即可使用,但在切换文件系统类型、修复损坏的驱动器或安全擦除数据时,可能需要重新格式化。

本指南介绍如何在 Linux 上使用 parted 和 mkfs 命令行工具格式化 U 盘或 SD 卡。

快速参考

如需可打印的快速参考,请参阅 parted 速查表。

任务命令
识别设备lsblk
卸载设备sudo umount /dev/sdb1
创建 MBR 分区表sudo parted /dev/sdb --script -- mklabel msdos
创建 GPT 分区表sudo parted /dev/sdb --script -- mklabel gpt
创建分区(整个磁盘)sudo parted /dev/sdb --script -- mkpart primary fat32 1MiB 100%
格式化为 FAT32sudo mkfs.vfat -F32 /dev/sdb1
格式化为 exFATsudo mkfs.exfat /dev/sdb1
格式化为 EXT4sudo mkfs.ext4 -F /dev/sdb1
格式化为 NTFSsudo mkfs.ntfs -f /dev/sdb1
验证分区表sudo parted /dev/sdb --script print
警告:格式化会擦除驱动器上的所有现有数据。如果 U 盘或 SD 卡上有重要文件,请在继续之前备份它们。

前提条件

parted 工具已预装在大多数 Linux 发行版中。通过运行以下命令验证其是否可用:

parted --version

如果未安装 parted,请使用发行版的包管理器安装。

在 Ubuntu、Debian 及其衍生版上:

sudo apt update && sudo apt install parted

在 Fedora、RHEL 及其衍生版上:

sudo dnf install parted

识别设备

将 U 盘或 SD 卡插入 Linux 计算机,然后使用 lsblk 命令识别设备名称:

lsblk

输出会列出所有可用的块设备:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0   237G  0 part /
└─sda3   8:3    0     1G  0 part [SWAP]
sdb      8:16   1  14.4G  0 disk
└─sdb1   8:17   1  14.4G  0 part /media/data

在本示例中,USB 设备为 /dev/sdb。设备名称会因你的系统和连接的驱动器数量而异。如果磁盘、分区与文件系统之间的关系不够清晰,我们关于块设备、分区和文件系统的指南涵盖了下文使用的术语。

在运行任何格式化命令之前,请通过 lsblk 输出中的大小和型号确认设备。

你也可以使用 dmesg 命令查找设备名称。插入驱动器后,运行:

dmesg | tail -10

输出会显示内核分配的设备名称:

[  +0.000232] sd 1:0:0:0: [sdb] 30218842 512-byte logical blocks: (15.5 GB/14.4 GiB)
警告:继续之前请仔细检查设备名称。格式化错误的设备(例如你的系统磁盘)将导致数据丢失。

卸载设备

如果驱动器当前已挂载,必须在格式化之前先卸载它。格式化已挂载的设备可能会损坏数据。

检查设备上的任何分区是否已挂载:

mount | grep sdb

如果输出显示挂载点,请将其卸载:

sudo umount /dev/sdb1

如果设备有多个分区,请逐个卸载。

选择文件系统

格式化之前,请选择适合你使用场景的文件系统:

文件系统最大文件大小跨平台最佳用途
FAT324 GBLinux, macOS, Windows小型 U 盘、启动介质、最大兼容性
exFAT16 EBLinux, macOS, Windows大容量 U 盘、大于 4 GB 的文件、跨平台使用
EXT416 TBLinux only仅 Linux 的驱动器、Linux 系统的外部存储
NTFS16 TBWindows, Linux (read/write)主要与 Windows 共享的驱动器

格式化为 FAT32

FAT32 是兼容性最广泛的文件系统。对于需要跨所有操作系统使用的驱动器,请使用它。请注意,FAT32 有 4 GB 的文件大小限制;如果你需要存储大于 4 GB 的文件,请改用 exFAT。

创建 MBR 分区表:

sudo parted /dev/sdb --script -- mklabel msdos

创建一个使用整个磁盘的 FAT32 分区:

sudo parted /dev/sdb --script -- mkpart primary fat32 1MiB 100%

将该分区格式化为 FAT32:

sudo mkfs.vfat -F32 /dev/sdb1

验证分区表:

sudo parted /dev/sdb --script print
Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdb: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  15.5GB  15.5GB  primary  fat32        lba

格式化为 exFAT

对于需要在 Linux、macOS 和 Windows 上工作且不受 FAT32 的 4 GB 文件大小限制的 U 盘和 SD 卡,exFAT 是推荐的文件系统。

首先,如果尚未安装 exFAT 工具,请先安装:

在 Ubuntu、Debian 及其衍生版上:

sudo apt install exfatprogs

在 Fedora、RHEL 及其衍生版上:

sudo dnf install exfatprogs

创建 MBR 分区表:

sudo parted /dev/sdb --script -- mklabel msdos

创建一个使用整个磁盘的分区。ntfs 提示符将 MBR 分区类型设置为 0x07,exFAT 也使用它以保持与 Windows 的兼容性。它不会创建 NTFS 文件系统:

sudo parted /dev/sdb --script -- mkpart primary ntfs 1MiB 100%

将该分区格式化为 exFAT:

sudo mkfs.exfat /dev/sdb1

格式化为 EXT4

如果驱动器只在 Linux 系统上使用,请使用 EXT4。EXT4 支持 Linux 文件权限、大文件以及日志功能。

创建 GPT 分区表:

sudo parted /dev/sdb --script -- mklabel gpt

创建一个使用整个磁盘的 EXT4 分区:

sudo parted /dev/sdb --script -- mkpart primary ext4 0% 100%

将该分区格式化为 EXT4:

sudo mkfs.ext4 -F /dev/sdb1

验证分区表:

sudo parted /dev/sdb --script print
Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdb: 15.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  15.5GB  15.5GB  ext4         primary

格式化为 NTFS

对于主要要与 Windows 系统共享的驱动器,请使用 NTFS。Linux 可以通过内核 5.15 引入的 ntfs3 内核驱动或 ntfs-3g 用户空间驱动读写 NTFS。具体可用和使用哪个驱动取决于你的发行版和内核配置。创建文件系统是另一回事,因为 mkfs.ntfs 来自 NTFS-3G 用户空间工具,而该工具默认并不总是存在。

如有需要,请安装 NTFS 工具:

在 Ubuntu、Debian 及其衍生版上:

sudo apt install ntfs-3g

在 Fedora、RHEL 及其衍生版上:

在 RHEL 及其衍生版上,安装 ntfsprogs 之前需要先启用 EPEL。

sudo dnf install ntfsprogs

创建 MBR 分区表:

sudo parted /dev/sdb --script -- mklabel msdos

创建一个使用整个磁盘的分区:

sudo parted /dev/sdb --script -- mkpart primary ntfs 1MiB 100%

将该分区格式化为 NTFS。-f 标志执行快速格式化:

sudo mkfs.ntfs -f /dev/sdb1

使用 GNOME 磁盘工具格式化

如果你更喜欢图形化工具,GNOME 磁盘(GNOME Disks)是最简单的选择,它预装在 Ubuntu、Fedora 和大多数基于 GNOME 的桌面上。如果缺失,可在 Ubuntu 和 Debian 上使用 sudo apt install gnome-disk-utility 安装,或在 Fedora 和 RHEL 上使用 sudo dnf install gnome-disk-utility 安装。

打开磁盘应用程序,从左侧列表中选择你的 U 盘或 SD 卡。通过核对大小和型号确认选择了正确的设备,然后点击停止(方块)按钮卸载任何已挂载的分区。

要格式化单个分区,请选中它并打开分区菜单(齿轮图标),然后选择“格式化分区”。输入卷名,选择文件系统(FAT 用于跨平台、Ext4 仅用于 Linux、或 NTFS 用于 Windows),然后点击格式化。要擦除整个驱动器并重新创建分区表,请打开驱动器菜单(右上角的三点图标)并选择“格式化磁盘”。

使用 GParted 格式化

GParted 是另一种常见的图形化选择,当你需要更改分区布局而不仅仅是格式化现有分区时,它是更好的选择。在 Ubuntu 和 Debian 上使用 sudo apt install gparted 安装,或在 Fedora 上使用 sudo dnf install gparted 安装。在 RHEL 8/9 及其衍生版上,运行 dnf 命令之前需先启用 EPEL。

启动 GParted,并从右上角的设备下拉菜单中选择 U 盘或 SD 卡。在继续之前检查大小和设备路径,因为 GParted 会在其找到的第一个磁盘上打开,而该磁盘通常是你的系统盘。如果设备上的某个分区已挂载,请右键点击它并选择“卸载”。

要从干净的驱动器开始,请打开“设备”菜单并选择“创建分区表”,然后选择 msdos 以获得广泛兼容性,或选择 gpt 用于大于 2 TB 的驱动器。创建新分区表会删除驱动器上的所有现有分区。在该对话框中点击“应用”即可立即写入新的分区表。

然后右键点击未分配空间,选择“新建”,从“文件系统”下拉菜单中选择文件系统,然后点击“添加”。创建和格式化新分区会被排队,因此这些操作会在你点击绿色对勾以应用它们时执行。

安全擦除驱动器(可选)

如果你要赠送或丢弃驱动器,可以覆盖写入驱动器以降低恢复旧文件的几率。对于正常的重新格式化,此步骤并非必要。

警告:覆盖写入 U 盘和 SD 卡并不能保证安全擦除。由于磨损均衡和重映射块的存在,旧数据可能残留在 dd 无法覆盖的闪存中。不要仅依赖零填充来清理包含敏感数据的闪存存储。

使用 dd 将整个驱动器用零覆盖写入:

sudo dd if=/dev/zero of=/dev/sdb bs=4096 status=progress

该过程会持续一段时间,具体取决于驱动器的大小。完成后,dd 会打印“设备上没有空间”的消息,这是正常现象:

15455776768 bytes (15 GB, 14 GiB) copied, 780 s, 19.8 MB/s
dd: error writing '/dev/sdb': No space left on device

擦除之后,按照上述步骤创建新的分区表并进行格式化。

故障排查

格式化时出现“设备或资源忙”:设备仍处于挂载状态。格式化之前,使用 sudo umount /dev/sdb* 卸载设备上的所有分区。

“权限被拒绝”:格式化需要 root 权限。请确保对所有 parted、mkfs 和 dd 命令都使用 sudo。

插入后未检测到驱动器:尝试不同的 USB 端口。运行 dmesg | tail -20 检查内核是否识别了该设备。如果没有输出,则驱动器或端口可能已损坏。

“无法满足分区上的所有约束”:mkpart 命令中的对齐或大小值相互冲突。使用 1MiB 作为起始值、100% 作为结束值,让 parted 自动处理对齐。

格式化后的驱动器变为只读:某些 SD 卡侧面带有物理写保护开关。请检查开关是否处于解锁位置。对于 U 盘,请检查 dmesg 输出中是否有写保护消息。

FAT32 不允许大于 4 GB 的文件:FAT32 有 4 GB 的文件大小限制。请将驱动器格式化为 exFAT,它支持几乎任意大小的文件,并且与 Linux、macOS 和 Windows 兼容。

常见问题

我应该为 U 盘使用哪种文件系统?如果需要跨平台兼容性且文件超过 4 GB,请使用 exFAT。若要与较旧的设备获得最大兼容性,请使用 FAT32。如果驱动器只在 Linux 系统上使用,请使用 EXT4。

我需要创建分区表吗,还是可以直接格式化原始设备?从技术上讲,无需分区表即可格式化原始设备(sudo mkfs.ext4 /dev/sdb),但建议先创建分区表。某些操作系统和设备无法识别没有分区表的驱动器。

MBR 和 GPT 分区表有什么区别?MBR(主引导记录)是较旧的标准,最多支持 4 个主分区,适用于最大 2 TB 的驱动器。GPT(GUID 分区表)支持更多分区以及大于 2 TB 的驱动器。当你需要与传统设备和固件获得广泛兼容性时,请使用 MBR。对于现代系统和更大的驱动器,请使用 GPT。parted 和 fdisk 命令都可以创建这两种类型。

如何使用图形化工具格式化驱动器?使用 GNOME 磁盘可快速格式化单个分区,而当你还需要更改分区布局时,请使用 GParted。这两种工具都在上面的章节中介绍过。

格式化后可以恢复数据吗?标准格式只会删除文件系统元数据,而不是实际数据。testdisk 或 photorec 等工具可能可以恢复文件。使用 dd 覆盖写入会降低可恢复性,但在基于闪存的介质(U 盘、SD 卡、SSD)上,由于磨损均衡的存在,安全擦除并不总是能得到保证。

结论

要在 Linux 上格式化 U 盘或 SD 卡,请使用 lsblk 识别设备、卸载它、用 parted 创建分区表,然后用 mkfs 格式化分区。跨平台使用请选择 FAT32 或 exFAT,仅用于 Linux 的驱动器请选择 EXT4。

本文译自 Linuxize,原文标题《How to Format USB Drives and SD Cards on Linux》。