Jak mogę zwiększyć prędkość zapisu na karcie SD (używając / dev / disk *) na MacBooku Pro?

17

Zainstalowałem niektóre dystrybucje linuksa na karcie SD z mojego MacBooka, chociaż przesłanie kilkuset MB zajmuje ponad godzinę (używając ddi /dev/disk1).

wyjście dd

Jeśli spojrzysz na powyższe wyjście, działa ono z grubsza około 0,31 MB / s! Karta SD to klasa 10, a moim MacBookiem Pro jest Intel Core 2 Duo 2,66 GHz, 4 GB pamięci DDR3 1067 MHz i OS X Lion 10.7.4. Oto raport sprzętu dla czytnika kart:

Wbudowany czytnik kart SD:

Identyfikator dostawcy: 0x05ac
Identyfikator produktu: 0x8403
Wersja: 1.00 Numer seryjny: 9833

Karta SDHC:

Pojemność: 7,97 GB (7 969 177 600 bajtów)
Nośniki wymienne: Tak Nazwa BSD: dysk1
Typ mapy partycji: MBR (główny rekord rozruchowy)
Status SMART: Nieobsługiwane
woluminy:

PI:
Pojemność: 7,96 GB (7 964 983 296 bajtów)
System plików: MS-DOS
BSD Nazwa: disk1s1
Treść: DOS_FAT_32

Jakieś pomysły, dlaczego przeniesienie /dev/disk1jest tak wolne i jak mogę to przyspieszyć?

StuR
źródło
Brzmi jak problem ze sprzętem. Słyszałem, że MBP z 2011 roku mają zły czytnik SD, ale może to stanowić problem również z wcześniejszymi. Wypróbuj inną kartę SD, ale może to być problem z czytnikiem kart, który niestety jest podłączony do płyty głównej w większości MBP.
robmathers,
Kupiłem laptopa w 2009 roku, Fedora kopiuje teraz od 2 godzin i zrezygnowałem. Myślę, że czas na nowy czytnik kart.
StuR
Co ciekawe, sekwencyjna szybkość przesyłania danych jest znacznie wyższa, jeśli używasz Findera lub Disk-Utility, ponieważ winowajcą wydaje się buforowanie / dev / disk *, jak wyjaśniono w odpowiedzi @pci
iolsmit z

Odpowiedzi:

38

Właśnie natrafiłem na ten sam problem i wydaje się, że /dev/disk*jest powolny, ponieważ jest buforowany. Jeśli używasz odpowiedniego urządzenia rdisk (np .:) /dev/rdisk1s1, powinieneś uzyskać oczekiwaną prędkość. To najwyraźniej sprawa BSD.

Przykład:

% 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
źródło
1
To najlepsza odpowiedź, jaką znalazłem na to pytanie, ponieważ mogłem potwierdzić wyniki. Zmieniono z ~ 1,35 MB / s do 20 MB / s :)
nieobecność
1
To oczywiście wstyd (dla Apple / BSD) - chociaż użycie dd daje najlepszą możliwą wydajność, ponieważ masz jeden długi dostęp do zapisu (lub odczytu); na poziomie plików i przy losowym dostępie wydajność będzie się bardzo różnić w zależności od karty SD - i: doskonałe znalezienie @pci!
iolsmit
2
To długa historia, ale właśnie uratowałeś mi łososia wartego 90 $, który miał się popsuć, gdybym nie zdążył naprawić palacza na czas.
deweydb
3
To trochę niedorzeczne, jak można pobrać plik z prędkością 20 + Mb / s na tysiące kilometrów, a ostatnie kilka metrów to bezprzewodowo. Ale przesyłanie danych o kilka centymetrów przez twarde połączenie jest znacznie wolniejsze.
Jonathan.
Dzięki. Chciałem skopiować 7 GB danych w ciągu ~ 10 godzin, kiedy zdecydowałem, że jest to nie do przyjęcia i uznałem tę odpowiedź za bardzo pomocną.
Barak,
3

Możliwe, że karta SD jest tak wolna.

Spójrz na ten test porównawczy (zapis losowy, 4 KB (QD = 1) [MB / s]), a zobaczysz, że większość kart SD ma kiepską wydajność zapisu (poniżej 100 kB / s) dla małych plików - i typowa instalacja linuksowa składa się z wielu małych plików zapisanych na dysku.

Wewnętrzny czytnik kart powinien być zdolny do odczytu / zapisu co najmniej 20 MB / s - jest bardzo mało prawdopodobne, że inny czytnik kart poprawi twoje wrażenia z korzystania z tej karty SD.

Po zapisaniu wszystkich plików, tj. Zainstalowaniu systemu, może być możliwe uruchomienie Linuksa z karty SD z akceptowalną prędkością - ponieważ jest to w większości dostęp do odczytu.

iolsmit
źródło
1
Osoby, które głosują przeciwko głosowi
Dobrym eksperymentem byłoby jednak przetestowanie karty w innym czytniku, o którym wiadomo, że jest dobrym, i przetestowanie karty, o której wiadomo, że jest dobra, w podejrzanym czytniku. Zauważ również, że cała „formalności” związane z tworzeniem nowych plików (w przeciwieństwie do zapisywania ich zawartości) w strukturach danych systemu plików jest bardzo duża dla wielu małych plików.
Thorbjørn Ravn Andersen
Kiedy karty SD nie są bardzo szybkie, prędkość (328198 bajtów / sek., A później 288881 bajtów / sek) nie jest niewyobrażalna dla dzisiejszych kart SD (bardziej przypomina dyskietki). Ponieważ jest to „dd”, oznacza jeden plik - nie wiele małych plików.
Barak,
1

Jeśli karta jest zamontowana z opcją synchronizacji, oznacza to, że każde zamknięcie pliku powoduje, że zapis jest opróżniany na dysk, a zatem wydajność małych plików będzie straszna w porównaniu z dużymi plikami. Jeśli usuniesz synchronizację z opcji montowania, nie ma gwarancji, że zapisanie pliku spowoduje wyjście na dysk - musisz ręcznie wywołać synchronizację z wiersza polecenia lub odmontować urządzenie przed usunięciem lub wyłączeniem zasilania. Jednak bez synchronizacji wydajność zapisu małych plików powinna znacznie wzrosnąć.

ddiepo
źródło
1
Według man mountAsync jest już domyślny.
nohillside
1

Nie, to wyraźnie jakiś problem z Mac OS. Wydajność jest znacznie wyższa, gdy wykonuję tę samą operację za pomocą Linuksa na maszynie wirtualnej działającej na tym samym komputerze Macintosh. Tj. Maszyna wirtualna jest około 5 razy szybsza niż natywny system operacyjny.

John Kraft
źródło