Ubuntu系统 SD 卡格式化 FAT32

最近在搞嵌入式开发(比如烧录 uboot 镜像)时,需要把 SD 卡格式化为 FAT32 格式,结果遇到了 “设备已挂载无法格式化” 的报错,踩了几个小坑后终于搞定。今天就把完整流程整理出来,不管是日常用 SD 卡存文件,还是嵌入式开发前置操作,都能直接套用~

一、先划重点:格式化前必须做的事!

备份数据!备份数据!备份数据!

格式化会清空 SD 卡里的所有内容,哪怕是隐藏文件也会被删。如果卡里有重要照片、代码或者镜像文件,先复制到电脑硬盘里,确认备份完成再往下走,别等删了才后悔!

二、第一步:找到 SD 卡的 “身份证”—— 设备名称

Ubuntu 里每个存储设备都有专属名称(比如/dev/mmcblk0),如果选错设备,可能会把电脑硬盘格式化,所以这步一定要仔细!

  1. 插好 SD 卡:用读卡器把 SD 卡插电脑(如果是笔记本内置 SD 卡槽,直接插就行);
  2. 打开终端:按Ctrl+Alt+T召唤终端,输入命令查看所有存储设备:
lsblk

或者更详细的信息(需要管理员权限):

sudo fdisk -l
  1. 识别 SD 卡:看输出结果里的 “大小” 和 “类型”,SD 卡通常是这样的:

举个我之前的例子,lsblk输出里,/dev/mmcblk0p1就是 SD 卡的第一个分区,大小和我的 SD 卡一致(比如 32GB),记好这个名称(后面要用到)。

  • 内置卡槽的 SD 卡:名称一般是/dev/mmcblk0(设备),分区是/dev/mmcblk0p1(后面带p1的是分区);
  • USB 读卡器的 SD 卡:名称可能是/dev/sdb(设备),分区是/dev/sdb1;
  • 重点区分:电脑硬盘通常是/dev/sda,别认错!

三、第二步:解决 “设备已挂载” 报错 —— 卸载 SD 卡

我之前执行格式化命令时,直接报了mkfs.vfat: /dev/mmcblk0p1 contains a mounted filesystem,原因是 SD 卡插上去后 Ubuntu 自动挂载了,必须先卸载才能格式化。

  1. 查挂载点:先看 SD 卡分区挂载在电脑的哪个目录,输入命令:
mount | grep /dev/mmcblk0p1  # 把/dev/mmcblk0p1换成你的SD卡分区名称

输出会像这样:/dev/mmcblk0p1 on /media/你的用户名/XXX type vfat (…),其中/media/你的用户名/XXX就是 “挂载点”;

  1. 执行卸载:用umount命令卸载,两种方式选一个就行:
  • 用挂载点卸载(更稳妥):
sudo umount /media/你的用户名/XXX  # 替换成上一步查到的挂载点
  • 用设备名称卸载:
sudo umount /dev/mmcblk0p1  # 替换成你的SD卡分区名称
  1. 如果卸载失败?:如果提示 “设备正被使用”,说明有程序在占用 SD 卡(比如打开了 SD 卡的文件夹),先关掉所有相关窗口,再试一次。还不行的话,用命令查占用进程并终止:
# 查看哪个进程在占用SD卡
sudo fuser -m /dev/mmcblk0p1
# 终止占用进程(注意:确认不是重要进程再执行!)
sudo fuser -k -m /dev/mmcblk0p1

终止后再重新卸载,一般就能成功了。

四、第三步:格式化 SD 卡分区为 FAT32

卸载完成后,就可以正式格式化了,分两种场景,根据你的需求选:

场景 1:只格式化现有分区(推荐,操作简单)

如果 SD 卡已经有分区(比如之前的/dev/mmcblk0p1),直接格式化这个分区:

sudo mkfs.vfat -F 32 /dev/mmcblk0p1  # 替换成你的SD卡分区名称
  • mkfs.vfat:Ubuntu 里格式化 FAT 系列文件系统的命令;
  • -F 32:指定格式为 FAT32(必须加,不然可能默认 FAT16);

执行后如果看到mkfs.fat 4.2 (2021-01-31)这样的提示,说明格式化正在进行,等几秒就好。

场景 2:重新分区(适合分区损坏、想调整大小)

如果 SD 卡分区混乱,或者想删掉旧分区重新建,就用fdisk工具(注意:这会删掉 SD 卡所有分区,谨慎!):

  1. 进入分区工具:输入命令(替换成 SD 卡设备名称,不是分区!比如/dev/mmcblk0):
sudo fdisk /dev/mmcblk0
  1. 删除旧分区
  • 输入d(delete,删除分区),如果有多个分区,会提示删哪个,按提示输入分区号(比如1),重复d直到所有分区都删掉;
  1. 创建新 FAT32 分区
  • 输入n(new,新建分区);
  • 选分区类型:输入p(primary,主分区,日常用选这个就行);
  • 分区号:默认1,按回车;
  • 起始扇区:直接回车(用默认值);
  • 结束扇区:想占满 SD 卡就直接回车,想指定大小就输入+SIZEG(比如+16G表示分 16GB);
  1. 设置分区类型为 FAT32
  • 输入t(type,修改分区类型);
  • 输入b(W95 FAT32 的代码是b,按回车);
  1. 保存退出
  • 输入w(write,保存修改并退出),如果提示 “正在同步磁盘”,等完成就好;
  1. 格式化新分区:刚建的分区还是 “空的”,需要再执行格式化命令(比如新分区是/dev/mmcblk0p1):
sudo mkfs.vfat -F 32 /dev/mmcblk0p1

五、第四步:验证格式化是否成功?3 种方法确认

别以为执行完命令就万事大吉了,最好验证一下,避免后续用的时候出问题。

方法 1:查文件系统类型

用blkid命令看分区类型,是否为 FAT32(Ubuntu 里 FAT32 显示为vfat):

sudo blkid /dev/mmcblk0p1

如果输出里有TYPE=”vfat”,比如:

/dev/mmcblk0p1: UUID="XXXX-XXXX" TYPE="vfat" PARTUUID="XXXX-XXXX"

说明格式对了!

方法 2:挂载测试读写

格式化后,试试能不能正常用,步骤如下:

  1. 创建临时挂载点
sudo mkdir -p /mnt/sdtest  # /mnt/sdtest是临时目录,随便起名字
  1. 挂载 SD 卡
sudo mount /dev/mmcblk0p1 /mnt/sdtest
  1. 测试读写
  • 进入挂载目录:cd /mnt/sdtest;
  • 创建测试文件:touch test.txt;
  • 写内容到文件:echo “SD卡格式化测试” > test.txt;
  • 读文件:cat test.txt,如果能看到 “SD 卡格式化测试”,说明读写正常;
  1. 卸载临时目录
cd ~  # 先退出挂载目录,不然卸不掉sudo umount /mnt/sdtest

方法 3:看分区摘要

用lsblk -f快速看文件系统:

lsblk -f /dev/mmcblk0p1

输出里FSTYPE列显示vfat,就没问题。

六、最后:这些注意事项别忽略!

  1. FAT32 的限制:单个文件不能超过 4GB,如果要存大文件(比如超过 4GB 的镜像),得用 exFAT(Ubuntu 需要先装exfat-fuse和exfat-utils);
  2. 嵌入式开发提醒:如果格式化 SD 卡是为了烧录 uboot、Linux 镜像,注意有些镜像需要 SD 卡是 “可引导” 的,单纯格式化 FAT32 可能不够,后续还要用dd命令烧录镜像;
  3. 别拔太快:格式化、挂载、卸载过程中,别拔 SD 卡,容易损坏分区;
  4. 设备名称别乱改:每次插 SD 卡,设备名称可能变(比如换读卡器可能从/dev/mmcblk0变成/dev/sdb),每次操作前都用lsblk确认一下!

写在最后

其实 Ubuntu 下格式化 SD 卡不难,关键是 “别认错设备” 和 “先卸载再格式化”,我之前踩的 “设备已挂载” 坑,本质就是没注意 SD 卡被自动挂载了。按照上面的步骤来,不管是日常用还是嵌入式开发,都能搞定~

如果操作中遇到其他问题,比如格式化后 SD 卡不识别、命令报错,欢迎在评论区留言,一起交流解决!

如果觉得本文对您有所帮助,可以支持下博主,一分也是缘♥️
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇