USB存储介质 - Linux上的数据完整性问题

Modified on: Mon, 19 Aug 2019 22:20:02 +0800

我一直有点偏执于验证备份到可移动媒体的数据,因此在将内容复制到USB闪存驱动器或便携式HDD之后,我总是卸载驱动器,重新安装它并使用原件对存储的文件进行差异化处理

多年前,我发现(至少使用我所拥有的设备),我看到的是1bit / GByte级别的错误。不知怎的(我忘记了细节)我发现在写任何数据之前,治愈是

echo 64 > /sys/block/sda/device/max_sectors

(假设媒体当然是sda)。
只要我记得这样做,我从来没有遇到任何问题。
(我相信默认的max_sectors值是128)。

我的问题是:

  • 这只是我吗?我已经看到了各种闪存驱动器,便携式硬盘驱动器,主板和笔记本电脑的问题(但从未对所有组合进行过详尽的测试,看看我是否有任何实际可靠的组合)。已经与windows一起使用的媒体和双启动窗口的机器似乎没有类似的问题,因此它看起来似乎是特定于Linux的。

  • 究竟是什么导致了这个问题?是否符合非标准的媒体,芯片组,电缆?

  • 我的系统(Debian Lenny)有什么可以自动设置的max_sectors? (一些HAL脚本或sysctl调整?更全局/ sys参数?)。据推测,默认的128是在内核的某个地方,但是自定义内核似乎有点激烈。

感谢您的任何建议

作者:timday

最佳答案

首先,当你得到一个新设备时,我可以建议向它写入数据,然后使用md5sum / sha1sum / ...验证数据。特别便宜的USB设备往往会被破坏。 :( USB笔在前几百(MB)工作正常并且在最后的MB上倾向于数据输出并不是那么不寻常。可悲的是,很多用户都没有意识到这一点并且发现问题太晚了:当USB笔充满时

您所说的问题通常位于USB芯片组(尽管有时仅在使用特殊硬件组合时才可见)。如果它适用于Windows但使用相同硬件的Linux失败,这听起来就像Windows内核中存在的解决方法(尚未存在)。而且,根据http://www.linux-usb.org/FAQ.html#i5(其中也提到了Genesys Logic提供的适配器的一些问题)。

要自动设置max_sectors:使用udev执行此任务。它允许您仅为要调整它的设备配置max_sectors。

您可以检索有关正在运行的USB设备的必需信息:

# udevadm info -a -p /sys/class/block/sda/

或旧的udev版本:

# udevinfo -a -p /sys/class/block/sda/

然后获取您要用于规则的属性,并创建一个新文件,如42-fix-max_sectors.rules,并将其放在/lib/udev/rules.d(使用最近的udev版本时)或/ etc / udev / rules.d(适用于较旧的udev版本)。要了解此配置文件的外观:

SUBSYSTEM=="block", ATTRS{model}=="Voyager Mini    ", RUN+="/bin/sh -c '/bin/echo 64 > /sys/block/%k/device/max_sectors'"

确保在编写规则文件后重新加载udev(通过运行/etc/init.d/udev reload)。为了测试您的配置文件,我建议使用:

# udevadm test /sys/class/block/sda/

PS:如果我注意到任何问题,我更愿意更换硬件,因为通常不值得努力处理任何变通办法(而且我确定你知道墨菲会抓住你的无论如何,只要你认为你已经有了它;))。


相关问答

添加新评论