如何在写入 USB 设备时关闭其缓存?

如何在写入 USB 设备时关闭其缓存?

使用 ubuntu/kubuntu 通过 USB 安装微控制器原型板时,无法将二进制程序传输到该板。使用 MacOS 和 Windows 则没有问题。我发现 Ubuntu 的写入肯定会更改写入的文件。我怀疑写入缓存是问题所在。我该如何禁用它,或者还有什么其他问题。

答案1

请先阅读以下内容:http://groups.google.com/group/linux.kernel/msg/8d1591196c0ae15e?pli=1
我不确定这是不是真的。

您可以尝试使用 hdparm 在运行时将写入缓存功能设置为关闭。(您可能需要在每次启动后或每次移除并重新插入设备后运行此操作)

sudo hdparm -W 0 /dev/devicename

请确保您知道正确的设备名称(sdbsdc等等)。

您可以通过运行以下命令来找出设备名称:

sudo fdisk -l

您还可以编辑/etc/fstab和添加挂载选项sync,dirsync,但我不太熟悉/etc/fstab可移动设备的工作原理。我认为它们需要一个永久挂载点。

答案2

感谢@NightwishFan 使用 hdparm 开关来设置驱动器的写入缓存功能。

请注意,syncmount 选项会将速度降低一个数量级(超过 10 倍)。mountflush选项可确保有效写入,且不会影响性能。此外,我在我使用过的所有 FAT 设备(旋转或基于闪存)上使用它已有几年了,没有任何问题:实际上,整个 mount 选项集都是noauto,users,noatime,flush,umask=111,dmask=000手动设置的,或者在 /etc/fstab 中设置。

答案3

我已将“sync”替换为“noatime,flush”,如@tuk0z 回答中所述。

这导致 USB 软盘驱动器的行为与同步相同,但它写入文件的速度要快得多,就像您期望的正常操作速度一样。

从软盘读取映像文件不会再导致随机伪像。此外,读取 DD 软盘不会在文件名中导致奇怪的字符。

也许“mount”的官方文档对用法的上下文描述有点不幸。

赞!

相关内容