Ubuntu下U盘格式化为exFAT(Windows兼容)

保存时间:2026/3/29 21:50:03


Ubuntu下U盘格式化为exFAT(Windows兼容)
内容由豆包 AI 生成
我现在很久不用这个工具了,都有点忘了。我现在有个 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 操作系统应该不能识别。我忘了怎么做这个事情了。
你之前的问题很典型:直接对 /dev/sda 裸盘做 mkfs.vfat,没建分区表 / 分区,Windows 大概率不认;exFAT 才是你要的跨平台方案。下面给你 Ubuntu 20.04 下的标准、安全、Windows 100% 识别的完整流程。

一、先确认你的 U 盘设备(关键!别格错盘)

  1. 插入 U 盘,执行:
bash
运行
lsblk -o NAME,SIZE,MODEL,MOUNTPOINT
  • SIZEMODEL,U 盘一般是 /dev/sdb/dev/sdc不是 /dev/sda,sda 通常是系统盘!)
  • 记下来你的 U 盘:比如 /dev/sdb(下面都用 /dev/sdb 举例,你替换成自己的)
  1. 卸载所有挂载(如果有):
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 必认)

  1. 打开 fdisk:
bash
运行
sudo fdisk /dev/sdb
  1. 按以下步骤输入(一步步来):
  • o → 新建 DOS(MBR)分区表(你之前要的)
  • n → 新建分区
    • p → 主分区
    • 1 → 分区号 1
    • 回车(默认起始扇区)
    • 回车(默认占满整个 U 盘)
  • t → 改分区类型
    • 7 → 设为 NTFS/exFAT 类型(Windows 识别)
  • w保存并退出(必须做!)
  1. 让内核重读分区表(否则看不到 /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 不认)

  1. 直接对 /dev/sda 裸盘格式化:没有分区表 / 分区,Windows 不认这种 “无分区” 的盘
  2. 用了 vfat(FAT32):单文件最大 4GB,不如 exFAT;且你没建分区,更难识别
  3. fdisk 后没 w 保存 + 没 partprobe:内核没读到新分区表,所以没 /dev/sda1

七、最终结论

  • exFAT 是对的:Windows/macOS/Linux/ 手机全兼容,无 4GB 限制
  • 必须走:分区表 → 分区 → 格式化分区 三步
  • 目标一定是 /dev/sdX1(分区),不是 /dev/sdX(裸盘)
按上面步骤做完,插到 Windows 上会自动识别、直接用
要不要我把上面的命令整合成一个一键脚本,你直接复制运行就能完成整个格式化流程?
参考 15 篇资料
我现在已经创建好这个 VFAT 这个分区了,我现在要去创建文件系统,我用 mkfs 点 VFAT, 为什么不成功呢?
我直接给你最可能的原因 + 一步到位的解决办法,你照着做就能成功。

你现在 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 system
  • Device or resource busy
  • no such device
  • Device size does not match partition size
你把报错原文发我,我 1 秒定位。
我现在这个分区也建好了,文件系统也好了。我现在 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-ABCD

3)编辑 /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 内容,你复制粘贴就行。