先把当时的情况摆出来。一台 CentOS 7 上插了块 2T 的 NTFS 移动硬盘做数据中转,mount -t ntfs 挂上后 cp 进去报 Read-only file system,dmesg 里提示只读挂载是因为内核模块只支持读。

这类报错背后常见的原因有几处,逐个排除就行。内核自带的 ntfs 驱动只支持读,写入需要 ntfs-3g 走 FUSE。还有一种是ntfs-3g 没装,mount 自动回退到内核模块并静默变成只读。

不容易想到的是,Windows 侧没有正常弹出,分区带脏标记,ntfs-3g 会拒绝读写以外的方式挂载。还有一种情况,挂载参数漏了 rw,或者 fstab 里写的是 ntfs 类型。

动手时先确认当前用的是哪个驱动

mount | grep -i ntfs && lsmod | grep -i ntfs

再往下安装用户态驱动

yum install -y ntfs-3g && rpm -q ntfs-3g

接着按可写方式重新挂载

umount /mnt/usb && mount -t ntfs-3g -o rw,uid=0,gid=0,umask=022 /dev/sdc1 /mnt/usb

复制文件验证写入

cp /tmp/test.iso /mnt/usb/ && ls -l /mnt/usb/test.iso && sync

恢复的判定其实很直接。mount 输出里类型为 fuseblk 且带 rw,复制进去的文件大小正确,sync 之后重新插拔能在 Windows 上正常看到该文件。

带脏标记的 NTFS 分区别强行加 force 参数去写,容易损坏索引;跨系统中转数据用 exFAT 更省事,NTFS 在 Linux 上始终是兼容方案。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189