rsync: Linux-இல் கோப்பு ஒத்திசைவு மற்றும் காப்புப் பிரதிக்கான எடுத்துக்காட்டுகள்
rsync கோப்புகளை உள்ளூரிலும் SSH வழியாகவும் நகலெடுத்து ஒத்திசைக்கிறது; மாற்றங்களை மட்டுமே அனுப்புகிறது. அடிப்படை கட்டளை rsync -avz மூலம்/ user@host:/பாதை/: -a அனுமதிகளையும் நேரத்தையும் பாதுகாக்கிறது, -v கோப்புகளைக் காட்டுகிறது, -z போக்குவரத்தை சுருக்குகிறது; --delete பெறுநரை மூலத்தின் சரியான நகலாக்குகிறது, -n மாற்றங்களைச் செய்யாமல் முடிவை முதலில் சரிபார்க்க உதவுகிறது.
rsync என்பது Linux-இன் நிலையான கோப்பு நகலெடுப்பு மற்றும் ஒத்திசைவு கருவி: உள்ளூரில், வட்டுகளுக்கு இடையே, SSH வழியாக சேவையகங்களுக்கு இடையே. cp மற்றும் scp-இலிருந்து அதன் முக்கிய வேறுபாடு — அது மாறியவற்றை மட்டுமே அனுப்புகிறது, எனவே பெரிய அடைவை மீண்டும் ஒத்திசைக்க சில வினாடிகளே ஆகும். கீழே வழக்கமான பணிகளுக்கான rsync எடுத்துக்காட்டுகள்: திட்டத்தை சேவையகத்துக்கு நகலெடுப்பது, அடைவின் கண்ணாடி, விலக்குதல், ஸ்னாப்ஷாட் காப்புகள், திட்டமிட்ட இயக்கம்.
தொடரியல் மற்றும் தேவையான கொடிகள்
கட்டளையின் பொது வடிவம்:
rsync [விருப்பங்கள்] மூலம்... பெறுநர்
மூலமும் பெறுநரும் உள்ளூர் பாதைகளாகவோ user@host:/பாதை வடிவிலான தொலை பாதைகளாகவோ இருக்கலாம். இரண்டில் ஒன்று கட்டாயம் உள்ளூராக இருக்க வேண்டும்: rsync இரண்டு தொலை கணினிகளுக்கு இடையே நேரடியாக நகலெடுக்காது.
| கொடி | என்ன செய்கிறது |
|---|---|
-a | காப்பக முறை: மீண்டும் மீண்டும், அனுமதிகள், உரிமையாளர், குழு, மாற்ற நேரம் மற்றும் குறியீட்டு இணைப்புகளைப் பாதுகாக்கும் (இது -rlptgoD) |
-v | அனுப்பப்படும் கோப்புகளின் பட்டியலைக் காட்டும் |
-z | பிணையத்தில் அனுப்பும்போது தரவைச் சுருக்கும் |
-h | அளவுகளை எளிதாகப் படிக்கும் வடிவில் (K, M, G) |
-P | --partial --progress-க்குச் சமம்: முன்னேற்றம் மற்றும் குறுக்கிடப்பட்ட கோப்புகளின் தொடர்ச்சி |
-n, --dry-run | சோதனை ஓட்டம்: எதையும் மாற்றாமல் என்ன செய்யப்படும் என்று காட்டும் |
--delete | மூலத்தில் இல்லாத கோப்புகளைப் பெறுநரிலிருந்து நீக்கும் |
--exclude | வடிவத்துக்குப் பொருந்தும் கோப்புகளை நகலெடுக்காது |
-e | தொலை ஷெல்லைக் குறிப்பிடும், எடுத்துக்காட்டாக -e "ssh -p 2222" |
-H, -A, -X | கடின இணைப்புகள், ACL மற்றும் விரிவாக்கப்பட்ட பண்புகளைப் பாதுகாக்கும் (-a-இல் சேராது) |
நடைமுறையில் ஒன்பது சந்தர்ப்பங்களில் பத்தில் உள்ளூரில் rsync -avh, பிணையத்தில் rsync -avzh போதும்.
பாதையின் இறுதியில் slash: முக்கியமான பொறி
தொடக்கநிலையாளர்களின் மிகவும் பொதுவான தவறு மூலத்தின் இறுதியிலுள்ள slash தொடர்பானது. அது எதை நகலெடுப்பது என்பதைத் தீர்மானிக்கிறது — அடைவையா அல்லது அதன் உள்ளடக்கத்தை மட்டுமா.
# project என்ற அடைவை /backup-க்குள் நகலெடு → /backup/project/... உருவாகும்
rsync -av project /backup/
# project-இன் உள்ளடக்கத்தை /backup-க்கு நகலெடு → கோப்புகள் நேரடியாக /backup/-இல் வரும்
rsync -av project/ /backup/
நினைவில் கொள்வது எளிது: மூலத்தின் இறுதி slash என்றால் "இந்த அடைவின் உள்ளடக்கம்". பெறுநருக்கு slash முக்கியமில்லை. சந்தேகம் இருந்தால் -n சேர்த்து rsync எந்தப் பாதைகளை உருவாக்கப் போகிறது என்று பாருங்கள்.
உள்ளூர் நகலெடுப்பு
ஒரு அடைவை வெளிப்புற வட்டுக்கு முன்னேற்றத்துடன் நகலெடுப்பது:
rsync -avhP ~/photos/ /mnt/usb/photos/
அதே கட்டளையை மீண்டும் இயக்கினால் எல்லாவற்றையும் மீண்டும் நகலெடுப்பதில்லை: rsync கோப்புகளின் அளவையும் மாற்ற நேரத்தையும் ஒப்பிட்டு, புதிய மற்றும் மாறிய கோப்புகளை மட்டுமே அனுப்புகிறது. இறுதியில் உண்மையில் எவ்வளவு தரவு சென்றது என்று வெளியீடு காட்டுகிறது:
sending incremental file list
2026/10/IMG_2041.jpg
4.12M 100% 38.40MB/s 0:00:00 (xfr#1, to-chk=0/1534)
sent 4.13M bytes received 9.25K bytes 2.76M bytes/sec
total size is 6.82G speedup is 1,648.21
speedup மதிப்பு முழு நகலுடன் ஒப்பிடும்போது எத்தனை மடங்கு குறைவான தரவு அனுப்பப்பட்டது என்பதைக் காட்டுகிறது.
SSH வழியாக rsync: சேவையகத்துக்கு நகலெடுப்பதும் திரும்ப பெறுவதும்
தொலை பாதைகளுக்கு rsync இயல்பாக SSH-ஐப் பயன்படுத்துகிறது, எனவே தனியாக அமைக்க எதுவும் தேவையில்லை — சாதாரண ssh உள்நுழைவு வேலை செய்தால் போதும். சாவிகளுடன் பயன்படுத்துவது வசதியானது: அப்போது கடவுச்சொல் கேட்கப்படாது, கட்டளையை cron-இலும் வைக்கலாம்.
# தளத்தை சேவையகத்துக்கு பதிவேற்று
rsync -avz ./site/ deploy@203.0.113.10:/var/www/site/
# சேவையகத்திலிருந்து பதிவுகளை என் கணினிக்கு பதிவிறக்கு
rsync -avz deploy@203.0.113.10:/var/log/nginx/ ./nginx-logs/
# நிலையற்ற போர்ட்டிலும் குறிப்பிட்ட சாவியுடனும் SSH
rsync -avz -e "ssh -p 2222 -i ~/.ssh/deploy_key" ./site/ deploy@203.0.113.10:/var/www/site/
rsync இரண்டு கணினிகளிலும் நிறுவப்பட்டிருக்க வேண்டும்: தொலை பக்கத்தில் அது SSH வழியாகத் தொடங்கப்படுகிறது. அங்கே இல்லையென்றால் rsync: command not found பிழை வரும் — தொகுப்பை நிறுவுங்கள் (sudo apt install rsync அல்லது sudo dnf install rsync).
ஹோஸ்ட் ~/.ssh/config-இல் ஒரு புனைபெயரின் கீழ் இருந்தால் rsync அதைப் புரிந்துகொள்ளும்: rsync -avz ./site/ prod:/var/www/site/.
சேவையகத்தில் root உரிமைகள் தேவைப்படும்போது
பெறுநர் கோப்புகள் root-க்குச் சொந்தமாக இருந்து நீங்கள் சாதாரண பயனராக உள்நுழைந்தால், தொலை rsync-ஐ sudo மூலம் இயக்கலாம்:
rsync -avz --rsync-path="sudo rsync" ./conf/ admin@server:/etc/myapp/
இதற்கு சேவையகத்தில் rsync-க்கு sudo கடவுச்சொல் இல்லாமல் வேலை செய்ய வேண்டும் (sudoers விதி), இல்லையென்றால் கட்டளை உள்ளீட்டுக்காகக் காத்திருந்து நின்றுவிடும்.
அடைவின் கண்ணாடி: --delete
இயல்பாக rsync கோப்புகளைச் சேர்த்து புதுப்பிக்கும், ஆனால் எதையும் நீக்காது. பெறுநர் மூலத்தின் சரியான நகலாக வேண்டுமென்றால் --delete தேவை:
rsync -avh --delete ~/projects/ /mnt/backup/projects/
இது சக்திவாய்ந்த, ஆபத்தான கொடி. பாதையில் ஒரு தவறு (எடுத்துக்காட்டாக வெற்று மூலம் அல்லது மறந்த slash) பெறுநரில் உள்ள தரவை நீக்கிவிடும். எனவே ஒரே விதி: --delete உள்ள எந்தக் கட்டளையையும் முதலில் -n-உடன் இயக்குங்கள்.
$ rsync -avhn --delete ~/projects/ /mnt/backup/projects/
sending incremental file list
deleting old-app/README.md
deleting old-app/
app/main.py
sent 1.20K bytes received 64 bytes 2.53K bytes/sec
total size is 18.4M speedup is 14,554.39 (DRY RUN)
deleting வரிகள் எவை நீக்கப்படும் என்று காட்டுகின்றன. எல்லாம் சரியென்று உறுதியானால் -n இல்லாமல் இயக்குங்கள்.
பயனுள்ள மாறுபாடுகள்: --delete-after அனுப்பிய பிறகு கோப்புகளை நீக்கும் (பெறுநர் நீண்ட நேரம் முழுமையாக இருக்கும்); --backup --backup-dir=/mnt/backup/deleted-$(date +%F) நீக்காமல், நீக்கப்படும் மற்றும் மாற்றப்படும் கோப்புகளைத் தனி அடைவுக்கு நகர்த்தும்.
விலக்குதல்: --exclude மற்றும் --include
தற்காலிகக் கோப்புகள், சார்புநிலைகள் மற்றும் ரகசியங்களை விலக்குவது பயன்பாட்டில் (deploy) மற்றும் காப்புகளில் வழக்கமான நடைமுறை.
# பல வடிவங்கள்
rsync -avz --exclude='.git/' --exclude='node_modules/' --exclude='*.log' ./app/ server:/srv/app/
# ஒரு கோப்பிலிருந்து வடிவங்கள்
rsync -avz --exclude-from='.rsyncignore' ./app/ server:/srv/app/
.rsyncignore கோப்பு ஒரு வரிக்கு ஒரு வடிவம் கொண்ட எளிய பட்டியல்:
.git/
node_modules/
*.log
.env
tmp/
வடிவங்கள் செயல்படும் விதம்:
- தொடக்கத்தில் slash இல்லாத வடிவம் (
*.log) எந்த ஆழத்திலும் பொருந்தும். - தொடக்கத்தில் slash உள்ள வடிவம் (
/tmp/) பரிமாற்றத்தின் மூலத்துடன் பிணைக்கப்பட்டுள்ளது — மேல் நிலைtmp-ஐ மட்டுமே விலக்கும். - இறுதியில் slash (
cache/) என்றால் "அடைவு மட்டும்". - விதிகள் வரிசையாகச் சரிபார்க்கப்படுகின்றன; முதலில் பொருந்தும் விதி செயல்படும்.
கடைசிப் புள்ளியிலிருந்து "தேவையானதை மட்டும் நகலெடுக்கும்" முறை பிறக்கிறது: முதலில் அனுமதிப்பது, பின்னர் மற்றவற்றைத் தடுப்பது.
# அடைவு அமைப்பைப் பாதுகாத்து .conf கோப்புகளை மட்டும் நகலெடு
rsync -av --include='*/' --include='*.conf' --exclude='*' /etc/ ./etc-confs/
இங்கே --include='*/' தேவை, rsync எல்லா துணை அடைவுகளுக்குள்ளும் நுழைய. வெற்று அடைவுகளை உருவாக்காமல் இருக்க --prune-empty-dirs (-m) சேர்க்கவும்.
rsync மூலம் காப்புகள்
எளிய தினசரி நகல்
வீட்டு அடைவின் குறைந்தபட்ச காப்பு இரண்டாவது வட்டில்:
rsync -aH --delete --exclude='.cache/' /home/alice/ /mnt/backup/alice/
இந்த அணுகுமுறையின் குறை: ஒரே ஒரு பதிப்பு மட்டுமே சேமிக்கப்படுகிறது. ஒரு கோப்பு கெட்டுப்போய், காப்பு ஒத்திசைவதற்குள் பழைய பதிப்பு தொலைந்துவிடும்.
--link-dest மூலம் படிப்படியான ஸ்னாப்ஷாட்கள்
--link-dest கொடி இந்தச் சிக்கலை கிட்டத்தட்ட இலவசமாக, அதே இடத்திலேயே தீர்க்கிறது. மாறாத கோப்புகள் நகலெடுக்கப்படுவதில்லை; முந்தைய ஸ்னாப்ஷாட்டின் கோப்புகளுக்கு கடின இணைப்புகளாக உருவாக்கப்படுகின்றன. ஒவ்வொரு ஸ்னாப்ஷாட்டும் முழு நகல் போலத் தெரியும், ஆனால் இடத்தை மாற்றங்கள் மட்டுமே எடுக்கின்றன.
#!/bin/bash
set -euo pipefail
SRC="/home/alice/"
DEST="/mnt/backup/snapshots"
TODAY="$(date +%F)"
mkdir -p "$DEST"
rsync -aH --delete \
--exclude='.cache/' \
--link-dest="$DEST/latest" \
"$SRC" "$DEST/$TODAY"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
முதல் இயக்கத்தில் latest அடைவு இன்னும் இருக்காது — rsync எச்சரிக்கை கொடுத்து முழு நகலை உருவாக்கும்; இது இயல்பானது. பழைய ஸ்னாப்ஷாட்களை சாதாரண rm -rf மூலம் நீக்கலாம்: மற்ற ஸ்னாப்ஷாட்கள் சுட்டிக்காட்டும் கோப்புகள் அப்போதும் தொலையாது.
30 நாட்களுக்கு மேற்பட்ட ஸ்னாப்ஷாட்களை நீக்க:
find /mnt/backup/snapshots -maxdepth 1 -type d -name '20*' -mtime +30 -exec rm -rf {} +
சேவையகத்தின் காப்பை மற்றொரு கணினிக்கு
திசையை "காப்பு சேவையகத்திலிருந்து வேலை செய்யும் கணினிக்கு" என்று தேர்ந்தெடுப்பது வசதி: காப்பு கணினியே தரவை எடுத்துக்கொள்கிறது, வேலை செய்யும் சேவையகத்துக்கு நகல்களுக்கான அணுகல் இல்லை. அது ஹேக் செய்யப்பட்டாலும் காப்புகள் பாதுகாப்பாக இருக்கும்.
rsync -azH --delete -e "ssh -i /root/.ssh/backup_key" \
backup@web01:/var/www/ /srv/backups/web01/www/
தரவுத்தளங்களை இப்படி நகலெடுக்கக் கூடாது என்பதை நினைவில் கொள்ளுங்கள்: இயங்கும் DBMS-இன் கோப்புகள் நகலெடுக்கும் நேரத்தில் ஒத்திசைவற்ற நிலையில் இருக்கும். முதலில் டம்ப் எடுங்கள் (mysqldump, pg_dump), பின்னர் rsync தயாராக உள்ள டம்ப் கோப்பை மாற்றட்டும்.
cron மூலம் திட்டமிட்ட இயக்கம்
காப்பு ஸ்கிரிப்டை crontab -e கட்டளை மூலம் cron-இல் சேர்க்கவும்:
# தினமும் 03:15-க்கு, வெளியீடு பதிவுக் கோப்பில்
15 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
cron-இலிருந்து காப்பு உண்மையில் வேலை செய்வதை உறுதிசெய்ய சரிபார்க்க வேண்டியவை:
- ஸ்கிரிப்டில் முழுமையான பாதைகளைப் பயன்படுத்துங்கள்: cron-இன்
PATHகுறைந்தபட்சம், தற்போதைய அடைவும் வேறு. - SSH சாவி கடவுச்சொல் இல்லாமல் இருக்க வேண்டும், ஹோஸ்ட் ஏற்கெனவே
known_hosts-இல் இருக்க வேண்டும் — இல்லையென்றால் சாவியின் உண்மைத்தன்மை குறித்த கேள்வியில் rsync நின்றுவிடும். - ஸ்கிரிப்ட் திரும்பும் குறியீட்டைச் சரிபார்க்க வேண்டும்: வெற்றியில் rsync 0 தரும், சில கோப்புகள் அனுப்பப்படவில்லை என்றால் 23, நகலெடுக்கும்போது கோப்புகள் மறைந்தால் 24.
- இரண்டு நகல்கள் ஒரே நேரத்தில் ஓடுவதைத் தடுக்க
flock:flock -n /tmp/backup.lock /usr/local/bin/backup.sh.
cron-க்குப் பதிலாக systemd டைமரையும் பயன்படுத்தலாம் — அது வெளியீட்டை பதிவேட்டில் எழுதுகிறது, முடிவுகளை journalctl மூலம் பார்ப்பது வசதியானது.
பெரிய பரிமாற்றங்களுக்கான பயனுள்ள விருப்பங்கள்
| பணி | விருப்பம் |
|---|---|
| இணைப்பை நிரப்பாமல் வேகத்தைக் கட்டுப்படுத்த | --bwlimit=5M |
| இணைப்பு துண்டித்த பின் பெரிய கோப்பைத் தொடர | -P (அல்லது --partial) |
| கோப்பு பட்டியலுக்குப் பதில் மொத்த முன்னேற்றம் | --info=progress2 |
| நேரத்துக்குப் பதில் உள்ளடக்கத்தின் அடிப்படையில் ஒப்பிட | -c (--checksum), மெதுவானது |
| பெறுநரில் புதியதாக உள்ள கோப்புகளைத் தொடாமல் விட | -u (--update) |
| இருக்கும் கோப்புகளை மேலெழுதாமல் இருக்க | --ignore-existing |
| அனுப்பிய பிறகு மூலக் கோப்புகளை நீக்க (நகர்த்த) | --remove-source-files |
| இறுதியில் விரிவான புள்ளிவிவரம் | --stats |
பொதுவான பிழைகளும் அவற்றின் திருத்தமும்
- எழுதும்போது
Permission denied— பயனருக்கு பெறுநர் அடைவில் உரிமை இல்லை. அடைவின் உரிமையாளரைச் சரிபார்க்கவும் அல்லது--rsync-path="sudo rsync"பயன்படுத்தவும். - கோப்புகள் ஒவ்வொரு முறையும் மீண்டும் நகலெடுக்கப்படுகின்றன — மாற்ற நேரம் பாதுகாக்கப்படவில்லை.
-aஅல்லது-tஇருப்பதை உறுதிசெய்யவும்; FAT/exFAT-இல்--modify-window=2சேர்க்கவும், ஏனெனில் அந்த அமைப்புகள் நேரத்தை இரண்டு வினாடி துல்லியத்தில் சேமிக்கின்றன. - நகலெடுக்கும்போது
chownஅல்லதுchgrpபிழைகள் — பென் டிரைவ் அல்லது பிணைய அடைவு உரிமையாளர்களை ஆதரிப்பதில்லை.-a-க்குப் பதில்-rltபயன்படுத்தவும். - தேவையற்ற உள் அடைவு
/backup/project/project— மூலத்தின் இறுதி slash தவறாக வைக்கப்பட்டுள்ளது. connection unexpectedly closed— SSH பிரச்சினை அல்லது தொலை பக்கத்தில் rsync நிறுவப்படவில்லை. சாதாரணsshமூலம் உள்நுழைந்து சேவையகத்தில்rsyncஇருக்கிறதா என்று பாருங்கள்.
சுருக்கம்
அன்றாட பணிக்கு சில கட்டளைகளை நினைவில் வைத்தால் போதும்: SSH வழியாக நகலுக்கு rsync -avz src/ host:/dst/, கண்ணாடிக்கு சோதனை -n-உடன் --delete, தேவையற்றவற்றுக்கு --exclude, ஸ்னாப்ஷாட் காப்புகளுக்கு --link-dest. மூலத்தின் இறுதி slash-ஐக் கவனியுங்கள் — rsync கோப்புகளை இயந்திரங்களுக்கு இடையே மாற்றுவதற்கான மிக நம்பகமான வழியாகிவிடும். ஒத்திசைவும் காப்பு நகலெடுப்பும் Linux பாடநெறியில் நடைமுறையுடன் விளக்கப்பட்டுள்ளன.
அடிக்கடி கேட்கப்படும் கேள்விகள்
scp-ஐ விட rsync ஏன் சிறந்தது?
scp ஒவ்வொரு முறையும் கோப்புகளை முழுமையாக நகலெடுக்கிறது, rsync மாற்றங்களை மட்டுமே அனுப்புகிறது, தொடர முடியும், பெறுநரில் தேவையற்றவற்றை நீக்க முடியும், வடிவங்களின் மூலம் கோப்புகளை விலக்க முடியும். ஒரு கோப்பை ஒருமுறை நகலெடுப்பதில் வேறுபாடு சிறியது; தொடர்ந்த ஒத்திசைவுக்கு rsync மிக வேகமானது.
Windows-இல் rsync பயன்படுத்த முடியுமா?
முடியும், WSL வழியாக — அங்கே rsync சாதாரண Linux-இல் போலவே நிறுவப்படுகிறது — அல்லது Cygwin வழியாக. Windows கணினியின் கோப்புகளை Linux சேவையகத்துடன் ஒத்திசைக்க WSL-இலிருந்து செய்வதே எளிது.
rsync அனுப்பும் தரவை குறியாக்கம் செய்யுமா?
rsync தானாக குறியாக்கம் செய்வதில்லை, ஆனால் SSH வழியாக நகலெடுக்கும்போது முழு போக்குவரத்தும் குறியாக்கப்பட்ட SSH இணைப்பின் வழியாகச் செல்கிறது. rsync:// முகவரியுடன் rsync டீமனுடன் வேலை செய்யும்போது மட்டுமே குறியாக்கம் இல்லாமல் அனுப்பப்படுகிறது.
நகல் மூலத்துடன் பொருந்துகிறதா என்று எப்படிச் சரிபார்ப்பது?
rsync -avnc மூலம்/ பெறுநர்/ இயக்குங்கள்: -c கொடியுடன் கோப்புகள் சரிபார்ப்புத் தொகைகளால் ஒப்பிடப்படுகின்றன, -n எதையும் மாற்றாது. கோப்புப் பட்டியல் காலியாக இருந்தால் நகல்கள் ஒத்தவை.
rsync பரிமாற்றத்தின் நடுவில் நிறுத்தினால் என்ன ஆகும்?
ஏற்கெனவே அனுப்பப்பட்ட கோப்புகள் இருக்கும், முழுமையடையாத கோப்பு இயல்பாக நீக்கப்படும். அதே கட்டளையை மீண்டும் இயக்கினால் நிறுத்திய இடத்திலிருந்து தொடரும்; -P கொடியுடன் குறுக்கிடப்பட்ட கோப்பின் ஒரு பகுதியும் பாதுகாக்கப்படும்.
“Linux: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.
பாடநெறிக்குச் செல்