¿Cómo puedo acelerar la velocidad de escritura de la tarjeta SD (usando /dev/disk*) en una MacBook Pro?

He estado instalando algunas distribuciones de Linux en una tarjeta SD desde mi MacBook, aunque tardan más de una hora en transferir unos cientos de MB (usando ddy /dev/disk1).

dd salida

Si observa la salida anterior, ¡está funcionando a aproximadamente 0,31 MB/s! La tarjeta SD es Clase 10 y mi MacBook Pro es Intel Core 2 Duo de 2,66 GHz, DDR3 de 4 GB y 1067 MHz y OS X Lion 10.7.4. Aquí está el informe de hardware para el lector de tarjetas:

Lector de tarjetas SD integrado:

Id. de proveedor: 0x05ac
Id. de producto: 0x8403
Revisión: 1.00 Número de serie: 9833

Tarjeta SDHC:

Capacidad: 7,97 GB (7.969.177.600 bytes)
Medios extraíbles: Sí Nombre BSD: disk1
Tipo de mapa de partición: MBR (Registro de arranque maestro)
Estado SMART: No admitido
Volúmenes:

PI:
Capacidad: 7,96 GB (7964983296 bytes)
Sistema de archivos: MS-DOS
Nombre BSD: disk1s1
Contenido: DOS_FAT_32

¿Alguna idea de por qué la transferencia /dev/disk1es tan lenta y cómo podría acelerarla?

Suena como un problema de hardware para mí. Escuché que los MBP de 2011 tienen un lector SD defectuoso, pero también podría ser un problema con los anteriores. Pruebe con otra tarjeta SD, pero bien podría ser un problema con el lector de tarjetas, que desafortunadamente está conectado a la placa lógica en la mayoría de los MBP.
Compré la computadora portátil en 2009, Fedora ha estado copiando durante 2 horas y me he rendido. Nuevo tiempo de lector de tarjetas, creo.
Curiosamente, la velocidad de datos secuenciales es mucho mayor si usa Finder o Disk-Utility, ya que el culpable parece ser el almacenamiento en búfer de /dev/disk* como se explica en la respuesta de @pci

Respuestas (4)

Acabo de encontrarme con el mismo problema y parece que /dev/disk*es lento porque está almacenado en el búfer. Si usa el dispositivo rdisk correspondiente (por ejemplo: /dev/rdisk1s1), debería obtener la velocidad que espera. Aparentemente, esto es algo de BSD.

Ejemplo:

% sudo dd if=pi.bin of=/dev/disk1 bs=1m count=4095
^C408+0 records in
407+0 records out
426770432 bytes transferred in 1393.452305 secs (306268 bytes/sec)

% sudo dd if=pi.bin of=/dev/rdisk1 bs=1m count=4095
4095+0 records in
4095+0 records out
4293918720 bytes transferred in 378.669512 secs (11339489 bytes/sec)

Árbitro:

Esta es la mejor respuesta que he encontrado a esta pregunta ya que pude confirmar los resultados. Pasó de ~1,35 MB/s a 20 MB/s :)
Eso es, por supuesto, una pena (para Apple/BSD), aunque usar dd le brinda el mejor rendimiento posible ya que tiene un acceso largo de escritura (o lectura); a nivel de archivo y con acceso aleatorio, su rendimiento variará mucho, dependiendo de la tarjeta SD - Y: ¡excelente hallazgo @pci!
Es una larga historia, pero me acabas de ahorrar $90 en salmón que se estropearía si no arreglaba mi ahumador a tiempo.
Es un poco ridículo cómo puedes descargar un archivo a más de 20 Mbps durante miles de kilómetros, y los últimos metros es inalámbrico. Pero transferir datos unos pocos centímetros a través de una conexión dura es mucho más lento.
Gracias. Estaba buscando copiar 7 GB de datos durante ~ 10 horas cuando decidí que no era aceptable y encontré esta respuesta, muy útil.
Respuesta muy útil... Sin embargo, mi lector dice USB 3.0 pero se quedó en 6.0 MB/s... No estoy seguro de por qué... Usando una tarjeta microSD SDHC (4). De todos modos, aún mucho mejor ya que era de 1.0 MB/s cuando se usabadisk1
bueno, eso marcó la diferencia... pasó de 2,0 ~ 2,2 mb/s a 42,0 ~ 46,5 mb/s... ¡qué diferencia hace un carácter 'r'! ¡Gracias!

Bien podría ser que la tarjeta SD sea tan lenta.

Eche un vistazo a este punto de referencia (Random Write, 4 KB (QD=1) [MB/s]) y verá que la mayoría de las tarjetas SD tienen un pésimo rendimiento de escritura (menos de 100 kB/s) para archivos pequeños, y un La instalación típica de Linux consiste en una gran cantidad de archivos pequeños que se escriben en el disco.

El lector de tarjetas interno debe ser capaz de leer/escribir al menos 20 MB/s; es muy poco probable que otro lector de tarjetas mejore su experiencia con esta misma tarjeta SD.

Una vez que todos los archivos están escritos, es decir, el sistema está instalado, es posible que pueda ejecutar Linux desde la tarjeta SD a una velocidad aceptable, ya que en su mayoría es acceso de lectura.

Para el votante negativo, vea esta publicación
Sin embargo, sería un buen experimento probar la tarjeta en otro lector que se sabe que es bueno y probar una tarjeta que se sabe que es buena en el lector sospechoso. Observe también que todo el "papeleo" para crear nuevos archivos (en lugar de escribir su contenido) en las estructuras de datos del sistema de archivos es muy grande para muchos archivos pequeños.
Si bien las tarjetas SD no son muy rápidas, la velocidad (328198 bytes/seg y más tarde 288881 bytes/seg) no puede ser inimaginable para las tarjetas SD actuales (se siente más como unidades de disquete). Dado que esto es 'dd', significa un solo archivo, no varios archivos pequeños.

Si la tarjeta está montada con la opción de sincronización, esto significa que cada archivo que se cierra hace que la escritura se vacíe en el disco y, por lo tanto, su rendimiento en archivos pequeños será terrible en comparación con archivos grandes. Si elimina la sincronización de las opciones de montaje, entonces no hay garantía de que escribir un archivo haga que se vaya al disco: debe llamar manualmente a la sincronización desde la línea de comandos o desmontar el dispositivo antes de quitarlo o apagarlo. Sin embargo, sin sincronización, debería ver que el rendimiento de escritura de archivos pequeños mejora drásticamente.

Según man mount, async ya es el valor predeterminado.

No, esto es claramente un problema con Mac OS. Obtengo un rendimiento significativamente más rápido cuando realizo esta misma operación con Linux en una máquina virtual que se ejecuta en el mismo Macintosh. Es decir, la VM es aproximadamente 5 veces más rápida que el sistema operativo nativo.