Salin ke memory stick USB benar-benar lambat?

45

Ketika saya menyalin file ke perangkat USB, dibutuhkan jauh lebih lama daripada di windows (perangkat usb yang sama, port yang sama) lebih cepat dari kecepatan USB 1.0 (1MB / s) tetapi jauh lebih lambat daripada kecepatan USB 2.0 (12MB / s). Untuk menyalin 1,8GB saya membutuhkan waktu lebih dari 10 menit (seharusnya <3 mnt). Saya memiliki dua stik SanDisk Cruzer 8GB yang identik, dan saya memiliki masalah yang sama dengan keduanya. Saya memiliki SSD USB 32GB super talenta di port tetangga dan bekerja dengan kecepatan yang diharapkan.

Masalah yang sepertinya saya lihat di GUI adalah bahwa progress bar menjadi 90% hampir secara instan, selesai menjadi 100% sedikit lebih lambat dan kemudian hang di sana selama 10 menit. Mengganggu salinan pada titik ini tampaknya mengakibatkan korupsi di ujung file. Jika saya menunggu sampai salinan selesai.

Ada ide? Output dmesg di bawah ini:

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk
Eloff
sumber
Linux memperbaiki penulisan disk dengan imbalan melakukan tugas-tugas lain dengan lebih cepat. Tebakan saja, coba jalankan syncdan lihat apakah itu tidak mempercepat proses. <- belum teruji tetapi mungkin
RobotHumans
itu tidak masuk akal bahwa itu akan menunda untuk satu jenis USB tetapi tidak yang lain. Juga saya sepertinya ingat sinkronisasi panggilan linux setiap 30 detik atau lebih? Mungkin sudah ketinggalan zaman. Saya berharap ini adalah semacam masalah driver atau kompatibilitas karena tergantung pada jenis perangkat.
Eloff
Menjadi lebih cepat di thumbdrives USB lain tidak ada dalam pertanyaan Anda. Jika ya, saya akan menyarankan melihat ke hdparm. Jadi masuk akal jika Anda melihatnya dari sudut pandang seseorang yang tidak mengetahui seluruh pengaturan Anda, tetapi tergantung pada pertanyaan Anda untuk detailnya
RobotHumans
"Saya memiliki SSD USB 32GB super talenta di port tetangga dan bekerja pada kecepatan yang diharapkan." itu ada di sana, tapi saya akan mengakui tersembunyi :) Jadi apa hal hdparm ini Anda singgung?
Eloff
Oke, SSD dan memori flash TIDAK SANGAT sama. Namun seiring berjalannya, hdparm adalah utilitas yang memungkinkan Anda menyetel kecepatan akses / putaran untuk drive secara manual
RobotHumans

Jawaban:

29

Mengapa menyalin ke drive USB saya sangat lambat di Linux (dan lebih cepat di Windows)?

Alasan 1. Caching file dapat membuat penulisan tampak lebih lambat atau lebih cepat

Masalah yang sepertinya saya lihat di GUI adalah bahwa progress bar menjadi 90% hampir secara instan, selesai menjadi 100% sedikit lebih lambat dan kemudian hang di sana selama 10 menit.

Satu hal yang perlu Anda pahami adalah file caching. Linux (dan Windows) akan menggunakan RAM "kosong" untuk melakukan cache operasi baca / tulis dan membuatnya lebih cepat pada akses berikutnya. Caching operasi copy ke perangkat lambat menghasilkan perilaku yang Anda lihat - "penyelesaian cepat" sebenarnya menulis ke cache, dan kemudian memperlambat dan berhenti karena pembilasan data yang sebenarnya dalam cache (sinkronisasi) ke perangkat lambat adalah butuh waktu lama. Jika Anda membatalkan pada saat itu, data rusak (seperti yang Anda catat) karena sinkronisasi tidak pernah selesai.

Menyalin seperti itu di Windows mungkin tampak lebih cepat (termasuk kecepatan MB / detik yang dilaporkan) karena kadang-kadang Windows tidak akan menunggu sinkronisasi, dan menyatakan pekerjaan selesai segera setelah data dituliskan ke cache.

Alasan 2. Menulis banyak file, terutama yang kecil, lambat

Untuk menyalin 1,8GB

Karena cara kerja memori flash dan sistem file, throughput tercepat (kecepatan) dicapai saat menulis file yang sangat besar. Menulis banyak file kecil, atau bahkan data campuran yang berisi sejumlah file kecil dapat memperlambat proses banyak. Ini mempengaruhi hard drive juga, tetapi pada tingkat yang agak lebih rendah.

Alasan 3. Kecepatan tulis stik USB dan SSD tidak dapat dibandingkan

Saya memiliki SSD USB 32GB super talenta di port tetangga dan bekerja dengan kecepatan yang diharapkan.

  • Variasi USB stick kebun biasanya terdiri dari chip memori flash yang ditulis secara serial (berurutan), dan tidak memiliki cache sendiri.

  • SSD, di sisi lain, mengandung pengontrol yang menulis paralel chip memori flash , meningkatkan throughput dengan faktor 2 atau lebih di atas stik USB.

    • Jika SSD 32GB Anda memiliki chip 4x 8GB, itu masih akan lebih cepat 4x daripada stik USB pada operasi penulisan apa pun.
    • SSD juga mengandung cache RAM (seperti hard disk), sehingga dapat dengan cepat menyimpan data yang masuk dalam cache dan memberitahu OS bahwa itu sudah dilakukan, sementara itu masih harus benar-benar menulis data itu ke memori flash.
  • Jadi, dengan satu file besar, 32GB GB Anda dengan struktur 4x yang kami asumsikan, akan 4x lebih cepat; dengan banyak file kecil, itu akan 10x atau lebih cepat karena dapat menyimpannya secara cerdas di cache.


Singkatnya , ini adalah alasan mengapa menyalin file ke stik USB mungkin tampak lebih lambat di Linux. Apakah ini sebenarnya lebih lambat karena masalah perangkat keras / driver atau apa pun ....

Melakukan perbandingan kecepatan tulis yang tepat antara Linux dan Windows

  • Pertama-tama, lupakan SSD karena alasan 3. Ini seperti jeruk dan apel.
  • Untuk meniadakan efek alasan 1 (caching) dan alasan 2 (file kecil), Anda perlu menguji dengan satu file besar, lebih besar dari jumlah RAM pada sistem pengujian.
  • Di Linux Anda dapat membuatnya dengan dd if=/dev/urandom of=largetest bs=1M count=7500, yang memberi Anda file tes 7500 MB. Dengan asumsi sistem Anda memiliki kurang dari 4GB RAM, itu cukup baik. Salin itu ke stik Sandisk 8GB yang baru diformat, dan beri waktu.
  • Reboot di Windows, dan salin largetestdari stik USB ke hard disk Anda. Nyalakan kembali (untuk menghapusnya dari cache). Kemudian format stik USB (vfat / FAT32 sama!), Dan salin largetestdari hard disk ke stik.
  • Bagaimana kali membandingkan?
ish
sumber
2
cc: @Eloff Alasan Alasan 1 : Ya, sinkronisasi cache pasti dapat memengaruhi waktu penulisan yang jelas. Tapi apakah cache hanya menjelaskan mengapa hang di sana selama 10 menit ?? Saya pikir kita perlu lebih detail dari OP. Re Alasan 2 : Mengapa Anda menganggap transfer ini terdiri dari banyak file kecil? Saya tidak berpikir OP memberikan rincian tentang transfer 1.8GB ini, bukan? Re Alasan 3 : Ya, SSD adalah binatang yang berbeda. Mungkin juga akan dipasang melalui SATA dan bukan USB. Saya pikir OP salah bicara dan menyebut USB stick sebagai SSD. Tetapi sekali lagi, tidak ada cara untuk mengetahui kecuali kita mendapatkan rincian lebih lanjut dari OP.
John
2
Jawaban ini dengan terang-terangan mengabaikan bagaimana pertanyaan itu dirumuskan. Pertanyaannya jelas berbicara tentang satu file besar , dan fakta bahwa mengganggu hasil salinan dalam file hancur.
zrajm
4
@ zrajm itu benar. Namun bagi orang-orang seperti saya menabrak masalah yang sama, ini sangat membantu.
Pithikos
Bagaimana cara menonaktifkan perilaku caching ini?
Aminu Kano
7

Menemukan perbaikan yang saya lakukan adalah melepas, menghapus drive, dan jalankan sudo modprobe ehci_hcddi Terminal. Masukkan drive dan agian sudo modprobe ehci_hcdketika saya memasukkan drive dan wow 20 / mbs pikir saya akan berbagi. Semoga aku tidak harus melakukannya setiap saat ... tapi itu tidak sulit ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 mengatakan mereka memperbaiki bug.

Radio Dj
sumber
Serius ?? Laporan bug itu berasal dari Desember 2007 dan merujuk Ubuntu berani 7.10. (FYI: @MarcoCeppi)
irasional John
3
@rrasionalJohn Saya tidak memberikan jawaban, saya hanya membersihkannya. Kedua hanya karena laporan bug sudah tua, tidak berarti laporan bug itu masih berlaku. Ini sedang triaged menurut ini
Marco Ceppi
@MarcoCeppi Ya, saya tahu Anda hanya diedit. Itu sebabnya saya mengawali dengan " FYI: ". Saya pikir jika Anda mengeditnya, Anda mungkin (atau mungkin tidak ) tertarik. Saya pikir jika Anda tidak peduli, Anda hanya akan mengabaikan pemberitahuan itu. Adapun laporan bug lama masih memiliki relevansi ... Lebih dari 4 tahun yang lalu dan saya pikir setidaknya 8 (?) Rilis nanti? Untuk bug kinerja? Tentu, itu mungkin, tapi itu bukan tempat pertama yang saya lihat. FWIW.
rasional John
7

Saya pikir kemungkinannya sangat rendah bahwa ini adalah masalah pelabuhan. Kemungkinan besar masalah LINUX (atau konfigurasi linux) - lihat-lihat dan Anda akan menemukan ribuan laporan masalah tentang USB lambat di linux / ubuntu. Bagi saya itu hampir menjadi showstopper untuk linux - Saya sekarang memiliki Ubuntu 12,04 LTS dan masih memiliki masalah ini (jadi saya lebih suka menggunakan pengaturan Win7 - terutama / hanya karena ini). Masalah ini (atau sesuatu dengan gejala serupa) sudah ada selama beberapa tahun sekarang, tampaknya tidak ada perbaikan. Dan selama ini saya mencoba beberapa PC fisik dengan beberapa versi ubuntu yang berbeda (konfigurasi default) dan 2-3 USB stick yang berbeda ....

Peter
sumber
5

Hanya umountperangkat jika sudah diautomatiskan, dan pasang secara manual ke /mnt/foldername.

Dalam hal ini,

umount /media/usb0
mount /dev/sdb1 /mnt/sam

Setelah itu coping dengan sangat cepat.

msnfreaky
sumber
Ini, bersama dengan rsyncalih - alih cptampaknya melakukan trik.
Irfan
19
Ini tidak ada bedanya dengan situasi saya. Juga, ini bukan solusi tanpa teori mengapa ini seharusnya membuat perbedaan.
LondonRob
@Irfan Tidak, rsync juga melambat ...
sergzach
3

Ini tahun 2019 dan saya masih mengalami masalah yang sama. Jadi saya pikir saya mencari solusi di internet. Saya menemukan halaman berikut yang menyarankan satu: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Ia mengatakan:

Jalankan perintah berikut di konsol untuk melihat apakah itu memperbaiki masalah untuk Anda. Anda mungkin harus sudo suterlebih dahulu memiliki izin yang diperlukan.

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

Jika berhasil, Anda dapat membuat perubahan ini terus-menerus di seluruh reboot dengan menempelkan dua baris di akhir /etc/rc.localfile Anda .

Bagi saya itu memiliki efek sebagai berikut:

Sebelum menyalin file besar ke USB drive akan mulai sangat cepat (seperti 60 MB / s) dan menjadi lebih lambat dan lebih lambat (<10 MB / s) sampai sepertinya tidak akan pernah selesai.

Sekarang dimulai lebih lambat, tetapi semakin cepat dan lebih cepat dan selesai lebih cepat dari sebelumnya. Jadi sepertinya "memecahkan" masalah atau setidaknya memiliki efek positif.

Jenny O'Reilly
sumber
1

Jika Anda beralih ke USB 3.0, Anda akan beralih dari 1mb / s menjadi 5-8mb / s yang berliku. Saya beralih ke USB 3.0 pci dan HD eksternal dan belum melihat ke belakang.

Logger hantu
sumber
1

Ketika Anda melihat di / etc / mtab, apakah Anda melihat bahwa perangkat telah dipasang dengan opsi "flush"?

Jika demikian, ini bisa menjadi penyebab masalah (itu untuk saya). Lepas saja perangkat dan pasang kembali, itu seharusnya tidak diatur secara default.

GarfieldElCat
sumber
Opsi flush diatur secara default, ada cara untuk menghentikan ini?
Ben Lutgens
@ Ben Lutgens - Ya, Anda dapat memasukkan entri Anda di / etc / fstab yang tidak memiliki opsi flush. Gunakan sudo blkid untuk menemukan perangkat yang relevan UUID dan letakkan entri seperti UUID = "perangkat Anda ada di sini" / mnt / <titik pemasangan Anda di sini> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0. Ubah uid, gid agar sesuai dengan userid dan groupid dari pengguna normal yang Anda gunakan (seperti yang ditemukan oleh getent passwd <user Anda>).
A.Danischewski
Ketika saya melakukan ini, semua perubahan itu adalah saya tidak mendapatkan progress bar untuk penyalinan dan penyalinan sepertinya benar-benar menendang / selesai ketika saya mencoba untuk melepas perangkat dan memberitahu saya "jangan cabut kabel sampai operasi selesai ".
Jenny O'Reilly
0

Saya punya beberapa masalah juga dengan laju 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 drive hard drive eksternal yang dijalankan 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 bekerja untuk saya, tanpa kehilangan data.

anymamundy
sumber
-2

Saya juga punya masalah ini, tetapi saya menggunakan perintah cp dan Anda memperbarui stik usb Anda dalam hitungan detik;

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

Saya pikir ini adalah jawaban yang sangat terlambat tetapi masih terbuka.

Bart
sumber
-3

Oke, saya punya masalah yang sama selama tiga hari dan bagaimana saya berhasil membuat cadangan hard drive 1TB saya adalah dengan menggunakan rsync, saya tahu itu digunakan untuk membuat cadangan tetapi menyelesaikan pekerjaan, bahkan ketika mentransfer file besar saya menggunakannya untuk lakukan pekerjaan itu. Jika Anda ingin menggunakannya dengan GUI saya sarankan menginstal Grsync yang merupakan versi grafis rsync karena rsync berjalan di terminal.

Semoga ini bisa membantu

Sempurna
sumber