Bagaimana cara mendapatkan kecepatan transfer USB yang lebih baik di (X) ubuntu?

14

Ketika saya menghubungkan drive USB 2.0 ke Xubuntu dan mencoba mentransfer file besar, kecepatan transfer awalnya bagus tetapi turun setelah beberapa detik menjadi 1-2 Mib / s. Dari apa yang saya baca, transfer cepat di awal hanya sampai cache penuh, maka kecepatan transfer USB yang sebenarnya digunakan.

Di Windows, kecepatannya konstan sekitar 25Mib / s, stik yang sama, terhubung ke port yang sama.

Ini adalah output dari dmesg saat menghubungkan tongkat:

[ 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

Stik diautount, berikut ini adalah output dari "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)

Saya harus menggunakan vfat karena saya ingin mentransfer file ke sistem Playstation3 saya. Meskipun tes di bawah ini menunjukkan, bahwa ini bukan penyebab utama.

Tampaknya ini adalah masalah umum di (X) ubuntu. Saya belum menemukan solusi yang jelas. Tampaknya tongkat harus dipasang sebagai async bukan flush tapi saya tidak yakin bagaimana cara mencapainya. Saya tidak keberatan jika saya harus melepas tongkat setiap kali sebelum melepaskannya selama kecepatan transfer lebih baik.

Ada ide?

2 Nov: Laporan bug ini sepertinya terkait: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/182931 . Yang mengkhawatirkan saya adalah bahwa masalahnya tampaknya sudah lebih dari 2 tahun dan masih belum terpecahkan.

10 Nov: Saya memulai read-test dengan palimpstest (dari proyek gnome-disk-utility). Ini memberi saya kecepatan transfer minimal 23 MBit / s. Juga mencobanya di krusader sekarang, kecepatan baca terus-menerus> 20 MBit / s. Jadi masalahnya sebenarnya hanya menulis ke tongkat!

Berikut adalah gambar tes baca-tulis dalam program yang sama:

masukkan deskripsi gambar di sini

Saya harus menghapus sistem file sepenuhnya sebelum tes yang menunjukkan bahwa vfat bukan penyebab utama seperti yang disebutkan di atas.

Petunjuk lain: Jika saya mentransfer file 100 MB, setelah 100% dibutuhkan waktu yang tidak biasa untuk benar-benar menyelesaikan transfer. Ini sekali lagi terlihat oleh saya bahwa file tersebut memang dalam cache tetapi menulis ke perangkat usb sangat lambat.

12 November: "Berita baik". Masalahnya sepertinya memory stick itu sendiri. Mencoba hard drive eksternal (My Book Elite 1TB) memberi saya kecepatan menulis konstan sekitar 20 MiB / s. Saya pertama kali mencoba memformat ulang memory stick saya sehingga saya benar-benar dapat membandingkan keduanya (sistem file berbeda). Setelah memformat ulang, kedua drive dipasang dengan cara yang persis sama:

/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 adalah tongkatnya (kecepatan masih turun setelah beberapa detik), My Book adalah hard drive eksternal dengan kecepatan tulis konstan 20 MiB / s.

Sulit mengatakan apa masalahnya sebenarnya. Seperti yang saya katakan, pada Windows saya mendapatkan kecepatan menulis yang sama cepatnya dengan SanCruzer juga.

Sunting di akhir hadiah: Sayangnya, masalah dengan tongkat masih belum terpecahkan. Namun, setelah 7 hari saya ingin menghadiahkan hadiah tentu saja. Komentar dari aking1012 benar-benar membantu karena memberikan pandangan baru tentang masalah ini. Namun, saya merasa bahwa saya harus memberikan hadiah kepada harrymc karena dia menunjukkan upaya paling banyak untuk menyelesaikan masalah. Terima kasih semuanya.

pgruetter
sumber
1
apakah ada perbedaan antara kecepatan tulis untuk flash drive dan HD eksternal benar ... hanya pertanyaan
RobotHumans
Ide bagus! Terima kasih banyak untuk tipnya, silakan lihat hasilnya di pembaruan saya (12 November). Masalahnya belum terpecahkan, tetapi ini benar-benar mempersempitnya!
pgruetter
FWIW, flushopsi pada output mount Anda tidak akan membantu. Saya pikir itu lebih buruk daripada sync.
beldaz

Jawaban:

11

Artikel Lambat kecepatan transfer massa stoarage USB 2.0 menunjukkan bahwa ini mungkin menjadi masalah perangkat yang dipasang secara default dengan opsi sinkronisasi:

Apakah Anda memiliki Ikon "Perangkat" di Desktop Anda?
Jika demikian, buka saja. Jika tidak, coba buka media: / dalam konqueror.

Pilih perangkat kemudian -> Properti -> Pemasangan (tag) dan hapus centang pada kotak Sinkron. (Ini diingat, jadi Anda hanya perlu melakukannya sekali per perangkat).


Beberapa ide lain datang dari laporan bug. Menulis melalui hdd eksternal membuat penulisan menjadi sangat lambat

  • Anda mengubah ke async pada saat runtime dengan 'sudo mount -o remount, async / dev / sda1' (atau apa pun partisi yang terpasang adalah)
  • Anda membuat entri fstab untuk sda yang memasangnya async (ini mengharuskan perangkat selalu terhubung pada saat boottime)
  • Anda mengubah 'sinkronisasi' ke 'async' di sumber pmount dan membangun kembali paket

Lihat juga diskusi dalam artikel tentang pmount, jika ini berlaku untuk sistem Anda.


Solusi ajaib lain datang dari USB 2.0 yang lambat tulis tetapi cepat dibaca, solusinya belum? dan melibatkan pemasangan kembali:

Ketika saya memasang drive USB di / dev / sdc1 dengan baris berikut

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

di / etc / fstab, dan coba salin file 5,2 MB ke drive dari hard disk lokal, lalu setelah satu menit penuh, 244 KB telah ditransfer. Menyalin file 29 MB dari drive eksternal ke drive lokal membutuhkan waktu sekitar 10 detik.

Kemudian jika saya melepasnya, ubah baris di / etc / fstab ke

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

kemudian menyalin file 29 MB ke disk eksternal membutuhkan sepersekian detik yang tidak terlalu mencolok. Sama dengan menyalin ke disk lokal dari disk eksternal.


Lihat artikel ini dan referensi untuk "usbtree". Ini memberitahu cara memeriksa apakah usb berfungsi sebagai 1.1 atau 2.0:

Linux dan USB 2.0 .

harrymc
sumber
Tampaknya ini khusus untuk KDE. Saya menggunakan XFCE4 (Xubuntu). Saya tetap mencoba saran itu, karena Konquerer diinstal. media pembuka: / beri saya pengecualian "Protokol tidak didukung". Adakah cara lain untuk mengetahui apakah sudah terpasang "async" atau "sync"?
pgruetter
Saya menambahkan satu artikel lagi yang bermanfaat.
harrymc
remount tidak melakukan apa-apa. Output dari "mount" masih sama. Lihat pesan awal saya untuk itu. Saya juga mencoba me-mount dengan pmount sekarang, terima kasih atas sarannya. Bantuan dari pmount menyatakan, bahwa mount async secara default. Tetap saja, kecepatan transfer sangat cepat pertama dan turun setelah beberapa detik. Saya mulai percaya bahwa tongkat itu sebenarnya sudah dipasang async tetapi masalahnya ada di tempat lain !?
pgruetter
Menambahkan satu percobaan lagi.
harrymc
Terima kasih harrymc, sangat menghargai upaya terus menerus Anda. Sayangnya, masih belum ada peluang. Saya mencobanya dengan pengaturan yang disebutkan di / etc / fstab dan memasangnya. Jika saya mencoba opsi dengan sinkronisasi, itu lebih buruk lagi. Saya hanya mendapatkan sekitar 100-200 Kib / s. Tanpa opsi sinkronisasi, itu tetap sama: cepat di awal, turun ke 1-2 MiB / s.
pgruetter
2

Akses ke drive biasanya buffered dalam mode async. Ledakan cepat awal cenderung ke cache memori. Kecepatan lambat adalah kecepatan tulis yang sebenarnya.

Jika Anda memiliki stik USB yang berkedip saat transfer, cobalah beberapa tes. Saya menemukan bahwa menulis dapat berlanjut cukup lama setelah salinan selesai.

Memasang dalam mode async alih-alih mode sinkronisasi memungkinkan salinan muncul untuk melanjutkan lebih cepat, tetapi tidak memberi Anda keamanan yang sama bahwa data yang disalin benar-benar ditransfer.

Periksa opsi di man mount. Beberapa format memungkinkan pembaruan metadata (direktori, tabel alokasi file, dll) ditangguhkan. Ini akan mengurangi jumlah data yang perlu disalin. Ini sedikit meningkatkan risiko kehilangan data.

BillThor
sumber
Terima kasih atas informasinya, ini benar-benar menegaskan asumsi saya. Drive berkedip secara konstan selama transfer, namun tidak lama setelah transfer. Saya menduga ini hanya karena file manager masih mengakses tongkat. Keamanan tidak akan menjadi masalah besar, saya benar-benar hanya tertarik pada kecepatan. Menarik tentang metadata, saya akan memeriksanya. Meskipun, apakah Anda pikir ini akan mengubah apa pun saat mentransfer file besar (500 MiB)?
pgruetter
Juga, apa yang masih membingungkan saya, mengapa sangat cepat dengan harddisk eksternal tetapi tidak dengan tongkat? Opsi pemasangan persis sama, saya mentransfer file tes yang sama persis.
pgruetter
1
Tulisan 4 KiB ke hard drive biasanya adalah penulisan 4 KiB, diimplementasikan oleh pengontrol hard disk. Menulis 4 KiB ke memori Flash biasanya membaca 128 KiB ke beberapa penyimpanan sementara, 4 KiB menimpa pada offset yang benar dari penyimpanan temp tersebut, operasi penghapusan 128 KiB, dan penulisan 128 KiB, semua hal di atas diimplementasikan oleh Pengontrol memori flash. Kurang lebih :)
tzot
1

Jadi saya datang ke halaman ini melalui pencarian google dari masalah yang sama ("ubuntu 15 percepat transfer usb") karena transfer saya berjalan pada 75kb / s.

Ini mungkin hanya solusi untuk pengaturan saya tetapi 16GB USB 3 drive saya diformat ke GPT fat32, saya menghapus semua partisi, diinisialisasi ke MBR, membuat satu partisi NTFS, memasangnya kembali ke PC Ubuntu saya dan sekarang mentransfer file 10GB lebih dari 50MB / s. Bagi saya, masalah terpecahkan.

Server Orb
sumber
Mengonfirmasi bahwa untuk Mint 18.3 (Ubuntu 16.04) beralih dari fat32 ke ntfs merupakan peningkatan besar.
Raven
0

Kita perlu memastikan bahwa sistem mencoba menulis dalam potongan blok program / hapus. Dengan memori flash modern, ukurannya biasanya 1M-4M. Untuk melakukan ini, Anda ingin memastikan FS Anda selaras untuk menghapus blok, dan antarmuka itu memungkinkan transfer seluruh blok sekaligus (untuk tongkat murah). Kalau tidak, kita akan mendapatkan amplifikasi tulis, karena sistem mencoba menulis dalam potongan yang lebih kecil, daripada menghapus blok (melakukan baca / mod / tulis) + blok misalignment.

Untuk memeriksa pengaturan Anda saat ini, lakukan:

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

Anda dapat menyesuaikan aturan aula untuk perangkat tersebut. Lihat /unix/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices .

Dalam hal ini saya telah mengganti max_sectors untuk semua perangkat, yang menggunakan standar 240 (penyimpanan USB) ke sektor 32K atau sektor 2K:

(gunakan == untuk memeriksa, dan = untuk menetapkan):

Pada sistem saya (Mageia 4, 3.14.24 core i7) saya harus melakukan ini karena kecepatan tulis yang sangat lambat (2MB / detik) di Kingston DT101 G2 16GB:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules dan tambahkan:

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

Dan kecepatan penulisan dd naik 3x kali :-) mc cp mungkin 10-20x ke atas (setelah saya memulai partisi pertama @ sektor 8192 'dan diformat ulang dengan 64k klaster yang disejajarkan):

fdisk -u /dev/sdh (matikan compat DOS jika hidup),

mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592**dan gunakan fsck.vfat -v /dev/sdh1untuk memeriksa perataan (centang [sektor mulai data] harus kelipatan 128 (ukuran kluster)). Sesuaikan jumlah sektor yang dicadangkan (-R) jika perlu.

Max_sectors default (240) tampaknya menyebabkan amplifikasi tulis tinggi pada beberapa drive baru yang murah. Tapi hati-hati dengan pengaturan tinggi seperti itu, efek yang sama dicapai pada 2048 sektor (mungkin 1M menghapus blok:

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

Uji semua perangkat USB lama Anda, apakah masih berfungsi dengan baik. Gunakan atribut vendor / model dalam file aturan untuk lebih spesifik.

PS: Jika menggunakan ext3 / 4:

Nonaktifkan Journaling dan set stride / stripe_width untuk mkfs.ext3:

mkfs.ext3 -O ^ has_journal -E stride = [baca blok halaman fs] -E stripe-width = [hapus blok blok fs]

Menandai
sumber
0

Saya punya beberapa masalah juga dengan kecepatan transfer pada disk eksternal WD, setelah membukanya di windows SO, saya selalu menggunakan LINUX, setelah itu kecepatan transfernya seperti 1,5mb / s daripada saya melepas hard drive eksternal, jalankan dmesg di sana mengatakan bahwa sdb1 itu unmounted unmounted, menjalankan fsck, yang membuat beberapa perbaikan dan setelah itu 20mb / s tingkat transfer lagi ketika copiyng dari sda ke disk eksternal.
"fsck selalu berisiko jika Anda memiliki data, tetapi itu berhasil bagi saya, tanpa kehilangan data"

anymamundy
sumber
0

Periksa, benar-benar periksa , bahwa perangkat Anda terhubung ke port USB yang mendukung kecepatan penuh.

Meskipun ini terdengar konyol, kadang-kadang hal-hal menjadi kacau. Beberapa motherboard memiliki port kecepatan tinggi dan rendah. Gunakan alat seperti usbview (catatan untuk menjalankannya dengan hak pengguna super , sudo usbview) untuk memverifikasi bahwa perangkat Anda beroperasi pada 480Mb / s (USB 2.0) atau lebih.

Misalnya, ketika Anda biasanya mencolokkan perangkat Anda melalui beberapa kabel ekstensi, hub di layar Anda, dll., Itu mungkin terjadi - setelah memasang kembali kabel pada komputer deskside Anda atau lebih - bahwa Anda secara tidak sengaja menyambungkan hub ke kecepatan rendah (USB 1.) port. Kemudian, semua perangkat yang terhubung ke hub akan beroperasi dengan kecepatan rendah, sementara yang lain, terpasang di tempat lain, beroperasi dengan kecepatan tinggi. Dapat sangat membingungkan - dan merupakan hal perangkat keras yang sederhana ... Terjadi pada saya sekali, dan tidak terkait dengan modul kernel USB, opsi pemasangan atau lebih.

isync
sumber