Linux命令行分区SD卡实战:从fdisk到parted的完整指南

📅 发布时间:2026/8/12 15:02:44
Linux命令行分区SD卡实战:从fdisk到parted的完整指南 1. 项目概述为什么要在Linux下分区SD卡在嵌入式开发、单板计算机如树莓派、旧设备扩容或者制作系统启动盘的场景里给SD卡分区是一项绕不开的基础操作。很多新手甚至一些有经验的开发者一听到“Linux命令行分区”就有点发怵总觉得那是系统管理员的领域操作不当会“炸卡”。其实只要理解了背后的逻辑和几个关键命令整个过程就像用尺子给一张白纸画格子一样清晰可控。我手头就经常备着几张SD卡用来给不同的开发板刷写系统或者作为便携的Linux实验环境。Windows下的图形化分区工具虽然直观但遇到一些特殊需求比如创建Linux特有的文件系统如ext4、调整已有分区而不丢失数据或者处理Windows不认的引导分区如/boot时就力不从心了。而Linux下的工具链如fdisk、parted提供了更底层、更灵活的控制能力。这篇文章我就以一名嵌入式开发者的视角拆解在Linux系统下对SD卡进行分区的完整步骤、背后的原理以及我踩过坑后总结出的实战经验。无论你是想为树莓派准备系统盘还是想优化你的外置存储设备这篇指南都能让你从“知道命令”升级到“理解每一步在做什么”。2. 核心工具与原理不只是敲命令在动手之前我们得先搞清楚手里的“武器”和它们的工作原理。这能让你在遇到问题时不至于盲目尝试而是知道该检查哪个环节。2.1 工具选型fdisk vs partedLinux下主流的命令行分区工具有两个经典的fdisk和更现代的parted。它们不是随便选的各有其适用场景。fdisk 传统但强大fdisk是一个基于文本菜单的交互式工具历史悠久几乎存在于所有Linux发行版中。它主要处理MBRMaster Boot Record分区表。MBR是一个老标准最多只支持4个主分区如果想更多需要创建扩展分区和逻辑分区并且单个分区最大不能超过2TB。适用场景 给容量小于2TB的SD卡、U盘进行常规分区制作大多数Linux或Windows启动盘使用MBR引导。优点 交互式菜单对新手相对友好步骤清晰。对于简单分区需求非常直接。缺点 不支持GPT分区表处理大容量2TB磁盘或需要创建超过4个主分区时会受限。parted 现代而全能parted是一个支持命令行参数和交互模式的全功能工具。它最大的优势是原生支持GPTGUID Partition Table分区表。GPT是新一代标准没有MBR的那些限制支持几乎无限数量的分区分区大小上限极高对于SD卡来说可以认为是无限的。适用场景 为大容量SD卡虽然少见但已有1TB的SD卡分区需要创建超过4个分区或者你明确需要GPT分区表例如为UEFI启动的系统准备SD卡。优点 功能强大支持更先进的分区表。可以直接通过命令行参数执行所有操作适合脚本化。缺点 命令行参数需要记忆对纯新手来说学习曲线稍陡。注意 还有一个工具叫gdisk它是专门为GPT分区表设计的可以看作是fdisk的GPT版本。如果你习惯fdisk的交互方式但又必须用GPTgdisk是个好选择。本文将以fdisk和parted为主要讲解对象因为它们覆盖了绝大多数需求。2.2 核心概念设备、分区与挂载在Linux中一切皆文件硬件设备也不例外。你的SD卡插入后会被系统识别为一个块设备文件通常位于/dev/sdX或/dev/mmcblkX。这里的X是一个字母比如a,b,c... 对于通过USB读卡器连接的SD卡通常是sdb,sdc等。对于直接插入笔记本SD卡槽的可能是mmcblk0。设备文件 如/dev/sdb代表整个SD卡物理存储介质。分区 在设备上划分出的逻辑区域。分区后每个分区会有一个新的设备文件如/dev/sdb1第一个分区、/dev/sdb2第二个分区。分区表 存储在设备开头的一个小区域记录了所有分区的起始位置、大小、类型等信息。MBR和GPT就是两种分区表格式。文件系统 分区格式化后用于组织和管理文件的结构如FAT32、NTFS、ext4。没有文件系统的分区就像一间没有书架和标签的空仓库无法存放文件。挂载 将分区已格式化为某种文件系统关联到系统目录树上的某个目录挂载点这样你才能通过这个目录访问分区里的文件。例如将/dev/sdb1挂载到/mnt/mysd。操作的核心流程就是找到正确的设备 - 可选创建新分区表 - 创建分区 - 在分区上创建文件系统 - 挂载使用。其中创建分区表会擦除设备上所有现有数据这是第一个需要万分小心的环节。3. 实战操作从识别设备到完成分区理论清楚了我们开始实战。请务必在操作前确认备份了SD卡内的重要数据因为分区操作是不可逆的。3.1 第一步准确识别你的SD卡设备这是最关键也最容易出错的一步。误操作了系统硬盘后果是灾难性的。插入SD卡前先查看现有磁盘。打开终端输入lsblk或者sudo fdisk -l这会列出当前系统所有的块设备。记下你的硬盘通常是/dev/sda或/dev/nvme0n1及其分区。插入SD卡再次执行上述命令。对比两次的输出多出来的那个设备就是你的SD卡。例如原来有sda插入后多了sdb那么/dev/sdb就是目标设备。如果显示为mmcblk0那么设备就是它其分区会显示为mmcblk0p1,mmcblk0p2等。lsblk的输出更直观它会以树状图显示设备和分区的归属关系并且会显示挂载点。如果SD卡已有分区并被自动挂载你会看到类似sdb1下面有/media/yourname/XXX的挂载信息。在分区前必须先卸载所有已挂载的分区。卸载已挂载的分区。如果lsblk显示你的SD卡分区如/dev/sdb1被挂载了使用以下命令卸载sudo umount /dev/sdb1如果多个分区都挂载了需要逐个卸载。也可以使用sudo umount /dev/sdb*但更建议逐个操作以避免误操作。实操心得 我养成的一个习惯是在执行任何破坏性操作前用lsblk确认三遍设备名。特别是在使用虚拟机时设备名分配可能不那么直观更要小心。一个保险的做法是通过设备容量来辅助判断fdisk -l会显示每个设备的容量。3.2 第二步使用fdisk进行MBR分区经典方法假设我们识别出的设备是/dev/sdb并且这是一张32GB的空白SD卡我们想为树莓派创建一个系统盘一个256MB的FAT32引导分区/boot剩余空间给根分区/。启动fdisksudo fdisk /dev/sdb这会进入fdisk的交互式命令行界面。创建新的MBR分区表如果需要。如果SD卡是全新的或者你想彻底重新分区首先需要创建分区表。在fdisk提示符通常是Command (m for help):后输入o然后回车。这会创建一个新的DOS即MBR分区表并清除所有现有分区。警告o命令会立即擦除所有分区信息且不可逆。请再次确认设备名无误。创建第一个分区引导分区。输入n创建新分区。选择分区类型p主分区。分区号接受默认1。第一个扇区接受默认值直接回车。指定分区大小输入256M表示256MB。fdisk很智能你可以用K,M,G,T为单位。此时第一个分区创建完成。更改第一个分区的类型。默认创建的分区类型是“Linux”类型代码83但引导分区需要是FAT32以便树莓派的固件能够读取。输入t更改分区类型。选择分区1。输入类型代码c在fdisk中c代表“W95 FAT32 (LBA)”。你也可以输入L来列出所有类型代码。创建第二个分区根分区。再次输入n创建新分区。选择p主分区。分区号接受默认2。第一个扇区接受默认值它会自动从第一个分区结束的位置开始。最后一个扇区也接受默认值这意味着占用所有剩余空间直接回车。第二个分区创建完成类型默认为“Linux”83正适合做ext4根分区。检查与写入。输入p打印当前的分区表布局仔细核对两个分区的起始位置、大小和类型是否正确。确认无误后输入w将分区表写入磁盘并退出。只有输入w后所有更改才会真正生效。如果中途想放弃所有更改输入q退出即可。3.3 第三步使用parted进行GPT分区现代方法假设我们有一张128GB的SD卡想为它创建GPT分区表并划分三个分区一个1GB的ESP分区用于UEFI启动一个100GB的Linux根分区剩余空间作为一个数据存储分区。启动partedsudo parted /dev/sdb进入parted交互模式。创建GPT分区表mklabel gpt输入yes确认。这会清除所有现有数据。创建ESP分区mkpart primary fat32 1MiB 1025MiBmkpart是创建分区命令。primary是分区名称在GPT中所有分区本质都是“主分区”这里只是标签。fat32是文件系统类型parted会据此设置分区标志。1MiB是起始位置。从1MiB开始是为了对齐这对SSD和SD卡的性能与寿命有益。1025MiB是结束位置。1MiB到1025MiB总共1024MiB即1GB。为ESP分区设置正确的标志set 1 esp onset命令用于设置分区标志。1是分区编号esp是标志on是启用。这告诉系统这是一个UEFI系统分区。创建根分区mkpart primary ext4 1025MiB 103GB从1025MiB开始到103GB结束大约100GB的空间。创建数据分区mkpart primary ntfs 103GB 100%从103GB开始到磁盘的100%即剩余所有空间。这里文件系统类型写了ntfs但parted并不真正格式化这只是个标签。实际格式化需要在后面用mkfs命令指定。查看与退出print查看最终分区布局。确认无误后输入quit退出parted。注意事项parted的某些命令如mklabel是立即生效的不像fdisk需要最后写w。所以操作时要更加谨慎。另外parted默认使用MiB、GiB等二进制单位IEC标准这与操作系统文件管理器显示的GB十进制略有差异属于正常现象。4. 分区后的必要操作格式化与挂载创建好分区表只是画好了格子我们还需要给每个格子“贴上标签”和“制定摆放规则”这就是格式化和挂载。4.1 格式化分区使用mkfsmake filesystem系列命令。根据你之前规划的文件系统类型选择命令。格式化第一个分区为FAT32适用于引导分区或Windows通用分区sudo mkfs.vfat -F 32 /dev/sdb1-F 32指定了FAT32格式。对于小于32GB的分区可以省略此参数mkfs.vfat会自动选择。格式化第二个分区为ext4Linux常用sudo mkfs.ext4 /dev/sdb2如果想添加卷标便于识别可以加上-L参数如sudo mkfs.ext4 -L MyRootFS /dev/sdb2。格式化分区为NTFSWindows读写Linux需额外驱动sudo mkfs.ntfs /dev/sdb3在大多数现代Linux发行版上需要安装ntfs-3g包才能完美支持NTFS的读写。4.2 挂载分区进行测试格式化后可以挂载到临时目录检查是否成功。创建挂载点目录sudo mkdir -p /mnt/test_boot /mnt/test_root挂载分区sudo mount /dev/sdb1 /mnt/test_boot sudo mount /dev/sdb2 /mnt/test_root检查挂载和文件系统df -h /mnt/test_boot /mnt/test_root这个命令会显示挂载点、已用空间、可用空间和文件系统类型。你还可以进入目录 (cd /mnt/test_root) 创建、删除文件来测试读写是否正常。卸载分区测试完成后sudo umount /mnt/test_boot /mnt/test_root5. 常见问题与排查技巧实录即使按照步骤操作也可能会遇到各种问题。下面是我在实践中总结的几个典型场景和解决方法。5.1 问题设备忙无法分区或格式化现象 执行fdisk /dev/sdb时提示 “Device or resource busy”或者mkfs失败。原因 这是最常见的问题意味着SD卡的某个或多个分区当前正被系统使用挂载。解决使用lsblk或mount | grep sdb查看/dev/sdb的哪些分区被挂载以及挂载点在何处。使用sudo umount 挂载点或sudo umount /dev/sdbX逐个卸载所有相关分区。如果是因为图形化文件管理器自动挂载了卸载后最好关闭文件管理器窗口或者弹出EjectSD卡再重新插入但不要让它自动挂载。一个强力但需谨慎的方法是使用sudo umount -l /dev/sdb*-l是 lazy unmount它会在设备不再繁忙时解除挂载但可能导致正在读写的数据丢失。5.2 问题分区后系统不识别或显示错误容量现象 在Linux下分区格式化一切正常但将SD卡插到Windows电脑或某些设备上只显示部分容量甚至完全不识别。原因分区表类型不兼容 Windows对GPT分区表的支持在旧版本上有限而一些嵌入式设备如老款行车记录仪、相机可能只认MBR。文件系统不兼容 Windows原生不识别ext4分区。如果SD卡上只有ext4分区Windows会提示需要格式化。“隐藏”分区 如果你创建了多个分区Windows默认只给第一个分区分配盘符。解决兼容性优先 如果SD卡需要在多种设备间通用强烈建议使用MBR分区表和单个FAT32分区。FAT32有单文件最大4GB的限制但对于大多数存储照片、文档的场景足够。为Windows分配盘符 在Windows的“磁盘管理”中可以给SD卡的其他分区如NTFS或exFAT分区手动分配盘符。使用exFAT 对于大容量SD卡且需要存储大文件4GBexFAT是一个很好的折中方案现代Linux、Windows、macOS都支持良好。格式化命令是sudo mkfs.exfat /dev/sdb1可能需要安装exfatprogs或exfat-utils包。5.3 问题误操作后如何恢复数据现象 错误地对包含重要数据的SD卡执行了fdisk的o命令或parted的mklabel命令。重要原则立即停止一切写入操作不要再向该SD卡复制任何文件。分区表被删除但分区内的数据在未被覆盖前仍有很大几率恢复。解决使用专业工具 在另一台电脑上使用数据恢复软件扫描SD卡。Linux下可以尝试testdisk它是一个功能强大的开源恢复工具。testdisk基本步骤安装sudo apt install testdiskDebian/Ubuntu运行sudo testdisk /dev/sdb在交互界面中选择磁盘分区表类型通常选Intel/PC for MBR进入[Analyse]分析。软件会搜索丢失的分区。如果找到可以将其添加到分区表[Write]或直接从中复制文件。寻求专业服务 如果数据极其重要考虑寻求专业数据恢复机构的帮助。5.4 高级技巧无损调整现有分区大小有时我们需要调整SD卡上已有分区的大小而不丢失数据。这比重新分区要复杂和危险。工具parted可以调整分区边界但前提是分区前后有未分配空间。更安全、功能更全的工具是gparted它是parted的图形化前端。基本流程使用gparted强烈推荐使用Live USB启动系统或者确保要调整的分区特别是根分区没有被挂载。启动gparted (sudo gparted)。选中SD卡设备。要缩小一个分区首先需要将其卸载。右键分区选择“Resize/Move”。拖动滑块或输入新的大小。操作后原分区后面会出现“未分配空间”。你可以将后面的分区向前移动以合并空间或者在未分配空间上创建新分区。所有操作都只是计划需要点击工具栏上的绿色对勾“Apply All Operations”才会真正执行。执行前会再次确认。警告 调整分区大小尤其是涉及移动分区起始位置的操作有数据丢失风险。务必先备份重要数据对于ext4等复杂文件系统缩小操作前可能还需要先运行sudo e2fsck -f /dev/sdbX检查文件系统并用sudo resize2fs /dev/sdbX 新大小来调整文件系统本身的大小以适应新的分区边界。gparted的优点在于它会自动处理这些步骤。我个人在多次为开发板准备系统镜像、调整存储布局后最大的体会是慢就是快。在敲下回车键前花十秒钟用lsblk和p打印命令反复确认设备名和分区布局能避免99%的悲剧。对于生产环境或存有唯一数据的SD卡任何分区操作的第一步都应该是用dd或cat命令做完整的磁盘镜像备份虽然耗时但这是最可靠的后悔药。Linux命令行赋予了我们强大的力量而谨慎和清晰的理解是安全驾驭这份力量的前提。