我将一些 MySQL-DB 内容复制到我的 Class 6 SD 卡上。传输需要 45 分钟。同一台装有 XP 的机器几分钟就可以完成,另一台装有 Win7 的机器传输也很好。检查了所有论坛和来源,但没有找到真正相关的内容。
答案1
有时默认的 IO 调度程序对这些闪存驱动器的处理很差。我发现一个有用的解决方案是将 ioscheduler 切换到最后期限或者无操作仅适用于该设备。例如,
$ lsscsi [0:0:0:0] 磁盘 ATA TOSHIBA THNS128G AGLA /dev/sda [1:0:0:0] cd/dvd HL-DT-ST DVDRAM GT30N LT09 /dev/sr0 [7:0:0:0] 磁盘 Patriot Memory PMAP /dev/sdb
sudo tee /sys/block/sdb/queue/scheduler << EOF
deadline
EOF
$ cat /sys/block/sdb/queue/scheduler noop [截止时间] cfq
现在再次尝试数据传输,你必须这样做前您加载该设备。
如果这对您有用,可以创建一个 udev 规则来自动为所有 usb 热插拔设备设置此项。这是我很久以前写的一个,有点复杂,我相信它只扫描 usb 热插拔设备,而不是 MMC 卡,所以您必须检查 udev 输出以确定您的媒体属于哪个类别并进行相应调整。
自行承担风险,如果这对你不起作用,则由你自行调试
sudo tee /lib/udev/rules.d/100-usb-scheduler.rules << EOF
# custom udev rule: 28.10.11
# adjust io scheduler for usb block devices: queue/scheduler
# scheme based on "persistent storage rules"
# forward scsi device event to corresponding block device
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
ACTION!="add|change", GOTO="persistent_storage_end"
SUBSYSTEM!="block", GOTO="persistent_storage_end"
# skip rules for inappropriate block devices
KERNEL=="fd*|mtd*|nbd*|gnbd*|btibm*|dm-*|md*", GOTO="persistent_storage_end"
# ignore partitions that span the entire disk
TEST=="whole_disk", GOTO="persistent_storage_end"
# for partitions import parent information
ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
# USB storage devices suffer from performance issues unless they use deadline io scehduler
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", \
RUN="/bin/sh -c 'echo deadline > /sys/$env{DEVPATH}/queue/scheduler'"
LABEL="persistent_storage_end"
EOF
$ sudo chmod +x /lib/udev/rules.d/100-usb-scheduler.rules