Mengapa rsync bercabang sendiri? Dan mengapa satu proses bercabang seperti itu hampir agak menganggur (seperti yang terlihat di iotop)?

11

Ini mengacu pada masalah yang dinyatakan di sini dan saya juga mengalami hal yang sama.

Di salah satu server saya, saya menjalankan rsync, untuk membuat cadangan direktori besar (ukuran lebih besar dari 300 Gb) ke disk yang berbeda, dipasang pada mesin yang sama. Direktori yang sedang disinkronkan berisi ribuan direktori dan file. Saya mengeluarkan perintah rsync tunggal, dengan 'nohup' dan kemudian mendorongnya di latar belakang menggunakan perintah '&'. Perintah lengkap yang diberikan pada bash shell jarak jauh (menggunakan dempul) adalah:

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

Kemudian hanya untuk memeriksa pada tingkat berapa data disalin, saya menggunakan perintah 'iotop', dan menemukan bahwa ada 3 rsync berjalan dengan parameter yang sama. Saat mencari saya menemukan tautan di atas yang mengatakan bahwa itu normal.

Tetapi melakukan iotop untuk memantau hanya itu dan satu-satunya proses rsync yang berjalan pada sistem, saya melihat bahwa satu proses membaca file, satu menulisnya, tetapi satu menganggur. Perilaku tersebut tampaknya baik, karena satu proses hanya melakukan satu hal pada satu waktu, tetapi apa yang dilakukan proses ke-3 (dilihat sebagai yang tengah pada gambar di bawah)?

Perintah iotop yang saya gunakan adalah:

iotop -p22250 -p22251 -p22252

Berikut adalah screenshot untuk output perintah iotop:

Output perintah iotop menunjukkan 3 proses rsync

Saya menanyakan alasan ini karena saya sering menggunakan rsync, dan ingin memahami perilakunya untuk keuntungan jangka panjang. Saya bahkan membaca manual, tetapi tidak mengatakan apa-apa.

Gautam Somani
sumber

Jawaban:

9

rsync adalah program yang dirancang untuk menjadi klien dan server. Server membaca dan klien menulis. Bayangkan bahwa alih-alih satu komputer, Anda memiliki komputer melalui jaringan, saya yakin jauh lebih jelas jika Anda berpikir seperti itu.

Lalu ada controllernya. Karena operasi IO cenderung memiliki sejumlah risiko tertentu, masalah IO seharusnya tidak menyebabkan pemblokiran total atau macet. Jadi, itu menciptakan garpu untuk setiap koneksi dan duduk di latar belakang.

Pemarah
sumber
Terima kasih atas pengetahuannya. Saya memahaminya dalam pandangan komputer yang terpisah pada jaringan, setiap komputer melakukan bagian dari pekerjaan secara sinkron. Tetapi bisakah Anda juga merujuk saya ke dokumentasi perilaku di mana saya dapat membaca lebih banyak hal tentang rsync dan juga tentang konsepnya? Juga ingin tahu bagaimana data baca diteruskan oleh proses membaca ke proses yang menulis? Apakah konsep IPC digunakan?
Gautam Somani
3
@GautamSomani Halaman rsync resmi akan menjadi sumber terbaik Anda untuk itu. rsync.samba.org Juga, cara kerjanya tersedia di sini: rsync.samba.org/how-rsync-works.html Jika Anda menginginkan detail lebih lanjut, Anda mungkin harus menggali ke dalam sumbernya.
Grumpy,
Penulis asli meluncurkan rsync secara lokal. Dia tidak terhubung ke rsyncd sehingga daemon tidak dapat mem-fork anaknya. Dan tidak ada koneksi jaringan. Jadi masih ada pertanyaan mengapa rsync bercabang ketika dieksekusi secara lokal. Jawabannya menyesatkan dan salah.
drookie
@drookie Tidak masalah apakah itu lokal atau melalui jaringan. Cara kerjanya sama. Ini juga menjelaskan perilaku ini dalam dokumen resmi yang saya tautkan tepat di atas komentar Anda, yang juga mengatakan, "baik dalam transfer lokal, melalui shell jarak jauh atau melalui soket jaringan."
Grumpy