Mengapa saat menyalin ke drive eksternal jendela progres tidak benar

11

Jangan ragu untuk mengedit judul untuk menjelaskan dengan lebih baik apa yang akan saya tulis di sini.

Ketika saya menyalin file besar ke pen drive misalnya, jendela progres menunjukkan perkiraan bahwa sebagian besar waktu tidak gagal untuk menunjukkan waktu nyata dan persen untuk menyelesaikan, tetapi ada kasus di mana ia mengatakan semuanya selesai dan jendela progres menutup. Saya pergi untuk mengekstrak pen drive dan dikatakan masih digunakan. Setelah memeriksa pen drive saya lihat masih menyalin file tetapi tidak ada jendela kemajuan yang menunjukkan ini.

Ini tidak hanya terjadi pada file besar, tetapi juga terjadi pada banyak file kecil. Jika saya menyalinnya, bilah progres mungkin mengatakan 15 detik misalnya dan selesai dalam waktu itu, tetapi waktu sebenarnya mungkin 1 menit dan selama 45 detik berikutnya saya harus benar-benar melihat cahaya di drive pen untuk melihat apakah ada adalah aktivitas nyata di dalamnya.

Saya tidak ingin tahu cara memperbaikinya karena saya telah membaca seberapa dalam perbaikan untuk ini bisa terjadi. Yang ingin saya ketahui adalah mengapa kemudian jendela progres menunjukkan perkiraan yang tidak sesuai dengan proses penyalinan.

Apakah ini tergantung dari Cache di unit eksternal?

Apakah ukuran file dan jumlah file berpengaruh pada estimasi yang benar. Misalnya 1 file 4 GB atau 1000 file 4 MB.

Apakah ada opsi konfigurasi yang dapat mengubah perilaku.

Ada pertanyaan lain yang mirip dengan ini seperti menyalin file ke usb stick tidak pernah selesai tetapi saya lebih fokus pada mekanisme mengapa hal itu akan berperilaku seperti ini.

Luis Alvarado
sumber

Jawaban:

6

Saya kira Anda menggunakan Nautilus sebagai manajer file Anda dan jika demikian ada bug lama tentang ini. Terlalu numinous untuk menyebutkan efek Mint, Fedora, Red Hat dan sejenisnya. Ubuntu bukan tanpa masalah yang sama ini.

Beberapa menyarankan untuk menonaktifkan tampilan thumbnail. Yang lain menaruh harapan mereka di "kernel terbaru" tetapi ini masih ada.

Masalahnya = Mulai cepat, kemudian berjalan lebih lambat. Ini karena ketika dipasang dengan async akan menulis ke cache, ketika cache penuh Anda melihat kecepatan tulis "Nyata".

Pekerjaan di sekitar tampaknya sudo cp /filetobecopied /dev/nameofdevice

yang lain diposting di sini mengatakan bahwa "menyalin dalam potongan" berfungsi. Belum dikonfirmasi pada bagian saya.

Buntut
sumber
3
Untuk memperjelas, kernel menyimpan data dalam RAM alih-alih menuliskannya secara langsung (untuk alasan kinerja). Ketika Anda mengklik Eject, syncperintah dilakukan di latar belakang, yang mem-flush cache. Untuk sejumlah besar data, ini bisa memakan waktu.
puluh tiga
1
TIP: sudo cp / filetobecopied / dev / nameofdevice akan mengganti seluruh sistem file dengan file Anda, biasanya bukan yang Anda inginkan ....
Lennart Rolland
1

Ini juga jawaban yang bagus dengan solusi: /unix//a/181236 Dikatakan:

Alasan mengapa hal itu terjadi adalah karena program mengatakan "tulis data ini" dan kernel linux menyalinnya ke buffer memori yang di-antri untuk masuk ke disk, dan kemudian berkata "ok, selesai". Jadi program tersebut menganggap telah menyalin segalanya. Kemudian program menutup file, tetapi tiba-tiba kernel membuatnya menunggu sementara buffer itu didorong ke disk.

Jadi, sayangnya program tidak dapat memberi tahu Anda berapa lama waktu yang diperlukan untuk menyiram buffer karena tidak tahu.

Jika Anda ingin mencoba beberapa trik pengguna daya, Anda dapat mengurangi ukuran buffer yang digunakan Linux dengan mengatur / proc / sys / vm / dirty_bytes menjadi sekitar 15728640 (15 MB). Ini berarti aplikasi tidak bisa mendapatkan lebih dari 15MB di atas kemajuan sebenarnya.

Efek sampingnya adalah komputer Anda mungkin memiliki throughput penulisan data yang lebih rendah dengan pengaturan ini, tetapi secara keseluruhan, saya merasa terbantu untuk melihat bahwa suatu program berjalan lama sementara ia menulis banyak data vs. kebingungan memiliki Program tampaknya sudah selesai dengan tugasnya tetapi sistem tertinggal dengan buruk karena kernel melakukan pekerjaan yang sebenarnya. Mengatur dirty_bytes ke nilai yang cukup kecil juga dapat membantu mencegah sistem Anda menjadi tidak responsif ketika Anda kehabisan memori bebas dan menjalankan program yang tiba-tiba menulis banyak data.

Tapi, jangan terlalu kecil! Saya menggunakan 15MB sebagai perkiraan kasar bahwa kernel dapat menyiram buffer ke hard drive normal dalam 1/4 detik atau kurang. Itu membuat sistem saya tidak merasa "lamban".

Cirelli94
sumber