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

17

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).

salida dd

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

Lector de tarjetas SD incorporado:

ID del proveedor: 0x05ac
ID del 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: disco1
Tipo de mapa de partición: MBR (Master Boot Record)
Estado SMART: No compatible
Volúmenes:

PI:
Capacidad: 7.96 GB (7,964,983,296 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?

StuR
fuente
Suena como un problema de hardware para mí. Escuché que los MBP de 2011 tienen un mal lector de SD, pero también podrían ser un problema con los anteriores. Pruebe con otra tarjeta SD, pero 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.
ladrones
Compré la computadora portátil en 2009, Fedora ha estado copiando ahora durante 2 horas y me he rendido. Nuevo lector de tarjetas de tiempo, creo.
StuR
Curiosamente, la velocidad de datos secuencial es mucho mayor si utiliza 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
iolsmit

Respuestas:

38

Acabo de encontrar el mismo problema y parece ser que /dev/disk*es lento porque está protegido. Si utiliza el dispositivo rdisk correspondiente (ej .:) /dev/rdisk1s1, debería obtener la velocidad que espera. Esto es aparentemente una cosa 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:

pcl
fuente
1
Esta es la mejor respuesta que he encontrado para esta pregunta, ya que pude confirmar los resultados. Pasó de ~ 1.35 MB / seg a 20MB / seg :)
nessence
1
Por supuesto, es una pena (para Apple / BSD), aunque usar dd le brinda el mejor rendimiento posible ya que tiene un acceso de escritura (o lectura) largo; a nivel de archivo y con acceso aleatorio, su rendimiento variará mucho, dependiendo de la tarjeta SD. Y: ¡excelente búsqueda @pci!
iolsmit
2
Es una larga historia, pero me ahorraste $ 90 en salmón que iba a ir mal si no podía arreglar a mi fumador a tiempo.
deweydb
3
Es ridículo cómo puedes descargar un archivo a 20 + Mbps a lo largo de miles de kilómetros, y en 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.
Jonathan.
Gracias. Estaba buscando copiar 7 GB de datos durante aproximadamente 10 horas cuando decidí que no era aceptable y encontré esta respuesta, muy útil.
Barak
3

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

Eche un vistazo a este punto de referencia (escritura aleatoria, 4 KB (QD = 1) [MB / s]) y verá que la mayoría de las tarjetas SD tienen un rendimiento de escritura pésimo (por debajo de 100 kB / s) para archivos pequeños, y un La instalación típica de Linux consiste en una gran cantidad de pequeños archivos escritos 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 tarjeta SD.

Una vez que se escriben todos los archivos, es decir, el sistema está instalado, es posible que pueda ejecutar Linux desde la tarjeta SD a una velocidad aceptable, ya que se trata principalmente de acceso de lectura.

Iolsmit
fuente
1
Para el votante
negativo
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.
Thorbjørn Ravn Andersen
Mientras que las tarjetas SD no son muy rápidas, la velocidad (328198 bytes / seg y posteriores 288881 bytes / seg) no puede ser inimaginable para las tarjetas SD actuales (se parece más a las unidades de disquete). Como esto es 'dd', significa un solo archivo, no múltiples archivos pequeños.
Barak
1

Si la tarjeta se monta con la opción de sincronización, esto significa que cada cierre de archivo hace que la escritura se vacíe al 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, no hay garantía de que escribir un archivo haga que salga al disco: debe llamar manualmente a la sincronización desde la línea de comandos o desmontar el dispositivo antes de eliminarlo o apagarlo. Sin embargo, sin sincronización, debería ver que el rendimiento de escritura de archivos pequeños mejora drásticamente.

ddiepo
fuente
1
Según man mount, async es el valor predeterminado ya.
nohillside
1

No, esto es claramente un problema con Mac OS. Obtengo un rendimiento significativamente más rápido cuando hago esta misma operación usando 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.

John Kraft
fuente