Jak uzyskać lepszą prędkość transferu USB w (X) Ubuntu?

14

Kiedy podłączam dysk USB 2.0 do Xubuntu i próbuję przesyłać duże pliki, prędkości przesyłania są na początku dobre, ale po kilku sekundach spadają do 1-2 Mib / s. Z tego, co przeczytałem, szybki transfer na początku trwa tylko do momentu zapełnienia pamięci podręcznej, wtedy używana jest prawdziwa prędkość transferu USB.

W systemie Windows prędkość jest stała i wynosi około 25 Mb / s, ten sam drążek, podłączony do tego samego portu.

Oto wynik działania dmesg podczas podłączania drążka:

[ 5237.580084] usb 1-4: new high speed USB device using ehci_hcd and address 6
[ 5237.714318] scsi4 : usb-storage 1-4:1.0
[ 5238.713909] scsi 4:0:0:0: Direct-Access     SanDisk  Cruzer           8.02 PQ: 0 ANSI: 0 CCS
[ 5238.715264] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 5238.727225] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[ 5242.308981] sd 4:0:0:0: [sdb] 31301631 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 5242.309589] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311228] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311238]  sdb: sdb1

Drążek jest automatycznie montowany, oto wyjście „mount”:

/dev/sdb1 on /media/B82C-6B07 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush)

Muszę użyć vfat, ponieważ chcę przenieść pliki do mojego systemu Playstation3. Althouth poniższy test pokazuje, że nie jest to główna przyczyna.

Wygląda na to, że jest to powszechny problem w (X) ubuntu. Nie znalazłem jeszcze jasnego rozwiązania. Wygląda na to, że kij musi być zamontowany asynchronicznie zamiast spłukiwania, ale nie jestem do końca pewien, jak to osiągnąć. Nie mam nic przeciwko, jeśli muszę odmontowywać drążek za każdym razem, zanim go odłączę, o ile prędkości transferu są lepsze.

Jakieś pomysły?

2 listopada: Wygląda na to, że ten raport o błędzie jest powiązany: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/182931 . Martwi mnie to, że problem ma ponad 2 lata i nadal nie został rozwiązany.

10 listopada: Rozpocząłem test odczytu od palimpstest (z projektu gnome-disk-utility). Daje mi to minimalną szybkość transferu 23 MBit / s. Wypróbowałem to także teraz w krusader, prędkość odczytu wynosi stale> 20 MBit / s. Tak więc problemem jest po prostu pisanie na patyku!

Oto obraz testu odczytu i zapisu w tym samym programie:

wprowadź opis zdjęcia tutaj

Musiałem całkowicie usunąć system plików przed testem, który pokazuje, że vfat nie jest główną przyczyną, jak wspomniano powyżej.

Kolejna wskazówka: jeśli przesyłam plik 100 MB, gdy jest on w 100%, ukończenie transferu zajmuje nietypowo dużo czasu. To znów wygląda na to, że plik rzeczywiście znajduje się w pamięci podręcznej, ale zapis na urządzenie USB jest bardzo wolny.

12 listopada: „Dobre wieści”. Problemem wydaje się być sama pamięć. Wypróbowanie zewnętrznego dysku twardego (My Book Elite 1 TB) zapewnia stałą prędkość zapisu wynoszącą około 20 MiB / s. Najpierw próbowałem sformatować kartę pamięci, aby naprawdę móc je porównać (systemy plików były różne). Po ponownym sformatowaniu oba dyski są montowane dokładnie w ten sam sposób:

/dev/sdb1 on /media/My Book type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdc1 on /media/cruzer_ type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

Cruzer to patyk (prędkość wciąż spada po kilku sekundach), My Book to zewnętrzny dysk twardy o stałej prędkości zapisu 20 MiB / s.

Trudno powiedzieć, na czym tak naprawdę polega problem. Jak powiedziałem, w systemie Windows uzyskuję równie szybkie prędkości zapisu dzięki SanCruzer.

Edycja pod koniec nagrody: Niestety, problem z kijem nadal nie został rozwiązany. Jednak po 7 dniach chcę przyznać nagrodę oczywiście. Komentarz od aking1012 był naprawdę pomocny, ponieważ rzucił nowe światło na tę sprawę. Czuję jednak, że muszę dać nagrodę harrymcowi, ponieważ wykazał największy wysiłek w rozwiązaniu problemu. Dziękuje wszystkim.

pgruetter
źródło
ocaoimh.ie/ubuntu-linux-slow-external-usb-drive Mam nadzieję, że to pomoże =)
1
czy istnieje różnica między prędkością zapisu dla dysków flash a prawdziwymi zewnętrznymi dyskami twardymi ... tylko pytanie
RobotHumans
Świetny pomysł! Bardzo dziękuję za tipp, proszę zobaczyć wynik w mojej aktualizacji (12 listopada). Problem nie został jeszcze rozwiązany, ale to naprawdę zawęża go!
pgruetter,
FWIW, flushopcja w wyjściu montowania raczej nie pomoże. Myślę, że to nawet gorsze niż sync.
beldaz

Odpowiedzi:

11

Artykuł Powolna masowa prędkość transferu USB 2.0 sugeruje, że może to być problem z domyślnym podłączeniem urządzenia z opcją synchronizacji:

Czy masz ikonę „Urządzenia” na pulpicie?
Jeśli tak, otwórz go. Jeśli nie, spróbuj otworzyć media: / in konqueror.

Wybierz urządzenie, a następnie -> Właściwości -> Montaż (znacznik) i odznacz pole Synchroniczne. (Zostaje to zapamiętane, więc powinieneś to zrobić tylko raz na urządzenie).


Więcej pomysłów pochodzi z raportu o błędach. Pisz na zewnętrznym dysku twardym, co powoduje, że pisanie jest bardzo wolne

  • zmienisz na asynchroniczny w czasie wykonywania przez 'sudo mount -o remount, async / dev / sda1' (lub cokolwiek, czym są / są zamontowane partycje)
  • tworzysz wpis fstab dla sda, który montuje go asynchronicznie (wymaga to, aby urządzenie było zawsze podłączone w czasie pracy)
  • zmienisz „synchronizuj” na „asynchronizuj” w źródle pmount i przebuduj pakiet

Zobacz także dyskusję w artykule dotyczącą pmount, jeśli dotyczy to twojego systemu.


Innym magicznym rozwiązaniem jest powolny zapis USB 2.0, ale szybki odczyt, rozwiązanie? i obejmuje ponowne zamontowanie:

Kiedy podłączam dysk USB do / dev / sdc1 z następującą linią

/dev/sdc1       /mnt/sdc1     auto    sync,noauto,user,exec     0       0

w / etc / fstab i spróbuj skopiować plik 5.2 MB na dysk z lokalnego dysku twardego, a następnie po upływie całej minuty przesłano 244 KB. Skopiowanie pliku 29 MB z dysku zewnętrznego na dysk lokalny zajmuje około 10 sekund.

Następnie, jeśli go odmontuję, zmień wiersz w / etc / fstab na

/dev/sdc1       /mnt/sdc1     auto    noauto,user,exec     0       0

następnie skopiowanie pliku 29 MB na dysk zewnętrzny zajmuje niezauważalny ułamek sekundy. To samo dotyczy kopiowania na dysk lokalny z dysku zewnętrznego.


Zobacz ten artykuł i odniesienie do „usbtree”. Mówi, jak sprawdzić, czy usb działa jako 1.1 lub 2.0:

Linux i USB 2.0 .

harrymc
źródło
Wygląda na to, że jest to specyficzne dla KDE. Używam XFCE4 (Xubuntu). Mimo to wypróbowałem sugestię, ponieważ Konquerer jest zainstalowany. otwieranie mediów: / daje mi wyjątek „Protokół nie obsługiwany”. W jakikolwiek inny sposób mogę dowiedzieć się, czy jest zamontowany jako „asynchroniczny” czy „synchronizowany”?
pgruetter,
Dodałem jeszcze jeden przydatny artykuł.
harrymc
remount nic nie robi. Wyjście „mount” jest nadal takie samo. Zobacz moją początkową wiadomość. Próbowałem też teraz zamontować go za pomocą pmount, dzięki za sugestię. Pomoc programu pmount stwierdza, że ​​domyślnie montuje asynchronicznie. Mimo to prędkości przesyłania są najpierw bardzo szybkie i spadają po kilku sekundach. Zaczynam wierzyć, że kij jest rzeczywiście zamontowany asynchronicznie, ale problem jest gdzie indziej !?
pgruetter,
Dodano jeszcze jedną próbę.
harrymc
Dzięki harrymc, naprawdę doceniam twój ciągły wysiłek. Niestety wciąż nie ma szans. Próbowałem z wymienionymi ustawieniami w / etc / fstab i montowałem go. Jeśli spróbuję z opcją synchronizacji, będzie jeszcze gorzej. Dostaję tylko około 100-200 Kib / s. Bez opcji synchronizacji nadal jest tak samo: szybko na początku, spada do 1-2 MiB / s.
pgruetter,
2

Dostęp do dysku jest zwykle buforowany w trybie asynchronicznym. Początkowa szybka seria prawdopodobnie spowoduje pamięć podręczną. Wolna prędkość to rzeczywista prędkość zapisu.

Jeśli masz pamięć USB, która miga podczas przesyłania, wypróbuj kilka testów. Odkryłem, że zapisy mogą być kontynuowane przez dłuższy czas po zakończeniu kopiowania.

Montowanie w trybie asynchronicznym zamiast w trybie synchronizacji pozwala na szybsze kopiowanie, ale nie zapewnia takiego samego bezpieczeństwa, jak kopiowane dane są przesyłane.

Sprawdź opcje w man mount . Niektóre formaty umożliwiają odroczenie aktualizacji metadanych (katalog, tabela alokacji plików itp.). Spowoduje to zmniejszenie ilości danych, które należy skopiować. Zwiększa to nieznacznie ryzyko utraty danych.

BillThor
źródło
Dzięki za informację, to faktycznie potwierdza moje założenia. Napęd miga stale podczas przesyłania, ale nie miga długo po przesłaniu. Podejrzewam, że dzieje się tak tylko dlatego, że menedżer plików nadal uzyskuje dostęp do pamięci. Bezpieczeństwo nie byłoby dużym problemem, naprawdę interesuje mnie tylko szybkość. Ciekawe o metadanych, sprawdzę to. Chociaż uważasz, że to coś zmieni podczas przesyłania dużych plików (500 MiB)?
pgruetter
Co mnie jeszcze zastanawia, dlaczego jest bardzo szybki z zewnętrznym dyskiem twardym, ale nie z kijem? Opcje montowania są dokładnie takie same, przesłałem dokładnie ten sam plik testowy.
pgruetter
1
Zapis 4 KiB na dysk twardy jest zwykle zapisem 4 KiB, realizowanym przez kontroler dysku twardego. Zapis 4 KiB do pamięci Flash jest zwykle odczytem 128 KiB do pamięci tymczasowej, nadpisaniem 4 KiB przy prawidłowym przesunięciu wspomnianej pamięci tymczasowej, operacją usuwania 128 KiB i zapisem 128 KiB, wszystkie powyższe zaimplementowane przez Kontroler pamięci flash. Mniej więcej :)
tzot
1

Tak więc doszedłem do tej strony, szukając w Google tego samego problemu („transfer Ubuntu 15 przyśpieszyć usb”), ponieważ moje transfery były wykonywane z prędkością 75 kb / s.

Prawdopodobnie było to tylko rozwiązanie dla mojej instalacji, ale mój dysk 16 GB USB 3 został sformatowany na GPT fat32, usunąłem wszystkie partycje, zainicjowałem MBR, utworzyłem pojedynczą partycję NTFS, podłączyłem ją z powrotem do mojego komputera Ubuntu i teraz przesyłam plik 10 GB z prędkością ponad 50 MB / s. Dla mnie problem rozwiązany.

Serwery Kuli
źródło
Potwierdził, że w przypadku Mint 18.3 (Ubuntu 16.04) przejście z fat32 na NTFS było ogromną poprawą.
Raven
0

Musimy upewnić się, że system próbuje pisać w programie / kasować fragmenty bloku. Dzięki nowoczesnej pamięci flash mają zwykle rozmiar 1M-4M. Aby to zrobić, musisz upewnić się, że twój FS jest ustawiony tak, aby kasować bloki, a ten interfejs pozwala na transfer całego bloku za jednym razem (w przypadku tanich drążków). W przeciwnym razie uzyskalibyśmy wzmocnienie zapisu, ponieważ system próbuje pisać mniejszymi fragmentami niż kasowanie bloku (wykonywanie odczytu / modu / zapisu) + niewspółosiowość bloku.

Aby sprawdzić swoje obecne ustawienia:

cat /sys/block/sd**X**/device/max_sectors

Możesz dostroić reguły hal dla tych urządzeń. Zobacz /unix/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices .

W tym przypadku zastąpiłem max_sectors dla wszystkich urządzeń, które używały domyślnie 240 (pamięć USB) na sektory 32K lub sektory 2K:

(użyj ==, aby sprawdzić, a =, aby przypisać):

W moim systemie (Mageia 4, 3.14.24 core i7) musiałem to zrobić z powodu strasznie niskiej prędkości zapisu (2 MB / s) na Kingston DT101 G2 16 GB:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules i dodaj:

SUBSYSTEMS == "scsi", ATTR {max_sectors} == "240", ATTR {max_sectors} = "32678"

A prędkość zapisu dd wzrosła trzykrotnie :-) mc cp prawdopodobnie 10-20x w górę (po tym jak zacząłem pierwszą partycję na 8192 sektorze i sformatowałem z 64k wyrównanymi klastrami):

fdisk -u /dev/sdh (wyłącz DOS kompatybilny, jeśli jest włączony),

mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592** I użyć fsck.vfat -v /dev/sdh1 do sprawdzenia wyrównania (sprawdź [sektor początkowy danych] powinien być wielokrotnością 128 (rozmiar klastra)). W razie potrzeby dostosuj liczbę zarezerwowanych sektorów (-R).

Domyślnie max_sectors (240) wydaje się powodować wysokie wzmocnienie zapisu na niektórych tanich nowych dyskach. Ale bądź bardzo ostrożny z tak wysokim ustawieniem, podobny efekt osiąga się w 2048 sektorach (prawdopodobnie bloki usuwania 1M:

SUBSYSTEMS == "scsi", ATTR {max_sectors} == "240", ATTR {max_sectors} = "2048"

Przetestuj wszystkie stare urządzenia USB, aby nadal działały dobrze. Użyj bardziej szczegółowych atrybutów dostawcy / modelu w plikach reguł.

PS: W przypadku korzystania z ext3 / 4:

Wyłącz kronikowanie i ustaw stride / stripe_width dla mkfs.ext3:

mkfs.ext3 -O ^ has_journal -E stride = [czytaj bloki fs strony] -E stripe-width = [kasuj bloki fs bloki]

znak
źródło
0

Miałem też pewne problemy z szybkością transferu na zewnętrznym dysku WD, po otwarciu go w Windows SO, zawsze korzystałem z LINUX, po czym szybkość transferu wynosiła około 1,5 Mb / s niż odłączyłem zewnętrzny dysk twardy, uruchomiłem tam dmesg mówił, że sdb1 jest niepoprawnie odmontowany, uruchomił fsck, który dokonał kilku napraw, a następnie ponownie 20 Mb / s prędkości transferu przy kopiowaniu z sda na dysk zewnętrzny.
„fsck zawsze stanowi ryzyko, jeśli masz dane, ale działało dla mnie bez utraty danych”

anamamundy
źródło
0

Sprawdź, naprawdę sprawdź , czy urządzenie jest podłączone do portu USB, który obsługuje pełną prędkość.

Chociaż może to zabrzmieć głupio, czasem rzeczy się mieszają. Niektóre płyty główne mają porty o wysokiej i niskiej prędkości. Użyj narzędzia takiego jak usbview (uwaga, aby wykonać to z uprawnieniami administratora sudo usbview), aby sprawdzić, czy Twoje urządzenie działa z prędkością 480 Mb / s (USB 2.0) lub wyższą.

Na przykład, gdy zwykle podłączasz urządzenie za pomocą jakiegoś przedłużacza, koncentratora na ekranie itp., Może się zdarzyć - po ponownym podłączeniu kabli w komputerze stacjonarnym lub podobnym - że przypadkowo podłączysz koncentrator do niskiej prędkości (USB 1.) port. Następnie wszelkie urządzenia podłączone do koncentratora będą działać z niską prędkością, podczas gdy inne, podłączone gdzie indziej, będą działać z dużą prędkością. Może być bardzo mylące - i jest prostą rzeczą sprzętową ... Zdarzyło mi się to raz i nie jest związane z żadnymi modułami jądra USB, opcjami montowania czy coś podobnego.

isync
źródło