Ubuntu下SD卡分区格式化全攻略:从fdisk到parted实战指南

📅 2026/8/2 6:27:28 👁️ 阅读次数 📝 编程学习
Ubuntu下SD卡分区格式化全攻略:从fdisk到parted实战指南

1. 项目概述:为什么要在Ubuntu下折腾SD卡分区?

如果你手头有一张SD卡,无论是准备给树莓派装系统、给相机扩容,还是想把它变成一个便携的Linux启动盘,大概率都绕不开“分区”和“格式化”这两个步骤。在Windows下,我们习惯用图形化的“磁盘管理”点点鼠标就搞定,但到了Ubuntu这类Linux系统里,很多人就有点犯怵了,面对命令行工具fdiskparted,感觉像是在拆解一个精密仪器,生怕一步操作失误就把卡里的数据全弄丢了。

我之所以写这篇东西,是因为最近帮好几个朋友处理SD卡时,发现他们要么是直接用dd命令烧录镜像导致卡容量“缩水”,要么是想调整分区大小却无从下手。其实,在Linux环境下管理SD卡分区,一旦掌握了核心命令和背后的逻辑,比图形界面更高效、更精准。这篇文章就是把我这些年踩过的坑、总结的经验,用最直白的方式捋一遍。无论你是刚接触Ubuntu的新手,还是想深入了解磁盘管理的开发者,都能在这里找到可以直接“抄作业”的步骤和必须知道的“避坑指南”。

我们将从最基础的识别SD卡设备开始,一步步深入到使用fdisk进行分区、用mkfs进行格式化,最后还会聊聊如何用parted处理大容量卡和调整分区大小这些进阶操作。放心,我不会只扔给你一堆命令,每个命令是干什么的、为什么这么用、按错了怎么办,我都会讲清楚。

2. 核心工具与概念解析:认识你的“手术刀”

在动手之前,我们得先搞清楚要和谁打交道,以及我们手里的工具都是干嘛的。在Linux中,一切皆文件,磁盘设备也不例外。

2.1 存储设备在Linux中的标识

当你把SD卡通过读卡器插入Ubuntu电脑后,系统会把它识别为一个块设备,并分配一个设备文件,通常位于/dev/目录下。关键是如何从一堆设备中准确找到你的SD卡。

  • 设备命名规则:对于通过USB接口连接的SD读卡器,最常见的设备名是/dev/sdX,其中X是一个小写字母,如a,b,c等。系统会根据检测顺序分配字母。你的第一块内置硬盘可能是sda,那么SD卡就可能是sdbsdc
  • 如何精准识别:最可靠的方法是使用lsblk(列出块设备)命令。在插入SD卡前后各执行一次lsblk,对比输出,多出来的那个设备就是你的SD卡。这个命令会以树状结构显示设备、分区及其挂载点,非常清晰。
lsblk

输出可能类似这样:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi └─sda2 8:2 0 465.3G 0 part / sdb 8:16 1 29.7G 0 disk └─sdb1 8:17 1 29.7G 0 part /media/user/MY_SD

上面例子中,sda是我的内置硬盘,下面有两个分区。sdb就是我的SD卡,它下面有一个分区sdb1,并且被自动挂载到了/media/user/MY_SD请务必记住你的SD卡设备名(例如sdb),后续所有危险操作都基于这个名称,千万不能选错!

重要提示:所有对/dev/sdX设备的操作都是直接对磁盘底层数据进行操作,一旦执行格式化、删除分区等命令,数据将立即丢失且难以恢复。操作前请务必双重确认设备标识,并确保已备份重要数据。

2.2 分区表类型:MBR vs GPT

就像一本书需要目录一样,磁盘也需要一个“分区表”来记录各个分区的起止位置和类型。主流的有两种:

  1. MBR:传统的主引导记录。它历史悠久,兼容性极好,几乎所有系统都支持。但它有两个主要限制:一是最多只支持4个主分区(可以通过扩展分区和逻辑分区绕开);二是无法管理超过2TB的磁盘。对于容量通常小于2TB的SD卡,MBR完全够用,也是很多嵌入式设备(如树莓派)的默认要求。
  2. GPT:GUID分区表。这是现代标准,没有MBR的那些限制,支持几乎无限数量的分区,能管理超大容量磁盘。如果你的SD卡容量很大(比如1TB),或者你希望使用更现代的分区方案,GPT是更好的选择。

对于SD卡,我的个人建议是:除非有特殊需求(如容量大于2TB,或需要非常多分区),否则优先使用MBR。因为其兼容性最好,特别是在各种单板计算机、相机、车载设备上,GPT支持可能不完善。

2.3 核心命令行工具介绍

我们将主要使用两个工具:经典的fdisk和更强大的parted

  • fdisk:轻量级、交互式的分区工具。它简单直接,适合大多数SD卡分区场景(尤其是MBR分区表)。它的操作是“对话式”的,输入命令后需要等待它执行并给出新的提示符。对于新手,我强烈建议从fdisk开始,因为它每一步都会让你确认。
  • parted:功能更全,支持MBR和GPT,并且可以非交互式地执行命令(写脚本更方便)。它还能直接调整已有文件系统的大小(需要文件系统本身支持,如ext4)。但它的交互模式对新手不那么友好。

此外,格式化工具我们主要用mkfs系列命令,如mkfs.vfat(创建FAT32分区)、mkfs.ext4(创建ext4分区)等。

3. 实战操作:使用fdisk进行分区与格式化

这是最经典、最常用的流程。我们假设你的SD卡设备是/dev/sdb,并且这是一张全新的或者你已备份好数据、准备重新规划的卡。

3.1 第一步:卸载所有已挂载的分区

在操作磁盘之前,必须确保该磁盘上的所有分区都没有被系统使用(即未挂载)。如果前面lsblk命令显示有MOUNTPOINTS,就需要卸载。

sudo umount /dev/sdb1 sudo umount /dev/sdb2 # 如果有多个分区,逐一卸载

或者使用udisksctl更优雅地卸载:

udisksctl unmount -b /dev/sdb1

3.2 第二步:启动fdisk并查看现状

使用sudo权限启动fdisk操作你的SD卡:

sudo fdisk /dev/sdb

你会进入fdisk的交互界面,命令行提示符会变成Command (m for help):。首先,输入p并回车,打印当前的分区表。对于一张新卡或已清空的卡,这里会显示“没有定义分区”。

3.3 第三步:创建新的分区表(如果需要)

如果这是一张旧卡,或者你想彻底改变分区方案(比如从MBR换成GPT),需要先创建新的分区表,这会清除所有现有分区

Command提示符下:

  1. 输入g并回车,创建一个新的GPT分区表。
  2. 或者输入o并回车,创建一个新的MBR(DOS)分区表。

创建完成后,再次输入p查看,应该显示为空。

3.4 第四步:创建新分区

现在开始创建分区。假设我们创建两个分区:一个512MB的FAT32启动分区(sdb1),和一个占用剩余空间的ext4根分区(sdb2)。

  1. 输入n并回车,开始新建分区。
  2. 它会问分区类型。对于MBR,主分区(Primary)和逻辑分区(Logical)的选择,如果你分区数少于4个,直接选主分区(p)即可。输入p并回车。
  3. 分区号:直接回车,接受默认值(1)。
  4. 第一个扇区:直接回车,从磁盘起始位置开始(默认值)。
  5. 最后一个扇区:这里可以指定大小。输入+512M并回车,表示创建一个大小为512MB的分区。这样,第一个分区sdb1就创建好了。
  6. 再次输入n创建第二个分区。
  7. 分区类型选p(主分区)。
  8. 分区号回车用默认的2。
  9. 第一个扇区直接回车,紧接上一个分区之后开始。
  10. 最后一个扇区直接回车,使用所有剩余空间。

现在输入p查看,你应该能看到两个分区的详细信息,包括它们的起始结束位置、扇区数和ID。

3.5 第五步:设置分区类型(可选但重要)

分区类型(Partition type)是一个十六进制代码,用于标识这个分区的用途。虽然现代Linux不那么依赖它,但一些引导程序或特定设备(如树莓派)会检查它。

  1. 输入t并回车,修改分区类型。
  2. 选择分区号1
  3. 输入类型代码c(对应W95 FAT32 (LBA)),这是FAT32分区常用的类型。或者你也可以输入L来列出所有类型代码。
  4. 选择分区号2
  5. 输入类型代码83(对应Linux原生文件系统)。

3.6 第六步:保存并退出

仔细检查p命令打印的信息,确认无误后,输入w并回车,将分区表写入磁盘并退出。这是一个不可逆的操作!如果发现错了,可以输入q不保存直接退出,然后重新开始。

退出fdisk后,系统可能会提示你需要重新读取分区表。你可以使用partprobe /dev/sdb命令通知内核更新分区信息,或者直接重启系统(通常不需要)。

3.7 第七步:格式化分区

分区只是划好了“地盘”,还需要在上面创建“文件系统”(即格式化),才能存储文件。

  1. 格式化第一个分区(FAT32)

    sudo mkfs.vfat -F 32 -n BOOT /dev/sdb1
    • -F 32:指定FAT32格式。
    • -n BOOT:给这个分区设置一个卷标(名字)为“BOOT”,方便识别。
  2. 格式化第二个分区(ext4)

    sudo mkfs.ext4 -L ROOTFS /dev/sdb2
    • -L ROOTFS:设置卷标为“ROOTFS”。

至此,使用fdisk进行分区和格式化的核心流程就完成了。你可以用lsblk -f命令查看新分区的文件系统类型和标签。

4. 进阶与排错:应对复杂场景和常见问题

掌握了基本流程,我们来看看一些更复杂的情况和容易踩的坑。

4.1 使用parted处理大容量卡与调整分区

parted工具在处理GPT分区和调整已有分区大小时更有优势。它支持更直观的大小单位(如GB, MB)。

使用parted创建GPT分区

sudo parted /dev/sdb

(parted)提示符下:

mklabel gpt # 创建GPT分区表 mkpart primary fat32 1MiB 513MiB # 创建FAT32分区,从1MB开始到513MB(留出1MB对齐空间) set 1 boot on # 为第一个分区设置boot标志(某些系统需要) mkpart primary ext4 513MiB 100% # 创建ext4分区,用完剩余空间 print # 查看分区表 quit # 退出

注意,parted命令是立即生效的,没有单独的“保存”步骤,所以操作要更谨慎。

调整分区大小(危险操作): 假设你想缩小sdb2(ext4分区)以腾出空间创建一个新分区。

  1. 必须首先卸载分区并检查文件系统
    sudo umount /dev/sdb2 sudo e2fsck -f /dev/sdb2 # 强制检查ext4文件系统
  2. 缩小文件系统本身(这是关键,必须在缩小分区空间之前做):
    sudo resize2fs /dev/sdb2 15G # 将文件系统缩小到15GB(假设目标大小)
  3. 使用parted缩小分区边界
    sudo parted /dev/sdb resizepart 2 16GB # 将第2个分区的结束位置设为16GB(给文件系统留点余量) quit
    这个顺序不能错:先缩小文件系统,再缩小分区。反过来会导致数据丢失。扩大分区则顺序相反:先扩大分区,再扩大文件系统。

4.2 常见问题与排查技巧实录

问题1:SD卡插入后无法识别,lsblk里看不到。

  • 可能原因与排查
    1. 读卡器或USB口问题:换一个USB口或读卡器试试。有些老旧的读卡器对SDXC(大容量)卡支持不好。
    2. 卡本身物理损坏:尝试在其他电脑或设备上读取。
    3. 分区表严重损坏:系统可能将其识别为未知设备。可以尝试使用sudo fdisk -lsudo parted -l查看所有设备,有时会以“未知设备”列出。可以使用testdisk等工具尝试修复或恢复数据。

问题2:使用dd命令写入镜像后,SD卡容量“变小”了。

  • 原因dd是逐扇区复制,它会把镜像文件的分区表原封不动地写到SD卡上。如果镜像文件原本是4GB,那么你的128GB的SD卡在系统看来也就只有4GB可用空间了。
  • 解决方案:这就是我们需要学习分区的原因。写入镜像后,你可以用fdiskparted删除镜像后面的空白分区(如果有的话),然后创建一个新的分区,或者直接扩展最后一个分区的大小(如果它是ext4等可扩展的文件系统)。更简单的方法是,对于树莓派等系统,很多官方镜像在首次启动时会自动调用raspi-config等工具扩展根分区。

问题3:格式化时提示“设备忙”或“找不到有效的文件系统超级块”。

  • 排查
    1. 设备忙:百分之九十九是因为分区还被挂载着。用lsblk确认,并用umount彻底卸载。
    2. 超级块错误:这通常意味着这个分区之前被错误地格式化或者已经损坏。你可以尝试用sudo mkfs.ext4 -F /dev/sdb2-F强制创建)来重新格式化。注意:这会摧毁所有数据。

问题4:分区后,Windows系统不识别SD卡。

  • 原因:Windows默认只能识别MBR分区表上的第一个FAT/NTFS主分区。如果你在Linux下创建了多个分区,或者把分区放在了扩展分区里,Windows可能只显示第一个分区或者直接提示需要格式化。
  • 解决方案:如果需要在Windows和Linux间共享SD卡,最简单的方案是只创建一个使用MBR分区表的FAT32或exFAT分区。FAT32有单文件4GB的限制,exFAT没有,但兼容性稍差(旧系统或设备可能不支持)。

问题5:操作失误,误删了分区或格式化了有数据的卡。

  • 紧急处理
    1. 立即停止一切写入操作!不要往卡里存任何新东西。
    2. 使用数据恢复工具:在Ubuntu上,可以安装testdiskphotorectestdisk擅长恢复分区表和被删除的分区,photorec擅长按文件类型恢复文件。它们都是免费开源的强大工具。
    3. 恢复过程:将SD卡设为只读(如果硬件支持),或者连接到另一台电脑作为从盘进行恢复操作,这是最安全的方式。

我个人在实际操作中的体会是,磁盘分区是个“细活儿”,耐心和谨慎比什么都重要。每次执行w(写入)或parted的修改命令前,深呼吸,再核对一遍设备名和分区参数。对于重要数据盘的操作,我习惯先在一个虚拟机的虚拟磁盘上演练一遍流程。另外,给分区起一个有意义的卷标(-n-L参数)是个好习惯,在文件管理器里一目了然,能有效避免混淆。最后,记住那句老话:备份、备份、再备份。在你敲下回车键之前,确保数据已经安全地待在另一个地方。