我有一个 USB 记忆棒(SanDisk Cruzer Facet 64G),看起来已经磨损了。我曾经在里面存了很多小文件(每个 500kB),使用起来很顺畅,没有出现任何性能问题;当我想删除它们时,甚至要花很长时间才能删除一个文件。我怀疑挂载选项relatime
有问题,因为每个unlink
选项都可能碰到包含已用块链的块,导致性能不佳。我用 重新挂载noatime
,这次删除所有文件的速度非常快。
出于好奇,我再次将一些小文件复制到它上面,这次它出现了严重的性能问题。一旦 FS 缓存满了,速度就会下降到每秒几 kB。使用 挂载时也是如此sync
。
然后我重新创建了文件系统(ext4),但问题仍然存在。
我使用了badblocks -w
,但它报告说在磁盘棒的开始处(前 2000 个块左右)没有坏块。(我应该让它一直运行到最后吗?)然后我在其上重新创建了一个分区(标记为 lba、扇区对齐、分区从 4096 开始),但问题仍然存在。
不确定该如何解释这个,除非这是写入放大的症状:由于棒子里塞满了小文件,所以每次新的写入都会导致读取-删除-修改-写入。
我尝试了 TRIM,但结果只是fstrim: SAN_M: FITRIM ioctl failed: Remote I/O error
。看来 USB 控制器不支持 TRIM。
在没有 TRIM 的情况下,我怎样才能让这个 USB 棒(它仍然可以接受文件,尽管性能不佳)恢复到原来的性能?
谢谢。
答案1
USB 驱动器的磨损均衡性不是很好,内存的耐用性也不是很好。每次写入时,驱动器就离坟墓更近一步。
据我所知,由于您无法修剪 USB 驱动器,因此 Linux 下唯一的选择是将驱动器归零,dd
dd if=/dev/zero of=/dev/sdc
其中 sdc 是所讨论的驱动器。
此后它会运行得更好。但同时也会磨损驱动器。
低级格式化可以用 进行Windows
,也许可以Wine
在 下进行Linux
。
以下是一些 Windows 程序:https://m.majorgeeks.com/files/details/usb_low_level_format.html http://hddguru.com/content/en/software/2006.04.12-HDD-Low-Level-Format-Tool/
答案2
事实证明,我仍然可以毫无问题地以大约 10 MB/s 的速率将大文件(>100MB)写入到该设备中(这有点像我之前的 IO 速率,集线器显然不允许更高的速率)。只有大量小文件才会导致性能下降,正如问题中所述,即使使用relatime
mount 选项也是如此。