Mentransfer file besar ke / dari drive USB menyebabkan sistem hang sampai transfer selesai

3

Saya memiliki kotak yang menjalankan server Ubuntu 16.04. Memiliki hard drive SATA internal dengan OS di atasnya, dan hard drive USB 3 terpasang yang saya gunakan untuk penyimpanan file besar / jangka panjang. Sering kali, ini berarti menyalin file atau folder besar dari drive internal ke drive USB. Namun, setiap kali saya melakukan ini, sisa sistem menjadi sangat lambat, jika tidak hampir sepenuhnya beku, sampai transfer file selesai.

Saya telah menjalankan beberapa tes untuk memastikan itu bukan karena overhead program atau jenis file. Saya mencoba kedua file besar yang berdekatan dan folder besar banyak file kecil, dan saya mencoba menggunakan cp, pv dengan pipa, tar dengan pipa, dan rsync. Dalam semua kasus, sisa sistem terkunci.

Saya juga mencoba menjalankan masing-masing perintah tersebut dengan ionice -c 3 nice -n 20 di depannya, memberikan prioritas proses terendah untuk prosesor dan IO. htop menunjukkan bahwa proses memiliki nilai bagus 19. Tidak tahu apakah itu minimum sebenarnya atau jika tidak ditetapkan dengan benar, tetapi terlepas dari itu, sebagian besar proses lain, termasuk layanan web, memiliki nilai bagus lebih rendah daripada 19 pula .

Kotak menjalankan beberapa halaman web dinamis, pasangan dengan php dan pasangan dengan python. Mereka pada dasarnya menjadi tidak dapat digunakan selama transfer file. Saya menganggap perlambatan disebabkan oleh overhead dari USB, karena, seperti yang saya mengerti, semua transfer USB harus melalui CPU. Apakah ini yang sebenarnya menyebabkan pelambatan? Dan, yang lebih penting, apakah ada cara bagi saya untuk mengurangi ini?


EDIT (menjawab komentar):

Drive internal dan eksternal sama-sama menggunakan ext4 asli, jadi tidak ada FUSE. Tidak ada yang harus mengindeks file yang saya tahu, kecuali untuk apa pun yang mungkin dilakukan Ubuntu secara default (ini adalah Server Ubuntu tanpa kepala). CPU tampaknya tidak dapat dimuat dari htop Perspektif, tetapi laporan penggunaan waktu kerja melonjak dari sekitar 0,5 ke 6.0-8.0. Pembatasan nilai pv menggunakan -L tampaknya membantu, jadi itu solusi untuk satu alat. Saya biasanya hanya menggunakan pv saat menyalin file tunggal. Apakah ada cara untuk menilai-membatasi program lain? Saya juga lebih suka mengubah prioritas daripada hanya membatasi saja. Optimalkan berdasarkan pada beban sistem.

Ini adalah instalasi murni dari server Ubuntu. Itu memang sudah menginstal xorg, tapi saya tidak berpikir bahkan ada window manager yang diinstal dengannya, saya hanya ingin X11 meneruskan lebih dari ssh.

Selain itu, sementara pembatas kecepatan pada pv, rsync, dll berfungsi dengan baik untuk menghemat sistem, saya juga ingin memaksimalkan kecepatan transfer. Apakah ada cara lain selain dari ion / ionice yang tampaknya tidak melakukan banyak hal, untuk memberi tahu sistem agar melakukan transfer secepat mungkin, tetapi berikan hal lain pada sistem dengan prioritas yang lebih tinggi jika diinginkan? Jadi, misalnya, jika saya memiliki transfer ke USB yang akan membutuhkan waktu satu jam untuk selesai, maka setengah jam seseorang mulai menggunakan salah satu situs python, itu akan mentransfer secepat mungkin selama setengah jam pertama, tetapi kemudian sistem akan mulai membatasinya ketika pengguna mulai membuat permintaan ke situs python. (Saya mulai berpikir pertanyaan ini seharusnya diposting di Server Fault saja, dan saya minta maaf untuk itu.)

lpreams
sumber
Berapa beban CPU selama transfer? (gunakan mis. top atau htop ). Apakah kamu sudah mencoba pv -L untuk membatasi kecepatan transfer dalam tes Anda? Apakah ini mengurangi masalah? Berapa kecepatan transfer yang kita bicarakan?
Kamil Maciorowski
Periksa juga bahwa Anda tidak mengindeks file dengan sesuatu seperti akonadi ...
Hastur
Juga: apa sistem file target? dan sumbernya? Apakah ada dari mereka yang dipasang dengan FUSE?
Kamil Maciorowski
Drive internal dan eksternal sama-sama menggunakan ext4 asli, jadi tidak ada FUSE. Tidak ada yang harus mengindeks file yang saya tahu, kecuali untuk apa pun yang mungkin dilakukan Ubuntu secara default (ini adalah Server Ubuntu tanpa kepala). CPU tampaknya tidak berada di bawah beban dari perspektif htop, tetapi laporan penggunaan waktu kerja melonjak dari sekitar 0,5 menjadi 6,0-8,0. Pv Pembatas laju menggunakan -L tampaknya membantu, jadi itu solusi untuk satu alat. Saya biasanya hanya menggunakan pv saat menyalin file tunggal. Apakah ada cara untuk menilai-membatasi program lain? Id juga lebih suka mengubah prioritas daripada hanya membatasi itu. Optimalkan berdasarkan pada beban sistem
lpreams
Coba gunakan iotop atau atop untuk melihat akses file ... gunakan BTW rsync dengan -P pilihan antara yang lain, bukan pv, itu harus melibatkan lebih sedikit panggilan sistem jika Anda menyalin banyak file ... Ketika Anda menyalin tanpa pv Apakah Anda memiliki masalah yang sama?
Hastur