
Jika anda mengurus pelayan Linux atau hanya mempunyai komputer dengan data yang anda tidak mampu hilang, belajar menggunakannya rsync untuk mengautomasikan sandaran Ia boleh dikatakan wajib. Tidak perlu menyediakan suit yang mahal atau bergantung pada alat proprietari: dengan beberapa arahan yang difikirkan dengan teliti, anda boleh mempunyai sistem sandaran yang kukuh, cekap dan mudah diselenggara.
Sepanjang panduan ini anda akan lihat Daripada asas rsync kepada penyuntingan lanjutanSandaran setempat, sandaran jauh melalui SSH, sandaran gaya Time Machine dengan snapshot, skrip sedia pengeluaran, cron, pemasa sistem, pengecualian, putaran dan pengesahan. Lihat kami Perbandingan kaedah sandaran untuk memutuskan strategi. Ideanya ialah anda menghabiskan artikel dengan pelan dan arahan yang jelas yang boleh anda salin dan sesuaikan dengan persekitaran anda.
Apakah rsync dan mengapa ia digunakan begitu banyak untuk sandaran?
Rsync ialah alat baris arahan yang direka untuk menyegerakkan fail dan direktori antara dua lokasi, sama ada pada komputer yang sama atau antara mesin yang berbeza, biasanya melalui SSH atau dengan daemon rsyncdnya sendiri.
Kelebihan rsync berbanding cp atau scp yang mudah ialah ia melaksanakan algoritma pintar pemindahan blok pembezaanIa membandingkan sumber dan destinasi dan hanya menghantar perubahan, bukan keseluruhan fail setiap kali. Jika anda mempunyai banyak data dan hanya mengubah suai bahagian kecil, penjimatan masa dan lebar jalur adalah sangat besar.
Selain itu, rsync boleh memelihara hampir semua metadatakebenaran, pemilik, kumpulan, cap waktu, pautan simbolik, peranti… Itulah sebabnya ia sangat berguna untuk sandaran "serius", yang bukan sahaja kandungannya penting, tetapi juga cara sistem fail disediakan.
Satu lagi kelebihan penting ialah rsync berfungsi baik di peringkat tempatan mahupun jarak jauhAnda boleh menggunakannya untuk menyegerakkan dua folder pada pelayan yang sama, untuk menarik data dari pelayan jauh ke mesin sandaran anda atau untuk menghantar data ke NAS atau VPS jauh menggunakan SSH.

Pasang dan uji rsync pada pengedaran yang berbeza
Walaupun banyak pengedaran sudah dilengkapi dengan rsync yang dipasang, ia adalah idea yang baik Sahkan pemasangan dan kemas kini kepada versi terkini. pada mesin sumber dan destinasi sebelum memasang sandaran automatik anda.
Pada sistem berasaskan Debian atau Ubuntu, anda boleh melakukan sesuatu semudah:
rsync --version
sudo apt update
sudo apt install rsync
Dalam pengedaran seperti RHEL, CentOS, Rocky Linux atau derivatif lain, prosedurnya akan sangat serupa, menukar pengurus pakej tetapi dengan idea yang sama iaitu pastikan rsync tersedia dan terkini dalam kedua-dua ekstrem.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Pilihan rsync asas yang akan anda gunakan sepanjang masa
Walaupun rsync mempunyai banyak parameter, dalam praktiknya untuk sandaran anda akan menghabiskan 90% masa anda menggunakan... satu set pilihan yang kecil yang perlu dihafal.
Struktur keseluruhan arahan agak mudah, tetapi terdapat satu perincian yang menambah banyak kemungkinan: garis miring di laluan mengubah tingkah laku.
Sintaks generik:
rsync ORIGEN DESTINO
Perbezaan utama terletak pada cara anda mengendalikan direktori sumber:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Salin HANYA kandungan direktori ke destinasi
rsync -av /source/dir/ /backup/
Antara pilihan sandaran yang paling biasa digunakan adalah sangat praktikal kerana Mereka menggabungkan pelbagai perkara dalam satu teks pendek.:
- -a: mod fail. Setaraf dengan -rlptgoD (rekursif, mengekalkan pautan simbolik, kebenaran, cap waktu, kumpulan, pemilik dan fail khas).
- -v: Mod "Verbose". Menunjukkan apa yang sedang dilakukannya dan fail yang sedang diaksesnya.
- -z: memampatkan data semasa pemindahan, sesuai untuk salinan jauh melalui Internet.
- -h: menjadikan saiz kelihatan "cantik" (MB, GB…), sesuai untuk manusia.
- -P: menggabungkan fail kemajuan dan separa, untuk melihat keadaan dan dapat disambung semula.
- –Hapuskan: memadam fail yang tidak lagi wujud di sumber di destinasi, meninggalkan replika yang tepat.
- -n / –larian kering: mensimulasikan pelaksanaan tanpa menyentuh apa-apa, hebat kerana tidak merosakkan keadaan.
- –kecualikan / –kecualikan-daripada: membolehkan anda mengecualikan corak atau senarai lengkap laluan yang anda tidak mahu salin.
- –pautan-dest: mencipta pautan keras dengan salinan sebelumnya, asas sandaran tambahan jenis Time Machine.
Salinan tempatan manual dan contoh pertama
Langkah pertama sebelum mengautomasikan apa-apa sahaja adalah dengan mempunyai arahan salinan manual yang jelas dan terbuktiMari kita tinjau kes-kes biasa yang akan kita gunakan kemudian dalam skrip.
Jika anda ingin mengklon direktori utama anda kepada cakera sandaran setempatPerintah minimum akan kelihatan seperti ini:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Rsync ini mengimbas anda halaman utama lengkap mengekalkan kebenaran, tarikh dan strukturdan hanya menyalin apa yang hilang atau telah berubah sejak kali terakhir, yang sudah merupakan salinan tambahan yang sangat kemas tanpa merumitkan keadaan.
Satu lagi contoh klasik ialah penyegerakan data projek, foto atau dokumen antara dua folder pada pelayan yang sama atau cakera yang berbeza, untuk memastikan permainan tempatan kedua sentiasa segar.
rsync -av /media/fotos/ /backup/fotos/
Apabila melibatkan data sistem sensitif, seperti /dll atau /var/wwwAdalah perkara biasa untuk menginginkan salinan yang sama persis dengan salinan asal, dengan membuang apa yang hilang dalam salinan asal daripada sandaran. Di situlah pilihan pemadaman yang terkenal memainkan peranan.
rsync -av --delete /var/www/ /backup/www/
Lindungi sandaran jauh dengan SSH
Di mana rsync benar-benar bersinar adalah apabila anda menggabungkannya dengan SSH untuk menghantar salinan dari pelayanDengan cara ini, anda boleh menyimpan data anda pada nod lain dalam rangkaian anda, NAS atau VPS di internet. Dengan cara ini, anda tidak bergantung pada satu peranti sahaja dan anda mematuhi sebahagian daripada peraturan 3-2-1 yang terkenal (sekurang-kurangnya satu salinan di luar tapak).
Sebaik-baiknya, anda harus mengkonfigurasi pengesahan kunci awam dan bukannya memasukkan kata laluan secara manual sepanjang masa. Sebaik sahaja kunci disalin ke pelayan sandaran, arahan menjadi sangat intuitif.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Membawa data dari pelayan jauh ke mesin sandaran anda
rsync -avz backup@remote-server:/var/www/ /backups/www/
Dalam senario yang lebih halus, anda boleh melaraskan Penyulitan, port atau pemampatan SSH daripada rsync itu sendiri dengan -e, contohnya jika pelayan anda mendengar pada port yang berbeza atau anda ingin mengoptimumkan pautan yang perlahan.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Satu helah berguna apabila terdapat sambungan yang lemah atau rangkaian yang dikongsi adalah dengan menggunakan –bwlimit untuk mengelakkan beban pautan yang berlebihan dan jangan biarkan sesiapa pun tanpa internet semasa anda melancarkan sandaran besar-besaran.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Sandaran penuh, pembezaan dan tambahan dengan rsync
Walaupun rsync sudah melakukan pemindahan pembezaan pada peringkat blok, dari perspektif strategi sandaran, ia patut dipertimbangkan tiga jenis salinan: penuh, berbeza dan tambahanyang boleh anda laksanakan secara langsung dengan pilihan rsync.
Salinan yang lengkap adalah mudah: ia mencipta semula semua kandungan sumber di destinasi, sesuai sebagai sandaran awal atau untuk mempunyai rujukan yang bersih.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Penyalinan berbeza dibina di atas asas tersebut dan memberi tumpuan kepada memastikan destinasi sejajar dengan sumber, menyalin perubahan dan mengalih keluar apa yang tidak lagi wujud. Itulah yang biasanya anda maksudkan apabila anda bercakap tentang... mempunyai cerminan sistem.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Bahagian yang paling menarik ialah sandaran tambahan "sebenar", di mana selain penyegerakan, Anda menyimpan sejarah mengikut tarikh tanpa menduplikasi dataDi sinilah pilihan –link-dest dimainkan, yang mencipta pautan keras terhadap salinan sebelumnya untuk fail yang tidak berubah.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Dengan pendekatan ini, setiap folder sandaran kelihatan seperti salinan lengkap, tetapi secara dalaman Fail yang serupa berkongsi blok pada cakeraIni dapat mengurangkan ruang yang digunakan dengan ketara dan membolehkan navigasi mudah melalui petikan sejarah.
Sandaran gaya Time Machine dengan snapshot dan pautan keras
Ramai orang ingin meniru kemudahan dalam Linux macOS Time Machine dengan gambarnya mengikut tarikhDengan rsync, ia adalah mungkin dengan menggabungkan --link-dest, sedikit shell dan beberapa organisasi.
Ideanya adalah untuk mengekalkan direktori semasa yang menunjukkan sandaran terakhir yang baik, dan pada masa yang sama mencipta folder dengan cap waktu (tarikh-masa) yang mewakili setiap snapshot. Fail yang tidak diubah dipautkan dengan pautan keras ke snapshot sebelumnya dan blok baharu hanya ditulis apabila terdapat perbezaan sebenar.
Perintah tipikal dalam skema itu mungkin seperti:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Kemudian skrip akan mengemas kini pautan simbolik semasa supaya ia sentiasa menunjukkan snapshot terkinidan untuk mengekalkan sejarah kecil yang disusun mengikut tarikh. Dengan itu, anda boleh menyemak imbas salinan lama hanya dengan memasukkan folder yang anda minati.
Automasi datang secara semula jadi: anda menyimpan skrip dalam sesuatu seperti /usr/local/bin/rsync-time-machine dan jadualkannya untuk dijalankan setiap hari dengan cron pada masa yang paling sesuai untuk anda.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Automatikkan sandaran dengan cron setiap hari
Akan tiba satu tahap di mana membuat salinan dengan tangan tidak lagi masuk akal; perkara biasa yang perlu dilakukan ialah Jadualkan sandaran dengan cron supaya ia berjalan secara automatik semasa waktu luar puncak (awal pagi, contohnya) dan anda boleh melupakannya kecuali untuk menyemak log dari semasa ke semasa.
Prosesnya sentiasa sama: anda menyediakan skrip yang membuat salinan lengkap dengan semua pilihan (pengecualian, log, dll.), anda memberikannya kebenaran pelaksanaan dan anda memasangkannya ke crontab pengguna yang sesuai atau untuk melakukan root jika ia melibatkan sentuhan seluruh sistem.
Satu contoh skrip mudah untuk penyalinan setempat ialah:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(namadir «$LOG_FILE»)»
echo "Sandaran setempat dimulakan" >> "$LOG_FILE"
rsync -av –padam
–kecualikan='*.tmp' \
–kecualikan='.cache' \
–exclude='Muat Turun/*' \
«$SOURCE_DIR/» «$BACKUP_DIR/» >> «$LOG_FILE» 2>&1
jika; maka
echo » Sandaran berjaya diselesaikan» >> «$LOG_FILE»
lagi
echo » Sandaran dengan ralat» >> «$LOG_FILE»
fi
Sebaik sahaja anda mempunyai skrip, sebagai contoh, /usr/local/bin/rsync-local-backup.sh Dan ditanda sebagai boleh laku, anda menambahkannya ke cron supaya ia berjalan pada masa tertentu.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Di dalam crontab anda boleh meletakkan sesuatu seperti:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
pemasa sistem: alternatif moden kepada cron
Dalam sistem moden, ia sering berbaloi Gunakan pemasa sistem dan bukannya cronterutamanya jika anda ingin mengintegrasikan perkhidmatan dengan lebih baik, mengurus kebergantungan rangkaian atau mempunyai log berpusat dalam journalctl.
Ideanya adalah untuk menentukan perkhidmatan yang menjalankan skrip sandaran anda dan pemasa yang menunjukkan bila hendak menjalankannya. Perkhidmatan tersebut boleh jadi seperti:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Jenis=satu pukulan
MulaLaksana=/usr/local/bin/rsync-remote-backup.sh
Pengguna=root
Output Piawai=jurnal
Ralat Piawai=jurnal
Masa TamatSec=7200
WantedBy = multi-user.target
Dan pemasa yang berkaitan akan ditakrifkan seperti berikut, untuk a sandaran harian pada pukul 2 pagi dengan sedikit kerawakan supaya tidak membebankan semuanya sekaligus:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
PadaKalendar=*-*-* 02:00:00
Berterusan = benar
Kelewatan RawakSec=10min
WantedBy=pemasa.sasaran
Dengan itu, apa yang tinggal hanyalah memuatkan semula systemd, mengaktifkan pemasa dan mengesahkan bahawa ia memprogram dengan betul dan Log perkhidmatan menunjukkan bahawa salinan dilancarkan apabila tiba masanya.
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Aturkan sandaran bergilir: harian, mingguan dan bulanan
Jika anda mahukan sesuatu yang lebih terperinci daripada salinan statik tunggal, anda boleh menyediakan struktur sandaran bergilir: harian, mingguan dan bulananmenggunakan pautan keras untuk menjimatkan ruang dan mencari fail lama untuk membersihkan fail lama.
Corak klasik melibatkan direktori semasa yang dikemas kini setiap kali dengan rsync dan kemudian mengklon pokok tersebut dengan pautan keras ke folder harian, mingguan dan bulanan bergantung pada hari tersebut.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$SEMASA» «$HARIAN» «$MINGGUAN» «$BULANAN»
rsync -av –delete –link-dest=»$CURRENT» \
«$SOURCE_DIR/» «$CURRENT/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$SEMASA» «$MINGGUAN/$TARIKH»
&& cp -al «$SEMASA» «$BULANAN/$TARIKH»
cari «$HARI-HARI» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
cari «$MINGGUAN» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
cari «$BULANAN» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Dengan sistem ini anda mempunyai tetingkap sejarah yang agak munasabah tanpa mengisi cakera dengan salinan penuh, dan setiap snapshot kekal boleh dilayari seperti folder biasa.
Jika data anda berubah dengan cepat atau sangat besar, anda boleh melaraskan tempoh pengekalan, frekuensi atau menggabungkannya dengan snapshot LVM atau ZFS untuk memastikan konsistensi pangkalan data atau mesin maya.
Pantau, sahkan dan ketahui sama ada sandaran anda berguna.
Mempunyai tugasan sandaran yang dijalankan setiap hari adalah bagus, tetapi jika tiada sesiapa yang menyemak keputusan Ia tidak akan banyak membantu anda. Adalah penting untuk menyediakan beberapa pemantauan asas untuk mengetahui sama ada dan bila sandaran terakhir dibuat.
Taktik mudah adalah dengan meninggalkan penanda kecil dalam folder destinasi setiap kali sandaran berjaya diselesaikan, contohnya, fail .last-backup-success dengan tarikh tersebut. Kemudian, skrip luaran, atau semakan Nagios/Icinga, boleh memaklumkan anda jika fail tersebut terlalu lama.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Satu lagi tabiat sihat adalah untuk memeriksa Semak log rsync untuk ralat atau kadar pemindahan yang luar biasaSkrip yang mengekstrak statistik seperti "Bilangan fail", "Jumlah saiz", "Peningkatan kelajuan" dan sebagainya memberi anda gambaran ringkas tentang bagaimana keadaan berjalan.
Dan, sudah tentu, apa yang benar-benar membuat perbezaan adalah membiasakannya dari semasa ke semasa. untuk melakukan pemulihan sebenarAmbil fail tertentu, pulihkan versi semalam atau minggu lepas, dan semak sama ada ia dibuka dengan betul. Inilah satu-satunya cara untuk memastikan bahawa, jika semuanya menjadi salah suatu hari nanti, sandaran anda akan berfungsi.
Jika anda menyatukan semua bahagian ini—rsync yang dikonfigurasikan dengan baik, automasi dengan cron atau systemd, putaran yang wajar, pemantauan dan pemulihan ujian—anda akan mendapat sistem sandaran Linux yang mantap, fleksibel dan murah, yang memanfaatkan sepenuhnya manfaat perisian percuma tanpa memaksa anda untuk melepaskan kemudahan atau kebolehpercayaan.
