
Ако управљате Линукс серверима или једноставно имате рачунар са подацима које не можете себи приуштити да изгубите, учење коришћења rsync за аутоматизацију резервних копија Практично је обавезно. Нема потребе за подешавањем скупог пакета или ослањањем на власничке алате: уз неколико добро осмишљених команди, можете имати солидан, ефикасан и једноставан за одржавање систем за прављење резервних копија.
Кроз овај водич видећете Од основа rsync-а до напредног уређивањаЛокалне резервне копије, удаљене резервне копије путем SSH-а, резервне копије у стилу Time Machine-а са снимцима података, скрипте спремне за продукцију, cron, системски тајмери, изузеци, ротације и верификација. Погледајте наше Поређење метода прављења резервних копија да одлучите о стратегији. Идеја је да завршите чланак са јасним планом и командама које можете практично копирати и прилагодити свом окружењу.
Шта је rsync и зашто се толико користи за прављење резервних копија?
Rsync је алат командне линије дизајниран за синхронизујте датотеке и директоријуме између две локације, било на истом рачунару или између различитих машина, обично преко SSH-а или са сопственим rsyncd демоном.
Предност rsync-а у односу на једноставан cp или scp је у томе што имплементира паметан алгоритам од диференцијални блоковски преносУпоређује извор и одредиште и шаље само измене, а не целу датотеку сваки пут. Ако имате много података и мењате само мале делове, уштеде времена и пропусног опсега су огромне.
Поред тога, rsync може сачувати готово све метаподаткедозволе, власници, групе, временске ознаке, симболичке везе, уређаји… Зато је толико користан за „озбиљне“ резервне копије, где није важан само садржај, већ и како је систем датотека подешен.
Још једна важна предност је што rsync ради и локално и даљинскиМожете га користити за синхронизацију две фасцикле на истом серверу, за преузимање података са удаљеног сервера на вашу машину за прављење резервних копија или за пребацивање података на удаљени NAS или VPS помоћу SSH-а.

Инсталирајте и тестирајте rsync на различитим дистрибуцијама
Иако многе дистрибуције већ долазе са инсталираним rsync-ом, добра је идеја Проверите инсталацију и ажурирајте на новију верзију. и на изворној и на одредишној машини пре него што монтирате аутоматске резервне копије.
На системима заснованим на Дебијану или Убунтуу, можете урадити нешто једноставно као:
rsync --version
sudo apt update
sudo apt install rsync
У дистрибуцијама попут RHEL-а, CentOS-а, Rocky Linux-а или других деривата, поступак би био веома сличан, мењајући менаџер пакета, али са истом идејом... Уверите се да је rsync доступан и ажуриран у обе крајности.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Основне rsync опције које ћете користити све време
Иако rsync има добар арсенал параметара, у пракси ћете за прављење резервних копија провести 90% времена користећи... мали скуп опција то треба запамтити.
Укупна структура команде је прилично једноставна, али постоји један детаљ који додаје много могућности: коса црта на крају путање мења понашање.
Генеричка синтакса:
rsync ORIGEN DESTINO
Кључна разлика лежи у начину на који се третира изворни директоријум:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Копирај САМО садржај директоријума на одредиште
рсинц -ав /соурце/дир/ /бацкуп/
Неке од најчешће коришћених опција за прављење резервних копија су посебно практичне јер Они комбинују много ствари у кратком тексту.:
- -a: режим датотеке. Еквивалентно са -rlptgoD (рекурзивно, чува симболичке везе, дозволе, временске ознаке, групу, власника и посебне датотеке).
- -v: „Опширан“ режим. Приказује шта ради и којим датотекама приступа.
- -z: компресује податке током преноса, идеално за удаљене копије преко интернета.
- -h: чини да величине изгледају „лепо“ (МБ, ГБ…), савршено за људе.
- -P: комбинује датотеке напретка и делимичне датотеке, како би се видело како ствари стоје и како би се могло наставити.
- –Избриши: брише на одредишту датотеке које више не постоје на извору, остављајући тачну копију.
- -n / –пробни рад: симулира извршење без додиривања било чега, фантастично јер не прави проблеме.
- –искључи / –искључи-из: омогућава вам да искључите обрасце или комплетну листу рута које не желите да копирате.
- –линк-одредиште: креира чврсте везе са претходном копијом, основу инкременталних резервних копија типа Time Machine.
Ручне локалне копије и први примери
Први корак пре аутоматизације било чега јесте да имате јасне и проверене команде за ручно копирањеХајде да прегледамо типичне случајеве које ћемо касније користити у скриптама.
Ако желите да клонирате свој кућни директоријум у локални резервни дискМинимална команда би изгледала овако:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Овај rsync скенира ваше почетна страница комплетно очување дозвола, датума и структуреи копира само оно што недостаје или се променило од последњег пута, што је већ веома уредна инкрементална копија без компликовања ствари.
Још један класичан пример је синхронизација подаци о пројекту, фотографије или документи између две фасцикле на истом серверу или чак различитих дискова, како би друга локална игра увек била свежа.
rsync -av /media/fotos/ /backup/fotos/
Када су у питању осетљиви системски подаци, као што су /etc или /var/wwwНормално је желети копију која је тачно огледало, уклањајући из резервне копије оно што нестаје у оригиналу. Ту долази до изражаја чувена опција брисања.
rsync -av --delete /var/www/ /backup/www/
Безбедне удаљене резервне копије помоћу SSH-а
Где rsync заиста блиста је када га комбинујете са SSH за слање копија са сервераНа овај начин можете да чувате своје податке на другом чвору у вашој мрежи, NAS-у или VPS-у на интернету. На овај начин нисте зависни од једног уређаја и поштујете део чувеног правила 3-2-1 (барем једна копија ван локације).
Идеално би било да конфигуришете аутентификацију јавним кључем уместо да стално ручно уносите лозинке. Када копирате кључ на резервни сервер, команде постају веома интуитивне.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Преношење података са удаљеног сервера на вашу машину за прављење резервних копија
rsync -avz backup@remote-server:/var/www/ /backups/www/
У мало префињенијим сценаријима, можете подесити SSH шифровање, порт или компресија из самог rsync-а са -e, на пример ако ваш сервер слуша на другом порту или желите да оптимизујете спору везу.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Користан трик када постоје слабе везе или дељене мреже јесте коришћење –bwlimit да би се избегло преоптерећење везе и не остављајте никога без интернета док покрећете масовну резервну копију.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Потпуне, диференцијалне и инкременталне резервне копије помоћу rsync-а
Иако rsync већ врши диференцијалне преносе на нивоу блока, са становишта стратегије прављења резервних копија вреди размотрити. три врсте копија: пуне, диференцијалне и инкременталнекоје можете директно имплементирати помоћу rsync опција.
Комплетна копија је једноставна: она рекреира сав садржај извора на одредишту, идеална као почетна резервна копија или да имате чисту референцу.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Диференцијално копирање се надовезује на ту основу и фокусира се на одржавање одредишта усклађеног са извором, копирање промена и уклањање онога што више не постоји. То је оно што обично мислите када говорите о... имају огледало система.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Најсочнији део је „право“ инкрементално прављење резервних копија, где поред синхронизације, Чувате историју по датуму без дуплирања податакаОвде долази до изражаја опција –link-dest, која креира чврсте везе ка претходној копији за датотеке које се нису промениле.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Овим приступом, свака резервна фасцикла изгледа као комплетна копија, али интерно Идентичне датотеке деле блокове на дискуОво значајно смањује искоришћени простор и омогућава лаку навигацију кроз историјске снимке.
Резервне копије у стилу машине времена са снимцима и чврстим везама
Многи људи желе да реплицирају у Линуксу погодност macOS Time Machine са снимцима по датумуСа rsync-ом је то сасвим могуће комбиновањем --link-dest, мало љуске и мало организације.
Идеја је да се одржава тренутни директоријум који указује на последњу добру резервну копију, а истовремено да се креира фасцикле са временском ознаком (датум-време) који представљају сваки снимак. Непромењене датотеке су повезане чврстим везама са претходним снимком, а нови блокови се уписују само када постоје стварне разлике.
Типична команда у тој шеми може бити нешто попут:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Затим се скрипта брине о ажурирању симболичке везе актуелно тако да увек указује на најновији снимаки да одржавате кратку историју организовану по датуму. На тај начин можете прегледати старије копије једноставним уласком у фасциклу која вас занима.
Аутоматизација долази природно: скрипту чувате у нечему попут /usr/local/bin/rsync-time-machine и закажите га да се покреће свакодневно помоћу cron-а у време које вам највише одговара.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Аутоматизујте резервне копије помоћу cron-а на дневној бази
Долази тачка када ручно копирање више нема смисла; нормална ствар је Закажите прављење резервних копија помоћу cron-а тако да се аутоматски покрећу ван шпица (на пример, рано ујутро) и да можете заборавити на њих осим да повремено проверавате логове.
Процес је увек исти: припремите скрипту која прави комплетну копију са свим опцијама (изузеци, логови итд.), дајете јој дозволе за извршавање и укључујете је у crontab одговарајућег корисника или у root ако укључује додиривање целог система.
Пример једноставног скрипта за локално копирање може бити:
#!/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» «$(назив_директоријума «$LOG_FILE»)»
echo „Локална резервна копија је започета“ >> „$LOG_FILE“
rsync -av –delete
–искључи='*.tmp' \
–искључи='.кеш' \
–exclude='Преузимања/*' \
«$ИЗВОРНИ_ДИРЕКТОР/» «$РЕЗЕРВНИ_ДИРЕКТОР/» >> «$ДАТОТЕКА_ЛОГА» 2>&1
ако; онда
echo » Резервна копија је успешно завршена» >> «$LOG_FILE»
друго
echo » Резервна копија са грешкама» >> «$LOG_FILE»
fi
Када имате скрипту унутра, на пример, /usr/local/bin/rsync-local-backup.sh И означен као извршни фајл, додајете га у cron тако да се покреће у одређено време.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Унутар crontab-а можете ставити нешто попут:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
системски тајмери: модерна алтернатива за cron
У модерним системима често се исплати Користите системске тајмере уместо cron-апосебно ако желите боље интегрисати сервисе, управљати мрежним зависностима или имати централизоване логове у journalctl-у.
Идеја је да се дефинише сервис који покреће ваш скрипт за прављење резервних копија и тајмер који показује када га покренути. Сервис би могао бити нешто попут:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Типе = онесхот
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Корисник=роот
Стандардни излаз=дневник
Стандардна грешка=дневник
Време чекања у секундама=7200
ВантедБи = мулти-усер.таргет
А придружени тајмер би био дефинисан на следећи начин, за дневна резервна копија у 2 ујутру са извесном случајношћу како не би све одједном преоптеретили:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
У календару=*-*-* 02:00:00
Трајно=тачно
Рандомизовано кашњење у секундама = 10 мин
WantedBy=timers.target
Са тим, све што преостаје је да се поново учита systemd, активира тајмер и провери да ли се правилно програмира и да Сервисни дневник показује да се копије покрећу када је време.
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Организујте ротирајуће резервне копије: дневне, недељне и месечне
Ако желите нешто мало сложеније од једне статичке копије, можете подесити структуру од ротирајуће резервне копије: дневне, недељне и месечнекоришћење чврстих веза за уштеду простора и проналажење за чишћење старих датотека.
Класичан образац подразумева да се тренутни директоријум ажурира сваки пут помоћу rsync-а, а затим клонира то стабло са чврстим везама до дневних, недељних и месечних фасцикли у зависности од дана.
#!/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 «$CURRENT» «$DAILY» «$WEEKLY» «$MONTHLY»
рсинц -ав –делете –линк-дест=»$ЦУРРЕНТ» \
«$SOURCE_DIR/» «$CURRENT/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$CURRENT» «$MONTHLY/$DATE»
пронађи „$DAILY“ -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
пронађи „$НЕДЕЉНО“ -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
пронађи „$МЕСЕЧНО“ -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Са овим системом имате прилично разуман историјски прозор без попуњавања диска комплетним копијама, а сваки снимак остаје доступан за навигацију као нормална фасцикла.
Ако се ваши подаци брзо мењају или су веома велики, можете подесити периоде чувања, учесталост или чак комбиновати ово са LVM или ZFS снимцима како бисте осигурали конзистентност база података или виртуелних машина.
Пратите, проверавајте и сазнајте да ли су ваше резервне копије корисне.
Свакодневно покретање задатака прављења резервних копија је одлично, али ако нико не провери резултат Неће вам много помоћи. Важно је подесити основно праћење да бисте знали да ли је и када направљена последња резервна копија.
Једноставна тактика је да се остави мали маркер у одредишној фасцикли сваки пут када се резервна копија успешно заврши, на пример, .last-backup-success датотека са датумом. Затим, екстерни скрипт, или чак Nagios/Icinga провера, могу вас упозорити ако је та датотека превише стара.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Још једна здрава навика је проверавање Проверите rsync логове за грешке или неуобичајене брзине преносаСкрипта која издваја статистику као што су „Број датотека“, „Укупна величина“, „Убрзање“ и слично вам даје брз преглед како ствари стоје.
И, наравно, оно што заиста прави разлику јесте навикавање на то с времена на време. да се направи права рестаурацијаУзмите одређену датотеку, вратите верзију од јуче или прошле недеље и проверите да ли се исправно отвара. Ово је једини начин да будете сигурни да ће, ако једног дана све крене по злу, ваше резервне копије бити на висини задатка.
Ако обједините све ове делове — добро конфигурисан rsync, аутоматизацију помоћу cron или systemd, разумну ротацију, праћење и тестирање враћања — добићете робустан, флексибилан и јефтин систем за прављење резервних копија за Линукс, који у потпуности користи предности бесплатног софтвера без присиљавања да се одрекнете практичности или поузданости.
