我现在已经创建好这个 VFAT 这个分区了,我现在要去创建文件系统,我用 mkfs 点 VFAT, 为什么不成功呢?
Ubuntu下U盘格式化为exFAT(Windows兼容)
导出时间:2026/5/19 12:43:55
来源地址:https://www.doubao.com/chat/38418137491274242
消息数量:6
我直接给你最可能的原因 + 一步到位的解决办法,你照着做就能成功。
你现在 mkfs.vfat 失败,99% 是这 3 个原因
1)你在格式化 整个磁盘 /dev/sda,而不是 分区 /dev/sda1
你之前说:
我直接对/dev/sda做了 mkfs.vfat
这绝对不行。Windows / Linux / 手机 都要求:必须先有分区 → 再格式化分区
你现在要格式化的是:
plaintext
/dev/sda1 ✅
不是:
plaintext
/dev/sda ❌
2)分区还在挂载状态 → 不能格式化
先执行:
bash
运行
sudo umount /dev/sda1
如果提示 “not mounted” 就没事。
3)你没有加 -F 32(强制 FAT32)
正确命令:
bash
运行
sudo mkfs.vfat -F 32 /dev/sda1
你现在只需要按顺序做这 3 步
1. 确认你有分区
bash
运行
lsblk
你必须看到:
/dev/sda/dev/sda1<-- 这个才是分区
没有 sda1 就不能格式化,必须回去用 fdisk 建分区。
2. 卸载(必须)
bash
运行
sudo umount /dev/sda1
3. 格式化 FAT32
bash
运行
sudo mkfs.vfat -F 32 -n "USB" /dev/sda1
如果你还是失败,把报错贴给我,我立刻告诉你哪里错
常见报错:
/dev/sda1 is apparently in use by the systemDevice or resource busyno such deviceDevice size does not match partition size
你把报错原文发我,我 1 秒定位。
我现在很久不用这个工具了,都有点忘了。我现在有个 U 盘在我的 Ubuntu 20.4 下,我要去给它创建一个在 Windows 操作系统下能够识别的文件系统。我认为 exFAT 可能是最好的,因为它能兼容手机跟这个 Windows 平台,也可以 Linux 也可以,它是比较兼容的。但是我使用 fdisk 去创建一个 DOS 的这样 partition partition table。但是照理说通常会有一个 sda1。就是说它的设备就是这个设备的这个是 SDA,就是 slash dev slash dev SDA。照理说正常会创建一个它一个新的 partition 是 slash dev slash SDA 1,就是加个一,但好像没有创建。然后我就直接使用 make 可爱 FS 点 V A T 去创建了这么一个文件系统, VFAT 的文件系统是对这个 SDA 去创建。这样我总觉得好像那个很多 Windows 操作系统应该不能识别。我忘了怎么做这个事情了。
搜索 3 个关键词,参考 15 篇资料
你之前的问题很典型:直接对 /dev/sda 裸盘做 mkfs.vfat,没建分区表 / 分区,Windows 大概率不认;exFAT 才是你要的跨平台方案。下面给你 Ubuntu 20.04 下的标准、安全、Windows 100% 识别的完整流程。
一、先确认你的 U 盘设备(关键!别格错盘)
- 插入 U 盘,执行:
bash
运行
lsblk -o NAME,SIZE,MODEL,MOUNTPOINT
- 看SIZE和MODEL,U 盘一般是
/dev/sdb、/dev/sdc(不是 /dev/sda,sda 通常是系统盘!) - 记下来你的 U 盘:比如
/dev/sdb(下面都用/dev/sdb举例,你替换成自己的)
- 卸载所有挂载(如果有):
bash
运行
sudo umount /dev/sdb* 2>/dev/null
二、安装 exFAT 工具(Ubuntu 20.04 默认没有)
bash
运行
sudo apt update
sudo apt install exfat-fuse exfat-utils -y
三、用 fdisk 建 MBR(DOS)分区表 + 1 个主分区(Windows 必认)
- 打开 fdisk:
bash
运行
sudo fdisk /dev/sdb
- 按以下步骤输入(一步步来):
o→ 新建 DOS(MBR)分区表(你之前要的)n→ 新建分区p→ 主分区1→ 分区号 1- 回车(默认起始扇区)
- 回车(默认占满整个 U 盘)
t→ 改分区类型7→ 设为 NTFS/exFAT 类型(Windows 识别)
w→ 保存并退出(必须做!)
- 让内核重读分区表(否则看不到
/dev/sdb1):
bash
运行
sudo partprobe /dev/sdb
- 再
lsblk确认:现在应该有/dev/sdb1了
四、格式化 /dev/sdb1 为 exFAT(Windows / 手机 / Linux 全兼容)
bash
运行
sudo mkfs.exfat -n "MY_USB" /dev/sdb1
-n "MY_USB":给 U 盘起个名字(可改)- 目标是 /dev/sdb1(分区),不是 /dev/sdb(裸盘)
五、验证与挂载
- 查看:
lsblk -f /dev/sdb→ FSTYPE 列应显示 exfat - 挂载测试:
bash
运行
sudo mkdir -p /mnt/usb
sudo mount /dev/sdb1 /mnt/usb
ls /mnt/usb # 能看到空目录就是成功
sudo umount /mnt/usb
六、你之前的错误点(为什么 Windows 不认)
- 直接对 /dev/sda 裸盘格式化:没有分区表 / 分区,Windows 不认这种 “无分区” 的盘
- 用了 vfat(FAT32):单文件最大 4GB,不如 exFAT;且你没建分区,更难识别
- fdisk 后没 w 保存 + 没 partprobe:内核没读到新分区表,所以没
/dev/sda1
七、最终结论
- exFAT 是对的:Windows/macOS/Linux/ 手机全兼容,无 4GB 限制
- 必须走:分区表 → 分区 → 格式化分区 三步
- 目标一定是 /dev/sdX1(分区),不是 /dev/sdX(裸盘)
按上面步骤做完,插到 Windows 上会自动识别、直接用。
要不要我把上面的命令整合成一个一键脚本,你直接复制运行就能完成整个格式化流程?
我现在这个分区也建好了,文件系统也好了。我现在 mount 的时候要用这个,我不想用这个 superuser 速度去 mount,用普通的 mount。那个 dash o 后面是跟 user 还是怎么样?就是我能够普通用户去 mount 这个目录吗? mount mount 这个文件分区吗?
我直接给你最简单、一次成功、普通用户就能 mount/umount的写法,不用 sudo。
一句话答案
你要在
/etc/fstab 里加一行,然后普通用户就可以:bash
运行
mount /mnt/usb
umount /mnt/usb
一步一步做(非常简单)
1)先建一个挂载点(随便你放哪)
bash
运行
mkdir -p ~/usb
# 或者
sudo mkdir /mnt/usb
2)查看你 U 盘分区的 UUID(非常重要)
bash
运行
blkid /dev/sda1
你会看到类似:
plaintext
/dev/sda1: UUID="1234-ABCD" TYPE="vfat" PARTUUID="..."
把 UUID="xxxx" 里的内容记下来,比如:
1234-ABCD3)编辑 /etc/fstab
bash
运行
sudo nano /etc/fstab
在最后加一行(把 UUID 换成你自己的):
plaintext
UUID=1234-ABCD /mnt/usb vfat defaults,user,utf8,umask=000 0 0
关键就是这里的参数:
- user → 允许普通用户 mount
- umask=000 → 普通用户可读可写
- utf8 → 中文不乱码
4)保存退出
nano 里:
Ctrl+O→ 回车Ctrl+X
现在普通用户直接用
bash
运行
mount /mnt/usb
不用 sudo,直接成功。
用完:
bash
运行
umount /mnt/usb
如果你不想改 fstab,临时用一次
普通用户直接这样 mount 也可以:
bash
运行
mount -o user,utf8,umask=000 /dev/sda1 /mnt/usb
你告诉我:你想挂载到 ~/usb 还是 /mnt/usb?我可以直接给你完整一行 fstab 内容,你复制粘贴就行。