Pertanyaan Menampilkan kemajuan total dalam rsync: apakah mungkin?


Saya sudah mencari opsi ini, tetapi hanya menemukan solusi yang melibatkan penambalan khusus. Fakta bahwa itu tidak muncul di - bantuan dan tidak ada info lagi yang dapat ditemukan mungkin menunjukkan jawabannya 'tidak', tetapi saya ingin melihat ini dikonfirmasi.

Apakah mungkin untuk ditampilkan kemajuan transfer file total dengan rsync?


195
2018-01-05 15:26




Sejak rsync 3.1.0 sekarang ada kemajuan total transfer file dasar yang disertakan. Lihat jawaban serverfault.com/a/441724/107793 untuk detailnya. - Florian Feldhaus
Harap ubah jawaban yang diterima. @ David menjawab sama sekali tidak berguna. - Navin


Jawaban:


danakim benar. Tidak ada cara-cara sepele untuk menambahkan indikator kemajuan total.

Alasannya adalah ketika rsync melihat daftar file untuk disinkronkan, ia tidak tahu sebelumnya file mana yang perlu diubah. Jika Anda melakukan transfer delta, delta itu sendiri harus dihitung terlebih dahulu untuk memberikan gambaran menyeluruh tentang pekerjaan yang perlu dilakukan.

Dengan kata lain, cara termudah untuk menghitung berapa banyak pekerjaan yang harus dilakukan adalah benar-benar melakukannya.


33
2018-01-06 04:10



Anda masih bisa memiliki indikator sederhana seperti (data ditransfer + data dilewati) / (total data dalam sumber), atau (# file ditransfer atau dilewati) / (# file di sumber). Ini tidak akan menjadi sangat akurat, tetapi itu akan memberi ide. Bagus untuk saat Anda melakukan transfer besar pada akhir hari, dan Anda bertanya-tanya apakah harus menunggu dan mematikan komputer, atau membiarkannya berjalan untuk malam ... - naught101
Saya tidak percaya kesimpulan itu benar. Saya pikir @ naught101 menjadi lebih adil untuk pertanyaan, dan saya pikir memprediksi jawaban untuk tidak menggunakan --size-onlyatau sejenisnya lebih tidak akurat. - Evan Carroll
Pada saat saya menulis jawabannya, itu akurat - rsync tidak memiliki mekanisme untuk indikator kemajuan total. Dan ya, Anda bisa menulis sendiri, tetapi sangat sedikit orang yang mau. - David Mackintosh
Komentar untuk pendatang baru: Sekarang mungkin: serverfault.com/a/441724/422003 - imposeren


Sekarang ada cara resmi untuk melakukan ini di rsync (versi 3.1.0 versi protokol 31, Diuji dengan Ubuntu Trusty 14.04).

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

Saya mencoba dengan saya /usr folder karena saya ingin fitur ini untuk tranferring seluruh filesystem, dan /usr tampaknya menjadi sampel representatif yang baik.

Itu --info=progress2 memberikan persentase keseluruhan yang bagus, bahkan jika itu hanya sebagian nilai. Bahkan, saya /usr folder lebih dari 6 gigs:

#> du -sh /usr
6,6G    /usr/

dan rsync butuh banyak waktu untuk memindai semuanya. Jadi hampir semua waktu persentase yang saya lihat adalah sekitar 90% selesai, tapi tetap saja nyaman melihat ada sesuatu yang disalin :)

Referensi:


312
2017-10-24 11:13



Perhatikan bahwa ini telah mendarat di 3.1.0. Penting juga untuk dicatat bahwa ini tidak selalu akurat dalam perspektif waktu. Ini pada dasarnya menunjukkan jumlah data yang telah diverifikasi ada di ujung terpencil. Dan laju adalah tingkat di mana data sedang dipelajari untuk menjadi benar pada ujung terpencil (apakah sudah seperti itu atau data baru dipindahkan dan membuatnya benar). Jadi meskipun sangat berguna, Anda perlu memahami peringatan. - Kevin Cox
Untuk menggunakan ini di OSX dengan homebrew, "buat keran homebrew / dupes; buat instalasi rsync" - Matt Carrier
Perlu dicatat itu --info=progress2 tidak berfungsi -v - sanmai
Tambahkan --no-i-r beralih juga, jadi rsync tidak memindai secara bertahap tetapi sepenuhnya sebelum menyalin dan mengetahui + menampilkan berapa banyak pekerjaan yang tersisa. - Alex
Perhatikan bahwa Anda dapat menggunakan --human-readable (atau -h) untuk melihat ukuran total dalam MB / GB .. sedang berlangsung. - Nux


Anda bisa dengan 'pv' (apt-get install pv dengan Debian dan ubuntu). Saya merekomendasikan untuk memantau jumlah file yang ditransfer, karena jumlah data yang ditransfer tidak berkorelasi dengan ukuran file tetapi pada delta antara sumber dan tujuan. Dan menghitung file akan menghitung kemajuan yang sama untuk satu delta besar dan satu lagi dengan delta kecil. Yang berarti bahwa dalam hal apapun estimasi ETA mungkin jauh. ETA berbasis ukuran hanya berfungsi jika tujuan Anda kosong, dalam hal ini delta == ukuran sumber.

Gagasan umumnya adalah untuk memancarkan satu baris per file 'ditransfer' dari rsync, dan menghitung garis-garis tersebut dengan 'pv':

rsync -ai / sumber remote: / dest | pv -les [jumlah file]> / dev / null

Saya cenderung mem-backup seluruh filesystem (karena beberapa alasan), dalam hal ini Anda dapat menggunakan yang jauh lebih murah df untuk mendapatkan jumlah file (bukan du atau find yang akan melintasi hierarki sumber Anda di lain waktu setelah rsync melakukannya). Opsi -x muncul untuk memastikan rsync tetap pada sistem berkas sumber yang sama (dan tidak mengikuti dudukan dalam lainnya):

rsync -aix / sumber remote: / dest | pv -les $ (df -i / source | perl -ane 'print $ F [2] jika $ F [5] = ~ m: ^ /:')> / dev / null

Jika Anda ingin menghitung file dalam / sumber dengan cara umum, gunakan find /source|wc -l (peringatan lagi: mungkin lambat dan berat pada I / O).


42
2018-06-10 10:22



Seperti ditentukan zerodeuz, gunakan "df" hanya ketika Anda melakukan rsyncing seluruh partisi, seperti df -i /source mendapat jumlah inode (file) dari semua partisi di mana / sumber berada. Kalau tidak, gunakan 'temukan' untuk menghitung file di dalam direktori di dalam "$ ()" ekspresi. - lepe
Sebuah alternatif untuk du atau find - misalkan Anda menyelesaikan salinan yang tidak lengkap atau melakukan pembaruan di tempat dengan menghapus - yang akan digunakan rsync -ai --dry-run untuk mendapatkan daftar file yang sama, jalankan utama akan diteruskan pv - Izkata


Untuk transfer panjang, saya senang dengan berlari du -s di kedua sisi. Bahkan watch -n1 du -s, jika saya merasa sangat cemas.

watch menjalankan perintah (du -s di sini) secara berkala (setiap 1 detik di sini) dan menampilkan layar penuh output.


28
2018-01-05 16:30



Terima kasih atas contohnya watch perintah! - Cam
//, Pintar! Menurut linfo.org: "Perintah du (yaitu, penggunaan disk) melaporkan ukuran pohon direktori termasuk semua konten dan ukuran file individual. Ini membuatnya berguna untuk melacak ruang babi, yaitu, direktori dan file yang mengkonsumsi ruang dalam jumlah besar atau berlebihan pada hard disk drive (HDD) atau media penyimpanan lainnya. " - Nathan Basanese
Saya tidak tahu transfer panjang seperti apa yang Anda lakukan, di mana du dapat berjalan. du lambat sekali ketika hasilnya akan berada di TB dan M file. - Nobody
Untuk "transfer panjang" saya, satu operasi memakan waktu sekitar satu jam untuk menyelesaikan, selama rsync berjalan lebih lambat, karena mereka berebut akses ke disk. - Abhi Beckert


Bersama --info = progress2 Anda juga bisa nonaktifkan rekursi tambahan. Ini akan membangun seluruh daftar file di awal dan dengan demikian memberi Anda ide yang lebih baik dari keseluruhan kemajuan (setidaknya dalam jumlah file, saya tidak berpikir itu memindai ukuran file). Ada trade-off. Ini lebih mahal dari memori, dan menunda dimulainya transfer yang sebenarnya. Mungkin paling baik digunakan dalam koneksi tautan lambat, dan tentunya tidak bagus untuk gajillions file.

Berikut ini adalah dari halaman manual rsync di bawah detail untuk -r - rekursif

Pengulangan inkremental dapat dinonaktifkan menggunakan --no-inc-rekursif pilihan atau lebih pendek --no-i-r alias.

(sumber: http://rsync.samba.org/ftp/rsync/rsync.html )

Juga, jika Anda menentukan --hapus sebelum itu akan memaksa full-rekursi di awal, yang dibutuhkan untuk menghapus file yatim (file yang ada di dest, tetapi tidak di sumber).


20
2017-10-16 19:56



Terima kasih untuk ini, jawaban lainnya menghasilkan% usia yang terus naik dan turun! - artfulrobot


Pada dasarnya tidak. Anda hanya dapat menampilkan progres per file dengan flag --progress, tetapi itu saja.

Saya menduga Anda dapat menulis pembungkus di sekitarnya atau menggunakan patch yang sudah Anda temukan tetapi Anda harus bertanya pada diri sendiri apakah itu benar-benar sepadan, apakah Anda benar-benar membutuhkan kemajuan total untuk rsync?


11
2018-01-05 15:50



Berikut ini adalah skrip wrapper yang menunjukkan kemajuan total dan kemajuan file sebagai bilah kemajuan yang bagus: gist.github.com/JohannesBuchner/4d61eb5a42aeaad6ce90 - j13r
Anda dapat mengubah caranya --progress bekerja menggunakan --info=progress2, ini akan menunjukkan kepada Anda kemajuan global. Anda akan perlu menonaktifkan algoritma rekursif tambahan untuk itu menjadi berguna, jadi --info=progress2 --no-inc-recursive - mat
@ j13r Anda dapat berbagi inti ini sebagai jawaban juga! pilihan yang bagus! - skywinder


Saya juga mencari cara untuk menunjukkan kemajuan total dengan rsync dan saya telah menemukan seorang penjawab yang berguna dari posting ini: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

Pada dasarnya, Anda bisa menggunakannya --info = progress2 dalam versi dev rsync 3.1.0. Inilah yang dimaksud dokter telah berkata:

Ada juga opsi --info = progress2 yang menghasilkan statistik berdasarkan transfer keseluruhan, bukan file individual. Gunakan bendera ini tanpa mengeluarkan nama file (mis. Hindari -v atau tentukan --info = nama0 jika Anda ingin melihat bagaimana transfer dilakukan tanpa menggulir layar dengan banyak nama. (Anda tidak perlu menentukan - opsi kemajuan untuk menggunakan --info = progress2.)


7
2017-07-04 14:30



--info=name0 adalah emas - ipatch