Как я могу увеличить скорость записи на SD-карту (используя / dev / disk *) на MacBook Pro?

17

Я устанавливал некоторые дистрибутивы Linux на SD-карту с моего MacBook, хотя на передачу нескольких сотен МБ (используя ddи /dev/disk1) уходит более часа .

дд выход

Если вы посмотрите на приведенный выше вывод, он работает со скоростью примерно 0,31 МБ / с! SD-карта относится к классу 10, а мой MacBook Pro - это Intel Core 2 Duo с тактовой частотой 2,66 ГГц, DDR3 с тактовой частотой 4 ГБ 1067 МГц и OS X Lion 10.7.4. Вот аппаратный отчет для кард-ридера:

Встроенный кард-ридер SD:

Идентификатор поставщика: 0x05ac Идентификатор
продукта: 0x8403
Редакция: 1.00 Серийный номер: 9833

Карта SDHC:

Емкость: 7,97 ГБ (7 969 177 600 байт).
Съемный носитель : да Имя BSD: диск1
Тип карты раздела: MBR (основная загрузочная запись)
Состояние SMART: не поддерживается
Тома:

PI:
Емкость: 7,96 ГБ (7 964 983 296 байт).
Файловая система: MS-DOS.
Имя BSD: disk1s1.
Содержимое: DOS_FAT_32.

Любые идеи, почему переход к /dev/disk1так медленно и как я мог ускорить его?

Stur
источник
Походит на аппаратную проблему для меня. Я слышал, что у MBP 2011 года плохой SD-ридер, но могут быть проблемы и с более ранними. Попробуйте другую SD-карту, но это может быть проблемой с устройством для чтения карт памяти, которое, к сожалению, подключено к материнской плате в большинстве MBP.
Робматерс
Я купил ноутбук в 2009 году, Fedora копирует уже 2 часа, и я сдался. Я думаю, что новое время чтения карт.
StuR
Интересно, что последовательная скорость передачи данных намного выше, если вы используете Finder или Disk-Utility, поскольку виновником, по-видимому, является буферизация / dev / disk *, как объяснено в ответе @pci
iolsmit

Ответы:

38

Просто столкнулся с той же проблемой, и кажется, что /dev/disk*это медленно, потому что это буферизовано. Если вы используете соответствующее устройство rdisk (например:), /dev/rdisk1s1вы должны получить ожидаемую скорость. Это, очевидно, вещь BSD.

Пример:

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

ПКЛ
источник
1
Это лучший ответ, который я нашел на этот вопрос, поскольку я смог подтвердить результаты. Прошло от ~ 1,35 МБ / с до 20 МБ / с :)
несуществование
1
Это, конечно, позор (для Apple / BSD) - хотя использование dd дает вам максимальную производительность, поскольку у вас есть один длинный доступ для записи (или чтения); на уровне файлов и при произвольном доступе ваша производительность будет сильно различаться, в зависимости от SD-карты - И: отличный поиск @pci!
iolsmit
2
Это длинная история, но вы только что спасли мне лосося на 90 долларов, который обанкротится, если я не смогу вовремя позаботиться о своем курильщике.
deweydb
3
Довольно смешно, как вы можете загружать файлы со скоростью 20+ Мбит / с на тысячи километров, а последние несколько метров - это беспроводные. Но передача данных на несколько сантиметров по жесткому соединению происходит намного медленнее.
Джонатан.
Благодарю. Я пытался скопировать 7 ГБ данных за ~ 10 часов, когда решил, что это неприемлемо, и нашел этот ответ - очень полезный.
Барак
3

Вполне может быть, что SD-карта такая медленная.

Взгляните на этот тест (случайная запись, 4 КБ (QD = 1) [МБ / с]), и вы увидите, что большинство SD-карт имеют низкую производительность записи (ниже 100 КБ / с) для небольших файлов - и Типичная установка Linux состоит из множества небольших файлов, записанных на диск.

Внутренний кард-ридер должен быть способен считывать / записывать не менее 20 МБ / с - очень маловероятно, что другой кард-ридер улучшит ваши впечатления от этой самой SD-карты.

После того, как все файлы записаны, т.е. система установлена, вы действительно сможете запускать Linux с SD-карты с приемлемой скоростью - так как это в основном доступ для чтения.

iolsmit
источник
1
Для внизу, см. Этот пост
iolsmit
Тем не менее, это был бы хороший эксперимент, чтобы проверить карту в другом считывателе, который, как известно, исправен, и проверить карту, которая, как известно, исправна, в предполагаемом считывателе. Также обратите внимание, что вся «бумажная работа» по созданию новых файлов (в отличие от записи их содержимого) в структурах данных файловой системы очень велика для многих маленьких файлов.
Торбьерн Равн Андерсен
Поскольку SD-карты не очень быстрые, скорость (328198 байт / с и более поздние 288881 байт / с) не может быть невообразимой для современных SD-карт (ощущается больше как флоппи-дисководы). Поскольку это «dd», это означает один файл, а не несколько маленьких файлов.
Барак
1

Если карта монтируется с опцией синхронизации, это означает, что при каждом закрытии файла запись записывается на диск, и, следовательно, ваша производительность для маленьких файлов будет ужасной по сравнению с большими файлами. Если вы удалите синхронизацию из параметров монтирования, то нет гарантии, что запись файла приведет к его выходу на диск - вам придется вручную вызвать синхронизацию из командной строки или отключить устройство перед его удалением или выключением. Однако без синхронизации вы увидите, что производительность записи небольших файлов значительно улучшится.

ddiepo
источник
1
Согласно man mountAsync уже по умолчанию.
холме
1

Нет, это явно проблема с Mac OS. Я получаю значительно более высокую производительность, когда выполняю ту же самую операцию, используя Linux на виртуальной машине, работающей на том же Macintosh. Т.е. виртуальная машина примерно в 5 раз быстрее родной ОС.

Джон Крафт
источник