如何使 USB 闪存驱动器在 Linux 上可写入?

如何使 USB 闪存驱动器在 Linux 上可写入?

我想重新格式化 SanDisk Cruzer Edge USB 闪存盘,但它显示为只读:

$ sudo dd if=/dev/zero of=/dev/sdg
dd: failed to open ‘/dev/sdg’: Read-only file system

我使用以下命令检查了只读状态hdparm

$ sudo /usr/sbin/hdparm /dev/sdg
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 14 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 multcount     =  0 (off)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 1017/124/62, sectors = 7821312, start = 0

readonly显示标志,off但我仍然无法写入驱动器。我该如何解决这个问题?


dosfsck在设备上运行后,我得到以下输出:

$ sudo /usr/sbin/dosfsck /dev/sdg
fsck.fat 3.0.22 (2013-07-19)
Logical sector size (1766 bytes) is not a multiple of the physical sector size.

答案1

我猜测是,当您插入设备时,您的 GUI 会自动将设备安装到某个位置。例如,当我将 USB 记忆棒插入我的 Mate/Marco 1.12 系统时:

[root@frog ~]# mount
   ...
   ...
/dev/sdg on /run/media/pgoetz/4474-E825 type vfat (rw,nosuid,nodev,relatime,uid=
1001,gid=1001,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,
shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

安装后,您将无法实际dd访问该设备,直到卸载分区为止:

umount /dev/sdg

有点奇怪的是,如果我在分区挂载时尝试运行 dd;例如

dd bs=4M if=./archlinux-2016.04.01-dual.iso of=/dev/sdg

它声称正在复制文件,但直到分区卸载后才真正进行复制。系统必须缓存写入,因为无法实际写入设备。

答案2

尝试使用 gparted 或类似工具重新分区。我假设您只需要一个分区,因此删除所有内容并创建一个您选择的 FS。

哦,顺便问一下,你的意思不是 /dev/sdg1 之类的吗?据我所知,末尾必须有一个数字,而不仅仅是 sdg

另外:考虑一下你使用这个闪存驱动器的时间以及你向其中写入数据的强度。闪存每个单元的写入操作总数是有限的(阅读此处)。达到限制时,驱动器通常应变为只读。我说通常情况下,因为在某些情况下驱动器会完全发生故障 - 如果您使用廉价的低质量设备,就会发生这种情况。

相关内容