rsync తో బ్యాకప్లు
SSH ద్వారా మరో సర్వర్కు ఫైల్ కాపీయింగ్ ఎలా సెటప్ చేయాలి, హార్డ్ లింక్లను ఉపయోగించి వెర్షన్ హిస్టరీ ఎలా చేయాలి, మరియు ప్రమాదకరమైన --delete ఆప్షన్తో ఎక్కువ ఎలా డిలీట్ చేయకూడదు.
23 ఆగస్టు, 2026న నవీకరించబడింది
కాపీలు చేయడానికి rsync అత్యంత సులభమైన పనిచేసే మార్గం: ఇది అన్నిచోట్లా అందుబాటులో ఉంటుంది, ఫైల్లలో మారిన భాగాలను మాత్రమే బదిలీ చేస్తుంది మరియు SSH ద్వారా పనిచేస్తుంది. చిన్న డేటాసెట్లకు ఇది సరిపోతుంది.
ప్రాథమిక కమాండ్
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key -p 22" \
/var/www/ backup@backup.example.com:/srv/backup/vds/www/
ఫ్లాగ్ల వివరణ:
-a— అనుమతులు, యజమానులు, సమయాలు మరియు లింక్లను భద్రపరుస్తుంది;-v— ఏమి జరుగుతుందో చూపిస్తుంది;-z— బదిలీ సమయంలో కంప్రెస్ చేస్తుంది (డేటా ఎక్కువగా ఉంటే 500 Mbps వరకు బ్యాండ్విడ్త్పై ఉపయోగకరం);--delete— సోర్స్లో ఇక లేని వాటిని రిసీవర్లో తొలగిస్తుంది.
సోర్స్ పాత్ చివరన ఉన్న స్లాష్ అంటే “డైరెక్టరీలోని కంటెంట్”; అది లేకుంటే డైరెక్టరీనే కాపీ అవుతుంది.
/var/www/మరియు/var/wwwవేర్వేరు ఫలితాలను ఇస్తాయి, మరియు--deleteతో కలిపి వాడినప్పుడు ఆ తేడా తప్పు వస్తువును తుడిచివేస్తుంది. ఎప్పుడూ మొదట--dry-runతో రన్ చేయండి.
rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/
-n ఫ్లాగ్ అంటే డ్రై రన్.
పాస్వర్డ్ లేని యాక్సెస్ కీ
షెడ్యూల్ చేసిన కాపీయింగ్కు పాస్వర్డ్ నమోదు చేయకుండా లాగిన్ అవ్వడం అవసరం:
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com
రిసీవర్లో ఈ కీని ఒకే కమాండ్కు పరిమితం చేయండి — అప్పుడు దొంగిలించబడిన కీ షెల్ ఇవ్వదు. రిసీవర్లోని ~/.ssh/authorized_keysలో:
command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup
హార్డ్ లింక్లతో వెర్షన్ హిస్టరీ
సాధారణ rsync ప్రస్తుత స్థితిని మాత్రమే ఉంచుతుంది: నిన్న మీరు ఒక ఫైల్ను తొలగించి ఈరోజు గమనించినట్లయితే, దాన్ని పునరుద్ధరించడానికి ఎక్కడా మార్గం ఉండదు. --link-dest మీకు హిస్టరీ ఇస్తుంది: మారని ఫైల్లు మళ్లీ కాపీ కావు, కానీ లింక్ అవుతాయి, కాబట్టి ముప్పై కాపీలు ఒకదాని కంటే కొంచెం ఎక్కువ స్థలమే తీసుకుంటాయి.
#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
--link-dest="$DEST/latest" \
/var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +
స్క్రిప్ట్ను రాత్రిపూట షెడ్యూల్పై రన్ చేయండి, మరియు ఎప్పుడూ లాగింగ్తో.
మినహాయింపులు
rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log
మొత్తం రూట్ను కాపీ చేయడం చాలా అరుదుగా అవసరం: సరిగ్గా ఏమి బ్యాకప్ చేయాలి అనే ఆర్టికల్ నుండి ఖచ్చితమైన జాబితాను తయారు చేయడం మరింత ఉపయోగకరం.
rsync సరిపోని సందర్భాలు
- మీకు స్టోరేజ్ ఎన్క్రిప్షన్ మరియు డీడూప్లికేషన్ అవసరమైతే, Restic వాడండి.
- డేటా నిరంతరం మారుతూ ఇంటెగ్రిటీ ముఖ్యమైతే, మొదట డేటాబేస్ను డంప్ చేయండి, తర్వాత ఏర్పడిన ఫైల్ను rsync చేయండి.
- రిసీవర్ మీరు నమ్మని వేరొకరి స్టోరేజ్ అయితే: rsync ఫైల్లను యథాతథంగా రాస్తుంది, క్లయింట్-సైడ్ ఎన్క్రిప్షన్ ఉండదు.
సాధారణ తప్పులు
- తప్పు సోర్స్ పాత్తో
--delete. ఖాళీ సోర్స్ డైరెక్టరీ రిసీవర్ను తుడిచివేస్తుంది. డ్రై రన్ తప్పనిసరి. - అదే డిస్క్పై కాపీ. అది బ్యాకప్ కాదు, అదే వైఫల్యానికి రెండో లక్ష్యం. ఆఫ్సైట్ కాపీలు చూడండి.
- ఇప్పటికే కంప్రెస్ అయిన డేటాకు కంప్రెషన్.
-zఆర్కైవ్లు మరియు ఇమేజ్లను నెమ్మదింపజేస్తుంది మాత్రమే. - రాత్రి రన్ డిస్క్ బాటిల్నెక్ను తాకడం. రైట్ త్రూపుట్ పరిమితి టియర్పై ఆధారపడి ఉంటుంది: డిస్క్ వేగం చూడండి.
--bwlimit=20000మరియు ఆఫ్-పీక్ గంటల్లో రన్ చేయడం సహాయపడతాయి. - ఎవరూ ఫలితాన్ని తనిఖీ చేయకపోవడం. రిటర్న్ కోడ్ను లాగ్ చేసి మానిటర్ చేయండి:
rsync ... || echo "backup failed" | mail -s alert you@example.com.