Como acelerar a velocidade de gravação do cartão SD (usando / dev / disk *) em um MacBook Pro?

17

Estou instalando algumas distribuições linux em um cartão SD do meu MacBook, embora elas levem mais de uma hora para transferir algumas centenas de MB (usando dde /dev/disk1).

saída dd

Se você observar a saída acima, ela está funcionando a aproximadamente 0,31 MB / s! O cartão SD é da classe 10 e meu MacBook Pro é o Intel Core 2 Duo de 2,66 GHz, 4 GB de 1067 MHz DDR3 e OS X Lion 10.7.4. Aqui está o relatório de hardware para o leitor de cartão:

Leitor de cartão SD incorporado:

ID do fornecedor: 0x05ac
ID do produto: 0x8403
Revisão: 1,00 Número de série: 9833

Cartão SDHC:

Capacidade: 7,97 GB (7.969.177.600 bytes)
Mídia removível: Sim Nome BSD: disk1
Tipo de mapa de partição: MBR (registro mestre de inicialização)
Status SMART: não suportado
Volumes:

PI:
Capacidade: 7,96 GB (7,964,983,296 bytes)
Sistema de arquivos:
Nome BSD do MS-DOS : disk1s1
Conteúdo: DOS_FAT_32

Alguma idéia de por que a transferência /dev/disk1é tão lenta e como eu poderia acelerar?

StuR
fonte
Parece um problema de hardware para mim. Ouvi dizer que os MBPs de 2011 têm um mau leitor de SD, mas também pode ser um problema com os anteriores. Tente outro cartão SD, mas pode ser um problema com o leitor de cartão, que infelizmente está conectado à placa lógica na maioria dos MBPs.
robmathers
Eu comprei o laptop em 2009, o Fedora já copia há 2 horas e eu desisti. Nova hora do leitor de cartões, eu acho.
StuR
Curiosamente a taxa de dados seqüencial é muito maior se você usar o Finder ou Disk-Utility como o culpado parece ser o buffer de / dev / disk * conforme explicado na resposta da @pci
iolsmit

Respostas:

38

Acabei de encontrar o mesmo problema e parece ser /dev/disk*lento porque está em buffer. Se você usar o dispositivo rdisk correspondente (ex:), /dev/rdisk1s1deverá obter a velocidade esperada. Aparentemente, isso é coisa do BSD.

Exemplo:

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

Ref:

pcl
fonte
1
Esta é a melhor resposta que encontrei para esta pergunta, pois pude confirmar os resultados. Passou de ~ 1,35 MB / seg para 20MB / seg :)
nessence
1
É claro que é uma pena (para Apple / BSD) - embora, o uso do dd esteja oferecendo o melhor desempenho possível, pois você tem um acesso longo de gravação (ou leitura); no nível do arquivo e com acesso aleatório, seu desempenho varia muito, dependendo do cartão SD - E: excelente localização @pci!
iolsmit
2
É uma longa história, mas você me salvou US $ 90 em salmão que ia mal se eu não conseguisse consertar meu fumante a tempo.
deweydb
3
É ridículo como você pode baixar um arquivo a mais de 20 Mbps ao longo de milhares de quilômetros e, nos últimos metros, é sem fio. Mas transferir dados alguns centímetros através de uma conexão rígida é muito mais lento.
Jonathan.
Obrigado. Eu estava olhando para copiar 7 GB de dados em aproximadamente 10 horas quando decidi que não era aceitável e achei esta resposta - muito útil.
Barak
3

Pode ser que o cartão SD esteja tão lento.

Dê uma olhada neste benchmark (gravação aleatória, 4 KB (QD = 1) [MB / s]) e você verá que a maioria dos cartões SD tem um desempenho ruim de gravação (abaixo de 100 kB / s) para arquivos pequenos - e um A instalação típica do Linux consiste em muitos arquivos pequenos gravados no disco.

O leitor de cartão interno deve ser capaz de ler / gravar pelo menos 20 MB / s - é muito improvável que outro leitor de cartão melhore sua experiência com esse mesmo cartão SD.

Depois que todos os arquivos forem gravados, ou seja, o sistema estiver instalado, você poderá executar o Linux a partir do cartão SD em uma velocidade aceitável - como é o acesso de leitura.

iolsmit
fonte
1
Para o votante em baixa, consulte este post
iolsmit
Seria um bom experimento testar o cartão em outro leitor conhecido como bom e testar um cartão conhecido como bom no leitor suspeito. Observe também que toda a "documentação" para criar novos arquivos (em vez de escrever seu conteúdo) nas estruturas de dados do sistema de arquivos é muito grande para muitos arquivos pequenos.
Thorbjørn Ravn Andersen
Enquanto os cartões SD não são muito rápidos, a velocidade (328198 bytes / s e posterior 288881 bytes / s) não pode ser inimaginável para os cartões SD de hoje (parece mais uma unidade de disquete). Como esse é 'dd', significa um único arquivo - não vários arquivos pequenos.
Barak
1

Se a placa estiver montada com a opção de sincronização, isso significa que todo fechamento de arquivo faz com que a gravação seja liberada no disco e, portanto, seu desempenho em arquivos pequenos será terrível quando comparado com arquivos grandes. Se você remover a sincronização das opções de montagem, não há garantia de que a gravação de um arquivo faça com que ele saia para o disco - é necessário chamar manualmente a sincronização na linha de comando ou desmontar o dispositivo antes de removê-lo ou desligar. No entanto, sem sincronização, você verá pequenos arquivos melhorarem drasticamente o desempenho da gravação.

ddiepo
fonte
1
De acordo com man mount, async já é o padrão.
nohillside
1

Não, isso é claramente um problema no Mac OS. Eu obtenho desempenho significativamente mais rápido quando faço essa mesma operação usando o Linux em uma máquina virtual em execução no mesmo Macintosh. Ou seja, a VM é cerca de 5x mais rápida que o SO nativo.

John Kraft
fonte