Transferência USB lenta quando dd direto para o dispositivo

Transferência USB lenta quando dd direto para o dispositivo

Mais um problema de transferência lenta. Eu tenho uma unidade SanDisk USB 3.0 recém-comprada. O laptop possui apenas USB 2.0, mas estou obtendo velocidades de transferência de aproximadamente 2 MB/s de forma consistente.

Estou transferindo um .imgpara a unidade:

dd if=my.img of=/dev/sdb status=progress

Ambos os itens acima iostatmostram 2 MB/s consistentes.

kern.log ao conectar fornece:

usb 2-1.2: new high-speed USB device number 6 using ehci-pci
usb 2-1.2: New USB device found, idVendor-0781, idProduct=5583
usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1.2: Product: Ultra Fit
usb 2-1.2: Manufacturer: SanDisk
usb 2-1.2: SerialNumber: 4C53....
usb-storage 2-1.2:1.0: USB Mass Storage device detected
scsi host7: usb-storage 2-1.2:1.0
scsi 7:0:0:0 Direct-Access SanDisk Ultra Fit 1.00 PQ: 0 ANSI: 6
sd 7:0:0:0 Attached scsi generic sg2 type 0
sd 7:0:0:0 [sdb] 30031250 512-byte logical blocks: (15.4 GB/14.3GiB)
sd 7:0:0:0 [sdb] Write Protect is off
sd 7:0:0:0 [sdb] Mode Sense: 43 00 00 00
sd 7:0:0:0 [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sd 7:0:0:0 [sdb] Attached SCSI removable disk

Parte relevante da lsusb -tsaída:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver-ehci-pci/3p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 2: Dev 6, If 0, Class=Mass Storage, Driver=usb-storage, 480M

Executando o Ubuntu 16.04 LTS Server no Dell 6320.

Para adicionar drivers:

# lsmod | grep pci
pci_stub       16384 1
vboxpci        24576 0
vboxdrv       454656 3 vboxnetadp,vboxnetflt,vboxpci
sdhci_pci      28672 0
sdhci          45056 1 sdhci_pci

# lsmod | grep hci
ahci           36864 4
sdhci_pci      28672 0
hibachi        32768 1
sdhci          45056 1 sdhci_pci

Responder1

Você deve simplesmente aumentar o tamanho do bloco de dd. O padrão é 1 único byte, mas você pode acelerar drasticamente o processo transferindo blocos de dados maiores de uma só vez. O parâmetro responsável é chamado bs.

Você pode querer experimentar um pouco os valores ideais, mas algo em torno de 4kB (4096 bytes) deve servir. Algumas fontes também recomendam tamanhos de bloco maiores, por exemplo, 32kB, 64kB ou até 128kB. Depende fortemente da estrutura física da unidade alvo qual valor é ideal e quase só pode ser descoberto por experiência. Você pode pensar em 4kB como limite inferior; tamanhos de bloco menores geralmente são muito mais lentos.

Mais informações sobre tamanhos de bloco ideais ddpodem ser encontradas emesta questão relacionada no Unix e Linux.

dd if=my.img of=/dev/sdb bs=4096 status=progress

informação relacionada