Teknik untuk bekerja dengan rsync. Penggunaan rsync yang berkesan

rsync(ms. Remote Synchronization) ialah program untuk sistem seperti UNIX yang menyegerakkan fail dan direktori di dua tempat sambil meminimumkan trafik, menggunakan pengekodan data jika perlu. Perbezaan penting antara rsync dan banyak program/protokol lain ialah pencerminan dilakukan oleh satu utas dalam setiap arah (bukannya satu atau lebih utas setiap fail). rsync boleh menyalin atau memaparkan kandungan direktori dan menyalin fail, secara pilihan menggunakan pemampatan dan rekursi.

Daemon rsyncd, yang melaksanakan protokol rsync, menggunakan port TCP 873 secara lalai.

    Algoritma

Utiliti rsync menggunakan algoritma yang dibangunkan oleh pengaturcara Australia Andrew Tridgell untuk memindahkan struktur (seperti fail) dengan cekap merentasi sambungan komunikasi apabila komputer penerima sudah mempunyai versi struktur yang berbeza. Komputer penerima membahagikan salinan failnya kepada ketulan tidak bertindih dengan saiz tetap S, dan mengira jumlah semak untuk setiap bahagian: cincangan MD4 dan semak bergolek yang lebih lemah, dan menghantarnya ke pelayan yang ia disegerakkan. Pelayan yang disegerakkan dengan mengira jumlah semak untuk setiap bahagian saiz S dalam versi failnya, termasuk bahagian yang bertindih. Ini boleh dikira dengan cekap kerana sifat istimewa rolling checksum: jika rolling checksum byte n kepada n+S-1 sama dengan R, maka rolling checksum byte n+1 to n+S boleh dikira daripada R, byte n dan byte n +S tanpa perlu mengambil kira bait yang terletak di dalam selang ini. Oleh itu, jika bait semak bergolek 1-25 telah pun dikira, maka jumlah semak sebelumnya dan bait 1 dan 26 digunakan untuk mengira bait semak bergolek 2-26.

    Rsync mencari fail untuk dihantar menggunakan algoritma "semakan cepat" (algoritma lalai), mencari fail yang telah berubah saiz atau tarikh terakhir diubah suai.

    Sila ambil perhatian bahawa rsync mesti dipasang pada kedua-dua nod, tempatan dan jauh.

    Permohonan. rsync dicipta sebagai pengganti rcp dan scp. Salah satu penggunaan pertama rsync adalah untuk mencerminkan atau menyandarkan sistem klien Unix ke pelayan Unix pusat menggunakan rsync/SSH dan akaun Unix biasa. Dengan penjadual tugas seperti Menggunakan penjadual cron Linux, adalah mungkin untuk mengatur pencerminan berasaskan rsync automatik melalui saluran selamat secara kriptografi antara banyak komputer dan pelayan pusat.

kunci permulaan rsync

    Contoh: Direktori tempatan. Kandungan folder dir_a disegerakkan secara rekursif (jika terdapat “/” di hujung direktori sumber, ini bermakna menyalin kandungan direktori; ketiadaan garis miring bermakna menyalin direktori dan kandungannya.) dengan direktori dir_b. Fail dipindahkan dalam mod "arkib", yang memastikan pautan simbolik, fail peranti, atribut, hak, kebenaran akses, dsb. akan dikekalkan semasa pemindahan. Mampatan digunakan untuk mengurangkan saiz data yang dihantar. Dalam direktori dir_b, fail yang tiada dalam sumber (dir_a) dipadamkan. rsync -avz --delete /src/dir_a/ /data/dir_b

    Contoh: Direktori jauh disegerakkan dengan direktori tempatan: rsync -az -e ssh --delete 192.168.1.14:/home/pub_remote/ /home/pub_local

    Contoh: menghantar kunci identiti ssh melalui baris arahan rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync /mirror-rsync-key"

    -n, –lari kering Mod nyahpepijat. Dalam kes ini, rsync tidak akan menukar atau memadam fail, tetapi akan menunjukkan keseluruhan kemajuan.

    -q, -senyap Pilihan ini mengurangkan jumlah output maklumat semasa pemindahan dan menyekat bilangan mesej daripada pelayan dengan ketara. Pilihan ini berguna apabila rsync dilancarkan oleh cron.

    -v, –verbose Pilihan meningkatkan jumlah maklumat yang dipaparkan semasa pemindahan. Secara lalai, rsync tidak mengeluarkan apa-apa. Pilihan -v sahaja akan memberi anda maklumat tentang fail mana yang sedang dipindahkan dan ringkasan ringkas pada penghujungnya. Dua pilihan -v akan memberikan maklumat tentang fail mana yang dipindahkan, yang tidak memerlukan pengemaskinian, dan sedikit lagi maklumat pada penghujungnya. Lebih daripada dua pilihan -v digunakan semasa menyahpepijat rsync. Format output fail lalai ditetapkan kepada -out-format "%n%L", yang hanya menunjukkan nama fail dan, jika objek ialah pautan, apa yang dirujuknya. Pada tahap penyahpepijatan pertama (satu -v) perubahan atribut fail tidak ditunjukkan. Jika anda meminta senarai terperinci atribut yang telah berubah (nyatakan pilihan -itemize-changes, atau tambah "%i" kepada -out-format), output (dalam klien) akan berkembang untuk menyebut semua item yang mempunyai berubah. Lihat pilihan -out-format untuk butiran lanjut.

    -a, –arkib Bersamaan dengan -rlptgoD. Ini adalah cara cepat untuk mengatakan anda mahu pemprosesan rekursif dan menyimpan hampir segala-galanya (pilihan -H akan menjadi peninggalan yang ketara). Satu-satunya pengecualian kepada kesetaraan di atas ialah apabila -files-dari ditentukan, dalam hal ini pilihan -r tidak mempunyai kesan. Ambil perhatian bahawa pilihan -a tidak mengekalkan pautan keras kerana mencari fail berbilang aksara adalah mahal. Anda mesti menggunakan pilihan -H secara berasingan.

    –tiada-PILIHAN Anda boleh melumpuhkan satu atau lebih pilihan dengan memberi awalan nama pilihan dengan "tidak-". Tidak semua pilihan boleh menggunakan awalan ini: hanya pilihan yang mengikuti daripada pilihan lain (cth -no-D, -no-perms) atau mempunyai kewajipan berbeza dalam keadaan berbeza (cth -no-whole-file, -no- blocking-io , -no-dirs). Anda boleh menentukan pilihan panjang atau pendek selepas awalan (contohnya -no-R atau -no-relative). Contohnya: jika anda ingin menggunakan pilihan -a (-archive) tetapi tidak mahu -o (-owner), bukannya menukar -a kepada -rlptgD, anda boleh menentukan -a -no-o (atau -a -tiada pemilik). Susunan pilihan adalah penting: jika anda menentukan -no-r -a, pilihan -r masih akan didayakan; anda mesti menentukan -a -no-r. Ambil perhatian bahawa kesan sampingan pilihan -files-from BUKAN kedudukan, sementara ia mempengaruhi keadaan lalai beberapa pilihan dan sedikit mengubah maksud pilihan -a (lihat pilihan -files-dari untuk butiran lanjut)

    -z, –mampatkan Dengan pilihan ini, rsync memampatkan semua data fail yang dipindahkan. Ini berguna pada garis perlahan. Kaedah mampatan yang digunakan adalah sama seperti yang dilaksanakan oleh gzip. Ambil perhatian bahawa ini biasanya mencapai nisbah mampatan yang lebih baik daripada yang boleh dicapai menggunakan mampatan program shell jauh atau mampatan lapisan pengangkutan kerana Proses pemampatan melibatkan semua maklumat yang dihantar dalam blok data yang sepadan. --compress-level=NUM secara eksplisit menetapkan tahap mampatan --skip-compress=LIST langkau memampatkan fail dengan akhiran dalam LIST

    -b, –sandaran buat sandaran --backup-dir=DIR buat sandaran ke direktori yang ditentukan --suffix=AKSIAN sandaran akhiran (default ~)

    –numeric-id Daripada nama kumpulan dan pengguna, id berangka mereka dihantar dan dipadankan antara satu sama lain di kedua-dua hujungnya. Secara lalai, rsync menggunakan nama kumpulan dan pengguna untuk menentukan pemilik fail. uid khas 0 dan gid 0 tidak pernah didedahkan melalui nama pengguna/kumpulan, walaupun –numeric-id tidak dinyatakan.

Jika sistem sumber berjalan dalam persekitaran chrooted atau jika pengguna atau kumpulan tidak wujud pada bahagian penerima, maka id angka asal digunakan.

    -c, –checksum Mengubah cara ia menyemak fail yang diubah. Tanpa pilihan ini, rsync menggunakan algoritma "semakan cepat" (ditetapkan secara lalai), yang menyemak perbezaan dalam saiz fail dan masa pengubahsuaian. Pilihan ini menukar algoritma untuk membandingkan menggunakan jumlah semak MD4 128-bit untuk setiap fail yang sepadan dengan saiz. Menyusun checksum bermakna kedua-dua pihak akan membazirkan banyak cakera I/O membaca semua data dalam fail yang dipindahkan (dan ini sebelum sebarang bacaan yang akan dilakukan untuk memindahkan fail yang diubah), jadi ini boleh melambatkan keadaan dengan ketara. Bahagian penghantar menjana checksum semasa mengimbas sistem fail, yang menghasilkan senarai fail yang tersedia. Penerima menjana jumlah semak apabila ia mencari fail yang diubah, dan menyemak jumlah semak mana-mana fail yang sama saiz dengan fail sepadan yang dihantar: fail dengan saiz yang diubah atau jumlah semak yang diubah dipilih untuk penghantaran. Ambil perhatian bahawa rsync sentiasa menyemak bahawa setiap fail yang dipindahkan telah dibina semula dengan betul pada bahagian penerima, ia melakukan ini dengan menyemak keseluruhan jumlah semak fail yang dijana semasa pemindahan fail.

    -e, –rsh=COMMAND - anda boleh menentukan mana-mana shell jauh (Menyediakan dan menggunakan SSH, rsh, remsh), atau tetapkan pembolehubah persekitaran RSYNC_RSH. --rsync-path=PROGRAM tentukan rsync untuk dijalankan pada mesin jauh --langkau sedia ada mencipta fail baharu pada penerima --abaikan langkau sedia ada mengemas kini fail yang wujud pada penerima --remove-source-files penghantar mengalih keluar fail yang disegerakkan (bukan- dir) --del an alias untuk --delete-during --delete padam fail luar daripada dirs dest. padam fail daripada sandaran yang tidak lagi berada di bahagian sumber --padam-sebelum penerima memadam sebelum pemindahan (lalai) --padam-semasa penerima memadam semasa xfer, bukan sebelum --padam-tangguh cari pemadaman semasa, padam selepas -- padam- selepas penerima memadam selepas pemindahan, bukan sebelum "-selepas" bermakna anda perlu memadam fail hanya selepas penyegerakan selesai. --delete-excluded juga padam fail yang dikecualikan daripada dir tujuan --ignore-errors padam walaupun terdapat ralat I/O. Padam walaupun terdapat ralat I/O. --paksa pemadaman paksa dir walaupun tidak kosong --max-delete=NUM jangan padam lebih daripada NUM fail --max-size=SIZE jangan pindahkan mana-mana fail yang lebih besar daripada SIZE --min-size=SIZE don "t pindahkan mana-mana fail yang lebih kecil daripada SIZE --separa simpan fail yang dipindahkan sebahagian --partial-dir=DIR letakkan fail yang dipindahkan separa ke dalam DIR --delay-updates meletakkan semua fail yang dikemas kini pada tempatnya pada akhir

Padam berbeza daripada –delete-after kerana pemadaman dilakukan pada permulaan, dan bukan pada peringkat akhir proses sandaran. –delete-after adalah lebih pantas kerana ia tidak memerlukan peringkat tambahan merentasi senarai fail, tetapi memerlukan penggunaan pilihan –force untuk mengendalikan situasi seperti memadam fail dan mencipta direktori dengan nama yang sama;

Corak pengecualian

Corak pengecualian dan kemasukan, setelah ditentukan, membenarkan kefleksibelan dalam memilih fail yang harus dipindahkan dan yang harus dilangkau.

rsync membina senarai tersusun berdasarkan pilihan –include/–exclude yang ditentukan pada baris arahan. Rsync menyemak setiap fail atau nama direktori terhadap setiap corak kemasukan/pengecualian. Perlawanan pertama berkuat kuasa. Jika corak yang dipadankan adalah eksklusif, maka fail yang sepadan akan dilangkau. Jika corak adalah inklusif, maka ia tidak dilangkau. Jika tiada corak padanan untuk nama fail, ia juga tidak dilangkau.

Nama fail yang disemak terhadap corak sedemikian ditentukan secara relatif kepada direktori destinasi, "direktori teratas", jadi corak tidak semestinya perlu memasukkan unsur-unsur direktori sumber atau destinasi. Satu-satunya corak masa akan disemak terhadap fail mutlak atau laluan direktori ialah apabila laluan sumber ialah direktori akar sistem fail.

Ambil perhatian bahawa apabila menggunakan pilihan -r (tersirat oleh -a), setiap bahagian individu setiap laluan dicari dari atas ke bawah, supaya corak kemasukan/pengecualian digunakan secara rekursif pada setiap bahagian tersebut.

Juga ambil perhatian bahawa pilihan –include dan –exclude hanya membenarkan satu corak setiap satu. Untuk menambah berbilang templat, gunakan pilihan –include-from dan –exclude-from atau –include dan –exclude berbilang pilihan, masing-masing.

Templat boleh ditentukan dalam beberapa bentuk. Peraturan untuk mereka adalah:

    Jika corak bermula dengan /, maka ia disemak pada permulaan nama fail, jika tidak - terhadap bahagian belakang nama. Ini adalah bersamaan dengan ^ terkemuka dalam ungkapan biasa. Oleh itu, "/foo" mesti sepadan dengan fail bernama "foo" di bahagian atas pokok yang dihantar. Sebaliknya, "foo" mesti sepadan dengan mana-mana fail "foo" di mana-mana dalam pepohon direktori, kerana algoritma digunakan secara rekursif dari atas ke bawah. Ia berfungsi seolah-olah setiap komponen laluan adalah nama fail penamat. Awal / tidak mengubah corak menjadi laluan mutlak.

    Jika corak berakhir dengan /, maka ia hanya sepadan dengan direktori, bukan fail, bukan pautan dan bukan peranti.

    Jika corak mengandungi aksara kad bebas daripada set *?[, maka peraturan kad bebas shell untuk nama fail digunakan untuk menyemak padanan. Jika tidak, hanya padanan rentetan digunakan.

    Padanan asterisk berganda termasuk garis miring, manakala padanan asterisk tunggal * berakhir dengan garis miring.

    Jika corak mengandungi garis miring (tidak mengira garis miring mengekor) atau "" , maka corak tersebut disemak pada nama fail penuh, termasuk mana-mana direktori induk. Jika corak tidak mengandungi / atau " ", maka corak disemak pada bahagian belakang nama fail. Sekali lagi, ingat bahawa algoritma digunakan secara rekursif, jadi "nama fail penuh" sebenarnya boleh menjadi mana-mana bahagian laluan jauh dalam hierarki dari direktori permulaan.

    Jika corak bermula dengan "+" (tambahan diikuti dengan ruang), maka ia sentiasa dianggap sebagai corak inklusif, walaupun dinyatakan sebagai sebahagian daripada parameter pengecualian. Bahagian "+" itu sendiri tidak diambil kira semasa menyemak pematuhan.

    Jika corak bermula dengan "-" (tolak diikuti dengan ruang), maka ia sentiasa dianggap sebagai corak eksklusif, walaupun ia muncul sebagai sebahagian daripada parameter kemasukan. Bahagian "-" itu sendiri tidak diambil kira semasa menyemak pematuhan.

    Jika corak menyatakan satu tanda seru! , maka senarai include/exclude semasa ditetapkan semula dengan mengalih keluar semua corak yang ditakrifkan sebelum ini.

+/- peraturan paling berguna dalam senarai yang dibaca daripada fail, membolehkan anda mempunyai satu senarai keseluruhan yang mengandungi corak eksklusif dan inklusif.

Jika anda menamatkan senarai kecualikan dengan --exclude "*", ambil perhatian bahawa disebabkan sifat rekursif, algoritma akan berhenti di direktori induk dan tidak akan mencuba fail di dalamnya melainkan anda menyatakan secara eksplisit untuk memasukkan direktori induk fail yang anda mahu menghidupkannya. Untuk memasukkan semua direktori, gunakan –include "*/" sebelum –exclude "*".

Beberapa contoh kemasukan/pengecualian:

Kecualikan "*.o" kecualikan semua nama fail yang sepadan *.o --kecualikan "/foo" kecualikan fail bernama foo dalam direktori atas --kecualikan "foo/" kecualikan mana-mana direktori bernama foo --kecualikan "/foo/ */ bar" kecualikan mana-mana fail bernama bar dua peringkat jauh dalam hierarki daripada direktori "foo" di bahagian atas pokok --exclude "/foo/**/bar" kecualikan sebarang fail bernama bar dua atau lebih peringkat jauh dalam hierarki dari direktori atas "foo" --include "*/" --include "*.c" --exclude "*" sertakan hanya direktori dan fail dengan sumber C --include "foo/" --include "foo/bar .c" --exclude "*" hanya akan menyertakan foo/bar.c (direktori foo/ mesti disertakan secara eksplisit, jika tidak, ia akan dilangkau kerana "*")

Kod Penyiapan

0 Kejayaan 1 Ralat sintaks atau penggunaan 2 Ketidakserasian protokol 3 Ralat pemilihan fail input/output dan direktori 4 Tindakan yang diminta tidak disokong: percubaan telah dibuat untuk berfungsi dengan fail 64-bit pada platform yang tidak menyokongnya; atau parameter ditentukan yang hanya disokong oleh klien dan tidak disokong oleh pelayan. 5 Ralat semasa cuba mula bekerja melalui protokol pelayan pelanggan 10 Ralat soket I/O 11 Ralat I/O Fail 12 Ralat dalam aliran data protokol rsync 13 Ralat diagnostik 14 Ralat dalam kod IPC 20 Sama ada isyarat SIGUSR1 atau SIGINT diterima 21 Panggilan Waitpid() mengembalikan ralat 22 Ralat memperuntukkan penimbal memori teras 23 Pemindahan tidak lengkap disebabkan ralat 24 Pemindahan tidak lengkap kerana fail sumber hilang 30 Masa menunggu semasa menghantar/menerima data

Pembolehubah Persekitaran

CVSIGNORE Pembolehubah persekitaran CVSIGNORE melengkapkan corak pengecualian daripada fail .cvsignore. Lihat pilihan --cvs-exclude untuk butiran. RSYNC_RSH Pembolehubah persekitaran RSYNC_RSH membolehkan anda mengatasi program cangkerang jauh yang digunakan oleh rsync sebagai pengangkutan. Pilihan baris arahan untuk cangkerang ditentukan selepas nama atur cara, serta untuk parameter -e. RSYNC_PROXY Pembolehubah persekitaran RSYNC_PROXY membolehkan anda untuk beritahu klien rsync untuk menggunakan proksi web untuk menyambung ke pelayan rsync. Anda mesti menentukan proksi sebagai nama hos: pasangan port. RSYNC_PASSWORD Menetapkan nilai kepada RSYNC_PASSWORD membenarkan sambungan rsync ke pelayan rsync tanpa campur tangan pengguna untuk memasukkan kata laluan. Ambil perhatian bahawa ini tidak sama dengan kata laluan cangkang pengangkutan cth ssh.USER atau LOGNAME Pembolehubah persekitaran USER atau LOGNAME digunakan untuk menentukan pengguna lalai yang namanya diberikan kepada pelayan rsync untuk pengesahan HOME Pembolehubah HOME digunakan untuk mencari fail .cvsignore pengguna.

Contoh skrip rsync

#!/bin/bash # laluan penuh ke penyenaraian direktori anda BACKUP_LST =/ etc/ backup/ backup.lst cat $(BACKUP_LST) | sambil membaca Res; lakukan rsync -e ssh -acq --delete --force $Res backup@ B:/ var/ backup$Res done

Terdapat beberapa pelayan yang sama (4 nod) di Amazon EC2 dengan Ubuntu. Semua orang menjana dan menyimpan cache pada cakera mereka yang mereka ingin segerakkan. Tetapi rsync mudah tidak akan berfungsi di sini - terdapat beberapa bilion fail, nfs terlalu perlahan, dsb. Senarai penuh pilihan yang dipertimbangkan dengan penjelasan adalah di bawah.

Di samping itu, dari semasa ke semasa anda perlu memadam fail lapuk pada semua pelayan sekaligus, yang kini dilakukan secara manual dan mengambil masa beberapa hari. Saya bercadang untuk menerangkan persoalan sistem fail terpantas untuk Kes Penggunaan sedemikian nanti. Saya hanya akan membuat tempahan bahawa XFS telah dipilih atas beberapa sebab.

Selepas menguji beberapa teknologi kluster dan sistem fail, atas nasihat rakan yang lebih lama, kami memutuskan untuk menggunakan rsync yang sama, tetapi bersempena dengan inotify. Selepas mencari di Internet sedikit untuk penyelesaian siap, supaya tidak mencipta semula roda, saya menemui csyncd, inosync dan lsyncd. Saya sudah berada di hab, tetapi ia tidak sesuai di sini, kerana... menyimpan senarai fail dalam pangkalan data SQLite, yang tidak mungkin berfungsi dengan baik walaupun dengan sejuta rekod. Dan dengan jumlah sedemikian tidak perlu pautan tambahan. Tetapi lsyncd ternyata betul-betul apa yang kami perlukan.

4. Mari kita mulakan syaitan pada semua nod:

/etc/init.d/lsyncd mula

Jika anda meninggalkan "nodaemon = true" dalam konfigurasi, anda akan dapat melihat apa yang berlaku.

Kelajuan pemindahan data mencapai 300 Mbit/s dan ini mempunyai sedikit kesan pada beban pelayan (berbanding dengan GlusterFS yang sama, sebagai contoh), dan kelewatan dalam kes ini melancarkan puncak. Banyak yang masih bergantung pada FS yang digunakan. Di sini juga, saya terpaksa melakukan sedikit penyelidikan, dengan nombor dan graf, kerana keadaannya agak spesifik dan keputusan ujian yang diterbitkan sedia ada tidak mencerminkan apa yang diperlukan dalam tugas itu.

Apa lagi yang dipertimbangkan dan mengapa ia tidak sesuai dalam kes ini

Keseluruhan kajian ini bertujuan untuk bekerja dengan Amazon EC2, dengan mengambil kira batasan dan cirinya, jadi penemuan itu hanya membimbangkannya.
  • DRBD – replikasi berlaku pada peringkat blok. Jika satu perumah merosot, kedua-duanya terbunuh. Had 2 nod. (Lebih banyak mungkin, tetapi yang ke-3 dan ke-4 hanya boleh disambungkan sebagai hamba.)
  • Ocfs2 - digunakan sama ada di atas DRBD (yang ada yang bagus tentang Habré), atau anda perlu boleh memasang satu partition daripada beberapa nod. Tidak boleh dilakukan pada ec2.
  • Gfs2 ialah analog ocfs2. Saya belum mencubanya, kerana mengikut ujian, FS ini lebih perlahan daripada ocfs2, jika tidak, ia adalah analognya.
  • GlusterFS – di sini segala-galanya berfungsi hampir serta-merta dan seperti yang sepatutnya! Mudah dan logik untuk ditadbir. Anda boleh membuat gugusan sehingga 255 nod dengan nilai replika arbitrari. Saya mencipta partition kluster daripada beberapa pelayan dan memasangnya pada mereka tetapi dalam direktori yang berbeza (iaitu, pelayan juga adalah pelanggan). Malangnya, kluster ini dipasang pada klien melalui FUSE, dan kelajuan tulis ternyata di bawah 3 MB/saat. Oleh itu, kesan daripada penggunaan adalah sangat baik.
  • Luster - untuk menjalankan perkara ini dalam mod krenel anda perlu menampal kernel. Anehnya, terdapat pakej dengan patch ini dalam repositori Ubuntu, tetapi saya tidak dapat mencari sebarang patch untuknya atau sekurang-kurangnya untuk Debian. Dan berdasarkan ulasan, saya menyedari bahawa menjalankan ini dalam sistem deb adalah shamanisme.
  • Hadoop w/ HDFS, Cloudera - tidak mencuba kerana penyelesaian lain ditemui (lihat di bawah). Tetapi perkara pertama yang menarik perhatian anda ialah ia ditulis dalam Java, oleh itu ia akan menggunakan banyak sumber, dan skalanya tidak seperti Facebook atau Yahoo, hanya 4 nod buat masa ini.

UPD: Penyelesaian ini dilakukan dengan baik dalam ujian (selepas itu artikel itu ditulis), tetapi dalam keadaan pertempuran semuanya ternyata berbeza sama sekali. Konfigurasi pengeluaran minimum ialah 584 ribu direktori bersarang. Dan lsyncd hang innotify" dan seterusnya setiap direktori. Tidak mustahil untuk melakukan ini untuk keseluruhan pokok sekaligus. Memori, 584 ribu pemberitahuan, memakan sedikit, kira-kira 200 MB (daripada 16 GB tersedia), tetapi proses ini mengambil masa 22 minit. Pada dasarnya, ia tidak menakutkan: sebaik sahaja anda melancarkannya dan melupakannya. Tetapi selepas ini, dengan konfigurasi standard, lsyncd mula menyegerakkan semua fail, yang dalam keadaan kami sama ada kereta atau mengambil masa beberapa hari. Secara umum - bukan pilihan. 100% konsistensi tidak diperlukan dan penyegerakan awal boleh diketepikan. Yang tinggal hanyalah "mematikan". Nasib baik, daemon ditulis sedemikian rupa sehingga anda boleh menukar hampir semua fungsinya terus dari konfigurasi. Selain itu, untuk meningkatkan prestasi, default.rsync telah digantikan dengan default.rsyncssh, dan kernel telah ditala untuk had inotify. Iaitu, konfigurasi di atas sesuai untuk kebanyakan tugas, tetapi dalam situasi khusus kami, perkara berikut berfungsi:

Tetapan = ( logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 5, --<== чтобы видеть что происходит без включения подробного лога } sync { default.rsyncssh, source = "/raid", host = "node02", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, --<== описано выше delay = 3, --<== ставим по-меньше, чтобы очередь не забивать init = function(event) --<== перезагрузка функции инициализации. как она выглядела в оригинале можно посмотреть в документации или в исходниках log("Normal","Skipping startup synchronization...") --<== чтобы знать, что мы этот код вообще запускали и когда end } sync { default.rsyncssh, source = "/raid", host = "node03", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, delay = 3, init = function(event) log("Normal","Skipping startup synchronization...") end }

Tetapan kernel

inotify mempunyai tiga pilihan (lihat ls /proc/sys/fs/inotify/):
max_queued_events - bilangan maksimum acara dalam baris gilir; lalai = 16384;
max_user_instances - berapa banyak innotify contoh yang boleh dilancarkan oleh seorang pengguna; lalai = 128;
max_user_watches - berapa banyak fail yang boleh dilihat oleh pengguna; lalai = 8192.

Nilai operasi:
echo " fs.inotify.max_user_watches = 16777216 # fs.inotify.max_queued_events = 65536 " >> /etc/sysctl.conf echo 16777216 > /proc/sys/fs/inotify/max_user_watches/watches echo 65536 /max_queued_events

Jadi semuanya mula bekerja dalam pengeluaran.

Terima kasih kerana memberi perhatian!

rekrut 24 Oktober 2011 pada 00:52

Rsync: Utiliti berkuasa untuk penyalinan fail jauh dan tempatan yang pantas, fleksibel

  • Bilik kayu*

Rsync direka untuk menggantikan rcp, program salinan jauh purba untuk Unix. Disebabkan oleh penyegerakan yang meluas dan keupayaan pemindahan fail, rsync sering digunakan untuk mencipta cermin.
Menggunakan algoritma pintar, rsync membenarkan rsync untuk menghantar hanya perubahan kepada fail, tanpa perlu membandingkan dua fail untuk mengesan perubahan. Di samping itu, rsync melakukan pemampatan on-the-fly, membolehkan anda memindahkan fail dengan kecekapan maksimum.
Sebagai tambahan kepada kebaikan yang diterangkan di atas, rsync juga mempunyai beberapa ciri keselamatan yang berguna. Ia menyokong ssh, protokol yang disyorkan untuk pemindahan data selamat; Sebelum memproses maklumat, ia menulisnya ke fail sementara supaya tiada apa-apa berlaku kepada yang asal; akhirnya, ia menyokong mod khas untuk penyahpepijatan yang selamat bagi arahan.
Rsync mudah digunakan, tetapi bukan program klik dan main. Ini adalah alat berkuasa yang boleh menjadi sangat berguna, tetapi berhati-hati kerana ia boleh merosakkan sesuatu dengan mudah.

Sintaks utiliti
Sintaks utiliti adalah mudah dan agak biasa.
rsync [pilihan] sumber [destinasi]
Dengan menyatakan sumber sahaja, kami akan melihat senarai fail tanpa operasi penyalinan.

Pilihan dan contoh
Untuk memudahkan pemahaman, saya membentangkan operasi penyegerakan secara tempatan terlebih dahulu.
Cara cepat untuk menyegerakkan dua direktori adalah dengan menggunakan pilihan -a:
rsync -a foobar_src/ foobar_dst/
Dalam kes ini, fail dan direktori daripada sumber akan disalin ke destinasi, dan jika terdapat fail di sana, fail yang sepadan dengan nama akan ditimpa, dan selebihnya tidak akan disentuh.

Pilihan -a menentukan mod arkib utiliti, dan bersamaan dengan satu set pilihan:
-r, --rekursif - mod rekursif;
-l, --pautan - penciptaan semula symlinks, ini bermakna pautan simbolik juga akan dipindahkan;
-p, --perms - pemindahan hak;
-t, --times - pindahkan masa pengubahsuaian dan kemas kini pada sistem jauh. Kunci ini mesti ditetapkan untuk penyegerakan yang tepat;
-g, --group - tetapkan kumpulan fail sasaran kepada yang sama dengan sumber;
-o, --owner - tetapkan pemilik fail sasaran sama seperti sumber;
-D, - sama seperti --devices --specials - tetapkan jenis fail peranti dan jenis fail khas kepada yang sama seperti yang asal.
Akibatnya, kami mendapat salinan direktori sumber. By the way, ini boleh digunakan apabila memindahkan OS ke cakera keras lain dengan mengedit /etc/fstab, memasang/memasang semula grub pada cakera keras baharu - kami mendapat sistem yang berfungsi, tetapi itu topik lain.

Untuk memaparkan maklumat tentang operasi utiliti, terdapat pilihan - v, --verbose. Lebih banyak pilihan -v, lebih bermaklumat keluaran utiliti itu. Kandungan maklumat maksimum dicapai dengan empat pilihan -v, --verbose.

Sekiranya kami mempunyai maklumat terkini dalam direktori sumber, maka untuk tidak menyumbat penerima dengan maklumat yang telah dipadamkan atau dipindahkan dalam sumber semasa kerja, kami perlu memadamkan fail dan direktori lama. Terdapat beberapa pilihan penyingkiran untuk ini, setiap satunya menyediakan algoritma penyingkiran sendiri. Sudah ada enam daripadanya!
--del ialah bentuk yang dipendekkan daripada --delete-during ;
--delete - hanya padamkan fail luar daripada penerima;
--delete-before - penerima memadam sebelum menghantar;
--delete-semasa - penerima memadam semasa penghantaran, tetapi tidak sebelum ini;
--delete-delay - tangguhkan pemadaman/cari fail untuk dipadam semasa pemindahan, tetapi padam selepas pemindahan;
--delete-after - penerima memadam selepas penghantaran, tetapi tidak sebelum itu;
--delete-excluded - juga padam fail yang dikecualikan dalam penerima; untuk ini, corak ditentukan (--exclude=PATTERN).

Katakan kami mempunyai fail yang lebih baru pada penerima, dan kami tidak mahu ia ditimpa oleh yang lama daripada sumbernya, maka kunci digunakan untuk ini -u, --kemas kini.
-u, --update - langkau fail jika fail pada penerima lebih baharu.
Jangan risau jika tarikh direktori telah berubah, kerana... Fail itu sendiri tidak ditimpa.

Kadangkala fail boleh rosak atau diubah suai, tetapi tarikh dan saiznya adalah sama. Kemudian anda boleh menggunakan pengesahan checksum, pilihan -c, --checksum.

Tugas saya ialah memikirkan cara membuat salinan sandaran koleksi gambar, muzik dan kerja dari universiti dan tempat kerja. Pada masa yang sama, maklumat dalam sumber sentiasa terkini, dan apa yang dipadamkan adalah sampah. Contoh untuk menyelesaikan masalah saya:
rsync -auvv --delete-semasa foobar_src/ foobar_dst/
Ini akan mengemas kini penerima saya, jika ia telah diisi dengan sesuatu - ia akan membersihkan apa yang tidak ada dalam sumber, tetapi tidak akan menjejaskan fail yang lebih baru, memaparkan statistik dan status untuk setiap fail.

Kerja jauh
Di samping itu, keupayaannya untuk bekerja melalui ssh akan sangat berguna. Ini memastikan penyulitan saluran, yang sangat penting jika anda menyegerakkan dua pelayan di Internet. Untuk mengurangkan trafik, rsync juga boleh memampatkan data apabila dihantar melalui rangkaian.
Pilihan berikut diperlukan:
-e - tetapkan shell jauh untuk digunakan;
-z - memampatkan data yang dihantar, atau set:
-compress-level=9 - mampatan dengan menetapkan tahap mampatan.

Contoh penyalinan dari hos jauh melalui ssh:
rsync -avv --delete-semasa -compress-level=9 -e "ssh -p remote_ssh_port" pengguna@host:/dir/to/foobar_src foobar_dst/
Dalam kes ini, di bahagian sumber anda perlu memasang utiliti rsync.

Saya harap maklumat ini berguna kepada ramai. Anda boleh mendapatkan lebih banyak maklumat tentang utiliti rsync dalam dokumentasinya, mujurlah ia diterangkan dengan baik.
Di sana anda juga boleh mendapatkan maklumat tentang cara menaikkan daemon rSync untuk sambungan terus tanpa menggunakan shell ssh jauh, serta penerangan tentang banyak pilihan lain untuk setiap rasa dan warna.

Tag: rsync, penyalinan, sandaran fail, penyegerakan fail

rsync menggunakan konvensyen penamaan parameter panjang GNU. Banyak pilihan baris arahan mempunyai dua pilihan: satu pendek dan satu lagi panjang. Ini ditunjukkan di bawah dengan memisahkan dua pilihan dengan koma. Sesetengah pilihan hanya mempunyai pilihan yang panjang. Tanda "=" untuk parameter dengan nilai tambahan adalah pilihan dan boleh digantikan dengan ruang.

    H, --help Mencetak petunjuk ringkas yang menerangkan pilihan rsync yang tersedia

    Versi Mencetak nombor versi rsync dan keluar

    V, --verbose Pilihan ini meningkatkan jumlah verbositi yang dicetak semasa pemindahan. Secara lalai, rsync berfungsi secara senyap. One -v akan mempunyai kesan memaparkan senarai fail yang dipindahkan dan ringkasan ringkas pada penghujungnya. Two -vs mendedahkan butiran tentang fail yang hilang dan memberikan sedikit lagi maklumat pada penghujungnya. Bilangan yang lebih besar mungkin hanya diperlukan apabila menyahpepijat rsync.

    Q, --quiet Mengurangkan jumlah butiran penghantaran, terutamanya mesej daripada pelayan jauh. Pilihan ini berguna apabila dipanggil dari cron.

    I, --ignore-times Biasanya rsync akan melangkau fail yang saiz dan masa pengubahsuaiannya adalah sama. Tetapan ini melumpuhkan gelagat "semak pantas" ini.

    Saiz sahaja Biasanya rsync melangkau fail yang saiz dan masa pengubahsuaiannya adalah sama. Dengan --size-only , fail akan dilangkau jika saiznya sama, tanpa mengira masa pengubahsuaian. Ini berguna apabila menggunakan rsync serta-merta selepas menjalankan sistem pencerminan lain yang tidak menyimpan masa yang tepat.

    modify-window Apabila membandingkan dua cap masa, rsync menganggap cap masa sama jika ia menyimpang dalam nilai modify_window. Biasanya nilai ini ialah sifar, tetapi anda mungkin mendapati ia berguna untuk menetapkannya kepada nilai yang lebih tinggi dalam beberapa kes. Dalam amalan, apabila memindahkan ke sistem fail Windows FAT yang tidak dapat mewakili masa hingga ke detik, --modify_window=1 agak berguna.

    C, --checksum Memaksa bahagian penghantar untuk mengira jumlah semak semua fail menggunakan algoritma MD4 128-bit sebelum penghantaran. Checksum kemudiannya disahkan di bahagian penerima untuk membenarkan penghantaran fail sedia ada dengan saiz dan jumlah semak yang sama melaluinya. Tetapan ini mungkin menyebabkan sedikit kelembapan.

Walau bagaimanapun, ambil perhatian bahawa -a tidak mengekalkan pautan keras kerana mencari fail berbilang pautan adalah mahal. Anda perlu menentukan -H secara berasingan.

    R, --relative Gunakan laluan relatif. Ini bermakna bahawa laluan penuh yang ditentukan pada baris arahan dihantar, bukannya bahagian terakhir nama fail. Dalam amalan, ini berguna apabila anda perlu menghantar beberapa direktori berbeza sekaligus. Sebagai contoh, jika anda menentukan arahan:

rsync foo/bar/foo.c remote:/tmp/

maka ia akan mencipta fail foo.c dalam /tmp pada mesin jauh. Jika sebaliknya anda nyatakan

Rsync -R foo/bar/foo.c jauh:/tmp/

maka fail akan dibuat dalam /tmp/foo/bar/foo.c pada mesin jauh - laluan penuh akan disimpan.

Melumpuhkan pilihan --relative. Ini hanya diperlukan jika anda ingin menggunakan pilihan --files-from tanpa tingkah laku tersiratnya dengan pilihan --relative didayakan.

    Dir tanpa tersirat

Apabila digabungkan dengan --relative, semua direktori yang terjejas dalam setiap laluan tidak disalin secara eksplisit sebagai sebahagian daripada proses pemindahan. Ini menjadikan pemindahan lebih optimum dan juga membolehkan anda tidak berganding (lihat contoh di bawah) pautan simbolik dalam laluan yang tersirat oleh pemindahan. Sebagai contoh, jika fail "/path/foo/file" diluluskan dengan pilihan -R, maka secara lalai rsync akan memastikan bahawa "/path" dan "/path/foo" betul-betul sepadan dengan direktori/pautan pada bahagian penerima. . Pilihan --no-implied-dirs membolehkan anda mengabaikan ketidakpadanan apabila "/path" ialah direktori sebenar di satu pihak dan pautan simbolik di sebelah yang lain. rsync tidak cuba mengubah apa-apa dengan parameter ini dalam kes ini.

    B, --backup Dengan pilihan ini, fail sedia ada pada bahagian penerima dinamakan semula sebaik sahaja fail yang sepadan dipindahkan atau dipadamkan. Anda boleh mengawal tempat fail dipindahkan dan apa akhiran (jika perlu) ditambahkan pada nama menggunakan pilihan --backup-dir dan --suffix.

    Backup-dir=DIR Dalam kombinasi dengan --backup menentukan direktori tempat menyimpan sandaran. Ini agak berguna untuk sandaran tambahan. Anda boleh menentukan akhiran secara pilihan menggunakan --suffix (jika tidak, fail sandaran akan mengekalkan nama asalnya).

    Akhiran=AKHIR Pilihan ini membolehkan anda menentukan akhiran selain akhiran lalai untuk sandaran fail apabila --backup (-b) ditetapkan. Secara lalai, akhiran ini ditetapkan kepada ~ tanpa tetapan --backup-dir, yang menetapkan semula akhiran ini kepada rentetan kosong.

    U, --update Menentukan untuk melangkau mana-mana fail yang telah wujud pada bahagian penerima dengan tarikh yang lebih lewat daripada fail sumber.

    L, --copy-links Jika pautan simbolik ditemui, fail yang ditunjukkannya akan disalin ke hujung penerima, bukannya pautan simbolik yang sama.

    Copy-unsafe-links Menyalin semua objek di luar pepohon direktori asal yang dirujuk oleh pautan simbolik. Pautan simbolik mutlak, dan juga, jika --relative ditetapkan, sebarang pautan simbolik dalam pepohon direktori sumber, dianggap sebagai fail biasa.

    Pautan selamat Menentukan untuk mengabaikan sebarang pautan simbolik yang merujuk kepada objek di luar pepohon direktori sasaran. Semua rujukan mutlak juga dilangkau. Menggunakan pilihan ini dalam kombinasi dengan --relative mungkin menghasilkan hasil yang tidak dijangka.

    H, --hard-links Menentukan untuk mencipta semula pautan keras pada bahagian destinasi mengikut apa yang terdapat pada sumber. Tanpa pilihan ini, pautan keras dianggap seperti fail biasa.

Ambil perhatian bahawa rsync hanya boleh mengesan pautan keras jika kedua-dua bahagian pautan berada dalam senarai fail yang akan dipindahkan. Pemindahan boleh menjadi agak perlahan dengan tetapan ini, jadi gunakannya apabila perlu sahaja.

    W, --whole-file Pilihan ini melumpuhkan algoritma pembezaan rsync dan dengannya keseluruhan fail dipindahkan seperti sedia ada, secara keseluruhannya. Pemindahan mungkin lebih pantas dengan pilihan ini jika lebar jalur antara mesin sumber dan destinasi lebih luas daripada akses cakera lebar jalur (terutamanya jika "pemacu" sebenarnya adalah sistem fail rangkaian.) Pilihan ini didayakan secara lalai jika kedua-dua sumber dan destinasi adalah setempat.

    No-whole-file Menyahdayakan pilihan --whole-file jika ia didayakan secara lalai.

    P, --perms Menyalin semua hak ke bahagian penerima sama seperti yang asal.

Tanpa menyatakan parameter ini, setiap fail baharu menerima kebenaran yang sama seperti yang asal, dengan mengambil kira umask yang berkuat kuasa pada bahagian penerima, manakala semua yang lain (termasuk yang sedang dikemas kini) mengekalkan kebenaran sedia ada mereka (ini adalah tingkah laku yang sama dengan yang lain. utiliti menyalin mempunyai fail seperti cp).

    O, --owner Menyalin atribut pemilik ke bahagian penerima sama seperti yang asal. Pada kebanyakan sistem, hanya pengguna super mempunyai hak untuk menetapkan pemilik fail. Perlu diingat bahawa jika daemon jauh beroperasi dalam persekitaran yang dikroot, pilihan --numeric-ids tersirat kerana bahagian jauh tidak mempunyai akses kepada nama pengguna dalam /etc/passwd.

    G, --group Menyalin atribut kumpulan ke bahagian penerima sama seperti yang asal. Jika bahagian terpencil tidak berfungsi sebagai pengguna super, maka hanya nilai kumpulan di mana pengguna sebelah penerima adalah ahli disimpan (nama kumpulan adalah yang penting, bukan idnya).

    D, --devices Menentukan untuk menghantar maklumat tentang watak dan menyekat peranti untuk menciptanya semula pada bahagian penerima. Hanya tersedia untuk pengguna super.

    T, --times Menentukan untuk menghantar masa pengubahsuaian fail dan mengemas kini atribut yang sepadan pada bahagian penerima dengannya. Ambil perhatian bahawa jika parameter ini tidak ditetapkan, maka pengoptimuman pemindahan untuk mengecualikan fail yang tidak berubah dari semasa ke semasa menjadi tidak berkesan; dalam erti kata lain, meninggalkan -t atau -a akan bermakna pemindahan seterusnya akan dijalankan dengan pilihan -I, jumlah semak akan dibandingkan untuk semua fail, dan mesej yang sepadan tentangnya akan muncul dalam log, walaupun ia belum berubah.

    N, --dry-run Menentukan untuk tidak melakukan sebarang pemindahan, tetapi hanya untuk melaporkan tindakan yang mungkin berlaku.

    S, --sparse Cuba kendalikan pemecahan fail dengan lebih cekap untuk menjimatkan ruang pada bahagian penerima.

NOTA: Jangan gunakan pilihan ini jika destinasi mempunyai sistem fail Solaris "tmpfs". Tidak mungkin untuk mengurus carian dengan betul di antara "lubang" (kawasan null), yang berakhir dengan rasuah fail.

    Sedia Ada Menentukan untuk tidak membuat sebarang fail baharu - hanya mengemas kini fail yang telah wujud pada bahagian penerima.

    Abaikan sedia ada Menentukan untuk tidak mengemas kini fail yang telah wujud pada bahagian penerima.

    Max-delete=NUM Jangan padam lebih daripada NUM fail dan direktori. Ini berguna apabila mencerminkan pepohon direktori yang sangat besar untuk mengelakkan masalah.

    Padam Padamkan mana-mana fail di bahagian penerima yang tidak berada di bahagian penghantaran. Fail yang dikecualikan daripada pemindahan juga dikecualikan daripada proses pemadaman melainkan --delete-excluded ditentukan.

Tetapan ini tidak mempunyai kesan melainkan penyalinan direktori rekursif didayakan. Pilihan ini boleh berbahaya jika digunakan secara tidak betul! Peraturan yang sangat baik ialah menggunakan rsync (-n) melahu dahulu untuk melihat fail yang mungkin dipadamkan dan jika mana-mana daripadanya adalah penting. Jika sebarang ralat I/O berlaku pada bahagian penghantaran, pemadaman mana-mana fail pada bahagian penerima akan dilumpuhkan secara automatik. Ini menghalang pemadaman fail besar-besaran pada bahagian penerima disebabkan oleh ralat sistem fail sementara (cth NFS) pada hujung penghantaran. Tingkah laku ini boleh dilumpuhkan dengan pilihan --ignore-errors.

    Delete-excluded Selain daripada fail yang dipadamkan pada bahagian penerima kerana ia tidak terdapat pada bahagian penghantaran, menyatakan bahawa sebarang fail yang dikecualikan oleh pilihan --exclude pada bahagian penerima juga harus dipadamkan. Pilihan --delete diandaikan.

    Padam-selepas Secara lalai, rsync memadamkan fail dahulu sebelum menyalin untuk memastikan terdapat ruang kosong yang mencukupi pada bahagian penerima. Jika anda mahu pemadaman dilakukan selepas, kemudian gunakan --delete-after. Pilihan --delete diandaikan.

    Ignore-errors Apabila memadam (--delete), memaksa proses dan mengabaikan sebarang ralat, malah ralat I/O.

    Paksa Alih keluar direktori apabila menggantikannya dengan bukan direktori, walaupun ia tidak kosong. Sesuai sahaja tanpa

    Padam, kerana pemadaman berlaku hanya untuk direktori pada tahap yang sama. Memerlukan --rekursif (yang tersirat jika -a) untuk kesan yang bermakna.

    B, --block-size=BLOCKSIZE Melaraskan saiz blok yang digunakan oleh algoritma rsync. Lihat helaian data untuk butiran.

    E, --rsh=COMMAND Membolehkan anda memilih program cangkerang jauh alternatif untuk mengendalikan sambungan antara salinan jauh dan tempatan rsync. Biasanya rsync dikonfigurasikan untuk menggunakan ssh secara lalai, tetapi anda mungkin lebih suka menggunakan rsh pada rangkaian tempatan anda.

Jika parameter ini digunakan dengan laluan hos borang::modul/path, maka program shell jauh COMMAND akan digunakan untuk memulakan pelayan rsync di bahagian jauh, dan semua data akan dipindahkan melalui sambungan shell jauh, sebaliknya daripada terus melalui sambungan ke pelayan rsync di hujung "itu". Lihat bahagian "MENYAMBUNG KE PELAYANAN RSYNC MELALUI SHELL JAUH". Argumen baris perintah kepada COMMAND dibenarkan untuk dinyatakan dalam bentuk yang mendedahkan COMMAND kepada rsync sebagai argumen tunggal. Sebagai contoh:

    E "ssh -p 2234" (Perhatikan bahawa pengguna ssh boleh mengkonfigurasi pilihan sambungan khusus persekitaran dalam fail .ssh/config mereka.)

Anda juga boleh memilih program shell jauh melalui pembolehubah persekitaran RSYNC_RSH, yang mengambil julat nilai yang sama seperti -e. Lihat juga --blocking-io, yang dipengaruhi oleh menetapkan pilihan -e.

    C, --cvs-exclude Dengan pilihan ini anda mengecualikan pelbagai jenis fail yang anda tidak mahu pindahkan antara sistem. Ini menggunakan algoritma yang sama yang digunakan oleh CVS untuk menentukan fail yang hendak diabaikan.

Senarai pengecualian pada mulanya termasuk:

RCS/ SCCS/ CVS/ .svn/ CVS.adm RCSLOG cvslog.* tag TAGS .make.state .nse_depinfo *~ #* .#* ,* *.old *.bak *.BAK *.orig *.rej .del -* *.a *.o *.obj *.so *.Z *.elc *.ln teras kemudian fail yang disenaraikan dalam $HOME/.cvsignore ditambahkan pada senarai awal, serta mana-mana yang disenaraikan dalam persekitaran CVSIGNORE pembolehubah (dipisahkan oleh ruang). Akhir sekali, sebarang fail dilangkau jika terdapat fail .cvsignore dalam direktori yang sama yang mempunyai templat yang sepadan dengan fail. Lihat manual cvs(1) untuk maklumat lanjut. * --exclude=PATTERN Membolehkan anda mengecualikan fail tertentu secara terpilih daripada proses pemindahan. Ini paling berguna apabila lulus secara rekursif.

Anda boleh menggunakan seberapa banyak --excludes yang anda suka untuk membina senarai tersuai fail untuk dikecualikan. Lihat bahagian "POLA PENGECUALIAN" untuk mendapatkan maklumat tentang sintaks bagi parameter ini.

    Exclude-file=FILE Sama seperti --exclude, tetapi sebaliknya menggunakan corak pengecualian fail yang disenaraikan dalam fail FILE. Baris kosong bersama-sama dengan baris bermula dengan ";" atau "#" diabaikan. Jika FILE dinyatakan sebagai -, maka senarai corak dibaca daripada input standard.

    Include=PATTERN Menentukan corak untuk nama fail tersebut yang tidak boleh dikecualikan daripada proses. Ia berguna kerana ia membolehkan anda membina peraturan kemasukan/pengecualian yang agak kompleks.

Lihat bahagian "POLA PENGECUALIAN" untuk mendapatkan maklumat tentang sintaks bagi parameter ini.

    Include-from=FILE Menentukan untuk mengambil senarai fail yang mesti disertakan dalam pemindahan daripada fail FILE. Jika FILE dinyatakan sebagai -, maka senarai corak dibaca daripada input standard.

    Files-from=FILE Membolehkan anda menentukan senarai fail yang tepat untuk dipindahkan (yang akan dibaca daripada FILE yang ditentukan atau daripada input standard jika - ditentukan). Ini juga mengubah tingkah laku lalai rsync untuk memudahkan pemindahan fail dan direktori tertentu. Sebagai contoh, secara lalai penggunaan pilihan --relative didayakan (untuk melumpuhkan ini, gunakan --no-relative), semua direktori tersenarai dibuat pada bahagian penerima (bukannya dilewatkan secara senyap, seolah-olah -r pilihan tidak digunakan), dan tingkah laku adalah (--archive) tidak membayangkan kehadiran -r (--rekursif) - ia mesti dinyatakan secara eksplisit jika perlu.

Semua nama fail yang dibaca daripada FILE dianggap relatif kepada direktori sumber -- garis miring utama dilucutkan dan rujukan ".." yang menunjuk lebih tinggi ke atas pepohon direktori sumber tidak dibenarkan. Sebagai contoh, pertimbangkan:

    rsync -a --files-from=/tmp/foo /usr remote:/backup

Jika /tmp/foo mengandungi tong rentetan (atau pun "/bin"), direktori /usr/bin akan dibuat sebagai /backup/bin pada mesin jauh (tetapi kandungan /usr/bin tidak boleh dipindahkan melainkan jika objek dinyatakan secara eksplisit dalam /tmp/foo, atau jika pilihan -r ditentukan). Juga ambil perhatian bahawa kesan --relative (didayakan secara lalai) adalah untuk menyalin laluan yang dibaca daripada fail - ia tidak memaksa keseluruhan laluan sumber yang ditentukan (/usr dalam contoh) untuk disalin. Selain itu, --files-from fail boleh dibaca dari mesin jauh dan bukannya secara setempat dengan menyatakan "host:" sebelum nama fail (ini mesti sepadan dengan salah satu hujung pemindahan). Untuk ringkasnya, anda hanya boleh menentukan awalan ":" untuk menunjukkan pihak salinan jauh. Contohnya: rsync -a --files-from=:/path/file-list src:/ /tmp/copy Perintah ini harus menyalin semua fail yang dinyatakan dalam fail /path/file-list, yang terletak pada mesin jauh "src".

    0, --from0 Memberitahu rsync bahawa nama fail dibaca secara luaran berakhir dengan aksara "\0", bukan NL, CR atau CR+LF. Ini terpakai pada pilihan --exclude-from, --include-from, dan --files-from.

    T, --temp-dir=DIR

Mengarahkan untuk menggunakan DIR sebagai direktori untuk salinan sementara fail yang dipindahkan pada bahagian penerima. Secara lalai, fail sementara dicipta dalam direktori destinasi.

    Compare-dest=DIR Mengarahkan DIR untuk digunakan pada mesin destinasi sebagai direktori yang kandungannya dibandingkan semasa proses pemindahan, dengan syarat tiada fail dalam direktori destinasi. Ini berguna untuk melakukan pemindahan ke lokasi baharu, membiarkan fail sedia ada utuh dan kemudian memindahkan dan membersihkan apabila semua fail telah dipindahkan (contohnya, mengalihkan direktori ke lokasi baharu dan memadamkan yang lama, walaupun ini melangkau fail yang tidak diubah suai. ; lihat juga - -link-dest).

Catatan penterjemah: Kewujudan parameter ini adalah disebabkan oleh keperluan untuk mengemas kini, sebagai contoh, pokok dengan fail saling bergantung. Dalam kes ini, tidak digalakkan untuk menyalin berdasarkan fail demi fail. Parameter --compare-dest membolehkan anda menentukan direktori destinasi sementara di mana fail yang dipindahkan disalin. Pada penghujung proses pemindahan, rsync menamakan semula pepohon destinasi asal, kemudian menamakan semula direktori sementara DIR kepada yang asal, dan akhirnya memadamkan direktori asal dengan fail "lama" yang dinamakan semula pada langkah pertama. Pilihan ini meningkatkan kegunaan --partial kerana fail yang dipindahkan separa akan kekal dalam direktori sementara baharu sehingga ia diletakkan sepenuhnya. Jika DIR ditentukan sebagai laluan relatif, maka ia adalah relatif kepada direktori destinasi.

    Link-dest=DIR Berkelakuan sama seperti --compare-dest, tetapi juga mencipta pautan keras dalam DIR ke fail yang tidak diubah suai dalam direktori destinasi. Fail dengan hak dan pemilikan yang diubah tidak terjejas oleh ini. Seperti --compare-dest, jika DIR ditentukan sebagai nama relatif, tindakan adalah relatif kepada direktori destinasi.

    Z, --compress Dengan pilihan ini, rsync memampatkan semua data fail yang dipindahkan. Ini berguna pada garis perlahan. Kaedah mampatan yang digunakan adalah sama seperti yang dilaksanakan oleh gzip.

Ambil perhatian bahawa ini biasanya mencapai nisbah mampatan yang lebih baik daripada yang boleh dicapai menggunakan mampatan program shell jauh atau mampatan lapisan pengangkutan kerana Proses pemampatan melibatkan semua maklumat yang dihantar dalam blok data yang sepadan.

    ID berangka Daripada nama kumpulan dan pengguna, id berangka mereka dihantar dan dipadankan antara satu sama lain di kedua-dua hujungnya.

Secara lalai, rsync menggunakan nama kumpulan dan pengguna untuk menentukan pemilik fail. uid khas 0 dan gid 0 tidak pernah didedahkan melalui nama pengguna/kumpulan, walaupun --numeric-ids tidak dinyatakan. Jika sistem sumber berjalan dalam persekitaran chrooted atau jika pengguna atau kumpulan tidak wujud pada bahagian penerima, maka id angka asal digunakan.

    Timeout=TIMEOUT Membolehkan anda menetapkan masa menunggu I/O maksimum dalam beberapa saat. Jika tiada apa yang dipindahkan dalam tempoh yang ditentukan, maka rsync ditamatkan. Lalai ialah 0, yang bermaksud tidak perlu menunggu.

    Daemon Menjalankan rsync sebagai daemon. Daemon boleh diakses oleh pelanggan melalui sintaks hos::module atau rsync:/\/host/module. Jika input standard ialah soket, maka rsync menganggap ia berjalan dari inetd, jika tidak, ia memutuskan sambungan dari terminal semasa dan menjadi proses daemon latar belakang. Daemon membaca fail konfigurasi (rsyncd.conf) untuk setiap sambungan daripada pelanggan dan membalas permintaan mereka dengan sewajarnya.

    No-detach Apabila dijalankan sebagai daemon, pilihan ini mengarahkan rsync untuk tidak melepaskan diri daripada terminal dan menjadi proses latar belakang. Ia diperlukan semasa menjalankan perkhidmatan di bawah Cygwin, dan juga boleh berguna jika rsync dipantau oleh program seperti daemontools atau Pengawal Sumber Sistem AIX. --no-detach juga disyorkan apabila menjalankan rsync di bawah debugger. Pilihan ini tidak mempunyai no kesan apabila berjalan dari inetd atau sshd.

    Alamat Secara lalai, rsync menggunakan alamat multicast 0.0.0.0 apabila berjalan sebagai daemon dengan --daemon atau apabila menyambung ke pelayan rsync. --address membolehkan anda menentukan alamat IP yang tepat (atau nama hos) untuk ini. Ini membolehkan pengehosan maya digabungkan dengan --config.

    Config=FILE Menentukan fail konfigurasi alternatif. Ini hanya penting jika --daemon ditentukan. Lalai kepada /etc/rsyncd.conf melainkan daemon berjalan di atas shell jauh dan pengguna jauh bukan root. Dalam kes kedua, rsyncd.conf terletak dalam direktori semasa (biasanya $HOME) secara lalai.

    Port=PORT Menentukan nombor port TCP alternatif untuk beroperasi, bukannya 873 lalai.

    Blocking-io Menentukan untuk menggunakan menyekat I/O apabila menjalankan program pengangkutan shell jauh. Jika program itu sama ada rsh atau remsh, maka rsync menggunakan menyekat I/O secara lalai, jika tidak ia menggunakan I/O tidak menyekat secara lalai. (Perhatikan bahawa ssh lebih suka tidak menyekat.)

    No-blocking-io Menyahdayakan tindakan --blocking-io apabila ia didayakan secara lalai.

    Log-format=FORMAT Membolehkan anda menentukan dengan tepat apa yang rsync melaporkan (log) kepada output standard berdasarkan fail demi fail. Format mesej ditentukan oleh konvensyen yang sama seperti untuk pilihan pengelogan dalam fail rsyncd.conf.

    Statistik Menentukan paparan statistik pemindahan fail terperinci, membolehkan anda menilai sejauh mana kecekapan algoritma rsync adalah relatif kepada data anda.

    Separa Secara lalai, rsync akan memadam semua fail yang dipindahkan separa jika pemindahan terganggu. Dalam sesetengah kes adalah lebih wajar untuk menyimpan fail sedemikian. Menggunakan pilihan --partial, anda boleh memberitahu rsync untuk menyimpan fail yang dipindahkan separa, yang boleh mempercepatkan pemindahan keseluruhan fail apabila mengulangi pemindahan tersebut secara berurutan.

    Progress Memberitahu rsync untuk memaparkan maklumat tentang kemajuan pemindahan. Pengguna yang bosan akan mempunyai sesuatu untuk dilihat. Menyiratkan --verbose tanpa meningkatkan verbosity.

    P Bersamaan dengan --separa --kemajuan. Pengarang mendapati dirinya menggunakan gabungan ini dengan kerap, jadi dia memperkenalkan parameter yang berasingan untuk memudahkannya.

    Fail kata laluan Membolehkan anda memberikan kata laluan untuk mengakses pelayan rsync dengan menyimpannya ke fail. Ambil perhatian bahawa pilihan ini hanya berguna apabila menggunakan pengangkutan rsync terbina dalam untuk mengakses pelayan rsync; ia tidak berguna apabila menggunakan program shell jauh. Fail itu tidak semestinya boleh dibaca oleh semua orang. Ia sepatutnya mengandungi kata laluan sahaja, dalam satu baris.

    Bwlimit=KBPS Membolehkan anda menentukan kelajuan pemindahan maksimum, kilobait sesaat. Pilihan ini paling berkesan apabila menggunakan rsync untuk memindahkan fail besar (beberapa megabait atau lebih besar). Disebabkan oleh sifat pemindahan rsync, blok data biasa dihantar, maka jika rsync menentukan bahawa kelajuan lebih tinggi daripada kadar yang ditetapkan, ia memperkenalkan kelewatan sebelum menghantar blok seterusnya. Akibatnya, kadar pemindahan purata adalah sama dengan had yang ditentukan. Nilai sifar bermakna tiada sekatan.

    Write-batch=PREFIX Menghasilkan set fail yang boleh dipindahkan dalam kemas kini kelompok. Setiap nama fail dalam set bermula dengan PREFIX. Lihat bahagian MOD BATCH untuk butiran.

    Read-batch=PREFIX Menggunakan kumpulan perubahan yang dijana sebelum ini, menggunakan set fail yang namanya bermula dengan PREFIX. Lihat bahagian MOD BATCH untuk butiran.

pilihan rsync

    C - perbandingan mandatori jumlah semak imej pada permulaan kerja. Jika fail sumber dan destinasi mempunyai saiz yang sama dan masa pengubahsuaian terakhir, tetapi berbeza, pilihan ini memaksa mereka untuk menyegerak.

    V - output maklumat terperinci tentang apa yang berlaku. Boleh dinyatakan beberapa kali. Membolehkan anda berseronok melihat sekumpulan maklumat dalaman tentang pemindahan data semasa proses kemas kini.

    Inplace - imej dikemas kini tanpa membuat fail sementara. Berguna jika tidak ada ruang yang mencukupi, dan juga sekiranya sambungan tidak stabil: --inplace membolehkan anda terus mengemas kini imej dari titik di mana kemas kini berhenti kerana sambungan terputus. Menggunakan pilihan ini sedikit mengurangkan kecekapan algoritma untuk mengira perbezaan antara fail.

    H, --boleh dibaca manusia - tunjukkan saiz data yang dihantar/diproses dalam bentuk yang mudah (bukan bait), contohnya 234K atau 1.35G

    Z, --compress - membolehkan pemampatan data yang dihantar.

    Kemajuan - tunjukkan petunjuk proses pemprosesan fail.

    Separa - jangan padam fail tempatan sebelum menyegerakkan

    P - sama seperti --separa bersama-sama dengan --kemajuan

    Statistik - memaparkan statistik - menunjukkan jumlah yang diterima/dihantarkan, jumlah yang disimpan, dsb.

Rsync ialah alat berkuasa yang memudahkan untuk memindahkan dan menyegerakkan data antara sistem tempatan dan jauh. Dalam artikel ini kita akan bercakap tentang Contoh penyegerakan Rsync, menyalin fail, penggunaan asas dan arahan.

Contoh penyegerakan Rsync: penggunaan asas

Mari buat dua direktori di dalam /tmp dipanggil "foo" dan "bar" dan buat sejumlah besar fail dummy di dalam /tmp/foo

mkdir /tmp/foo /tmp/bar
untuk i dalam `seq 1 100`;do touch /tmp/foo/file$i;done

Kami kini mempunyai 100 fail dalam /tmp/foo; /tmp/bar tidak sepatutnya wujud. Kita boleh menggunakan rsync untuk menyalin semua fail dari /tmp/foo ke /tmp/bar:

rsync /tmp/foo/* /tmp/bar

Menggunakan sambungan fail asas, kami boleh mengambil semua fail dan menyalinnya ke direktori lain. Bagaimana jika terdapat direktori di dalam /tmp/foo? Ia tidak akan dipindahkan. Kita perlu menggunakan bendera -r (-rekursif) untuk melintasi direktori, menghantar setiap fail ke dalam:

rsync -r /tmp/foo/ /tmp/bar

Ini adalah contoh yang sangat mudah dan tidak menyentuh kuasa sebenar perintah rsync. Terdapat bendera untuk menyimpan kebenaran, pemilik, kumpulan, pautan sym, dsb. Oleh kerana bendera ini digunakan begitu kerap, bendera -a (-archive) bertindak sebagai alias untuk mendayakan kesemuanya, termasuk -r.

Kosongkan /tmp/bar, buat symlink ke satu fail dalam /tmp/foo, dan gunakan rsync untuk menyalin semua fail secara rekursif:

cari /tmp/bar -delete
ln -s /tmp/foo/file100 /tmp/foo/file101
rsync -r /tmp/foo/ /tmp/bar

Kami melihat bahawa rsync telah menggugurkan pautan sym yang kami buat. Kosongkan /tmp/bar sekali lagi, dan mari cuba lagi, kali ini menggunakan bendera -a:

cari /tmp/bar -delete
rsync -a /tmp/foo/ /tmp/bar

Gunakan chown untuk menukar pemilikan fail dalam /tmp/foo kepada pengguna lain dan salin fail menggunakan -a ke /tmp/bar. Jalankan ls -l dan perhatikan bahawa pemilikan telah berpindah bersama-sama dengan fail. Material yang selesa!

CATATAN. Terdapat perbezaan antara menyertakan garis miring ke hadapan (/) pada penghujung laluan sumber dan tidak memasukkannya; Yang pertama akan memindahkan semua fail DI DALAM direktori yang ditentukan, manakala yang kedua akan memindahkan direktori itu sendiri dengan semua fail di dalamnya.

Bendera -a

Seperti yang kita katakan sebelum ini, dalam artikel ini kita akan melihat contoh dan arahan penyegerakan Rsync. Tetapi untuk melaksanakannya, anda perlu mengetahui asas untuk menetapkan bendera.
Kami menyebut sebelum ini bahawa bendera -a (-archive) ialah alias untuk set bendera -rltpgoD yang lain. Patah, setiap bendera melakukan perkara berikut:

R- Rekursif

L- Alihkan mana-mana symlink yang dikesan

T— Simpan cap masa

P- Simpan kebenaran

G— Simpan kumpulan

O- Mengekalkan pemilikan

D— Menyimpan blok dan peranti aksara

Anda mungkin mahu menambah arahan berikut pada arahan anda untuk menjadikan fail lebih mudah dibaca:

H- Format fail yang mudah dibaca

Semua orang suka ulasan

Bendera -v (–verbose) akan memberi anda lebih banyak maklumat tentang keadaan pemindahan, termasuk ringkasan pada penghujung yang akan kelihatan seperti ini:

$ rsync -av foo/ bar
membina senarai fail ... selesai
menghantar 1040 bait menerima 20 bait 2120.00 bait/saat
jumlah saiz ialah 7 speedup ialah 0.01

Jika anda ingin mendapatkan lebih banyak statistik, jalankan rsync dengan bendera -stats. Ini akan memberi anda senarai terperinci tentang jumlah fail, fail yang dipindahkan, penanda aras dan juga purata kelajuan pemindahan. Sebaliknya, -q (-quiet) akan menyekat semua output yang mungkin digunakan untuk skrip apabila maklum balas tidak diperlukan.

Pemindahan jauh menjadi mudah

Kuasa sebenar rsync terletak pada keupayaannya untuk melakukan bukan sahaja pemindahan tempatan, tetapi juga pemindahan jauh. Jika anda pernah menggunakan scp sebelum ini, sintaks untuk pemindahan jauh adalah sangat serupa:

rsync@:

Sebagai contoh, rsync menggunakan sintaks ini akan kelihatan seperti ini:

rsync -avh /tmp/foo/ root@host2:/tmp/bar

Nota: (kolon) antara pelayan jauh dan laluan jauh; Ia perlu.

Lebih banyak pilihan

Rsync datang dengan senarai besar pilihan yang tersedia, terlalu banyak untuk masuk ke dalam satu artikel. Bendera terakhir yang akan kita lihat ialah bendera -exclude, -exclude-from, -update dan -delete.

Kecualikan fail berdasarkan corak. Rsync belum menyokong regex lagi, jadi hanya padanan fail standard dan kerja glob berfungsi

Kecualikan fail yang disenaraikan dalam fail yang dibatasi baris.

Kemas kini fail di destinasi SAHAJA jika salinan asal telah diubah suai baru-baru ini

Padam fail dalam destinasi SAHAJA jika salinan asal tidak lagi wujud.

Port SSH Alternatif

Jika anda menukar port SSH pada pelayan anda, anda perlu memberitahu rsync untuk menggunakan nombor port baharu.

Contoh dengan port SSH biasa:
rsync -azh /local/path/file [e-mel dilindungi]:/remote/path/file

Contoh dengan port SSH alternatif (22334):
rsync -azh /local/path/file -e 'ssh -p 22334' [e-mel dilindungi]:/remote/path/file

Pemindahan jauh tanpa kata laluan

Kekunci SSH boleh digunakan untuk memudahkan pemindahan dari jauh-ke-tempatan atau tempatan-ke-jauh. Dengan kekunci SSH yang dikonfigurasikan pada kedua-dua pelayan jauh dan tempatan, penyegerakan boleh dicapai dengan mudah dan tanpa campur tangan manusia (tanpa perlu memasukkan kata laluan setiap kali). Dalam artikel lain, kami akan membincangkan cara menyediakan kunci SSH.

Jika anda mempunyai sebarang soalan mengenai topik "Contoh penyegerakan Rsync", tuliskannya dalam ulasan. Pastikan anda menunjukkan versi sistem pengendalian yang anda gunakan supaya kami boleh membantu dengan soalan anda.

Jika anda mendapati ralat, sila serlahkan sekeping teks dan klik Ctrl+Enter.