0887 371 498 support@itservice-bg.net
rsync в Linux
26.11.2023 · Самуил Арсов · Bash script, Debian, Hosting, Kali Linux, Linux commands, Ubuntu

rsync в Linux

Програмата rsync е изключително мощен инструмент за синхронизиране на файлове и папки между две локации. Използва се предимно в Linux и UNIX системи и е известен със своята ефективност и гъвкавост. Ето основните аспекти на rsync:

  1. Диференциално копиране: rsync изпраща само разликите между източниковия и целевия файл, което значително намалява обема на преносимите данни.
  2. Гъвкави опции: Потребителите могат да избират между различни опции за синхронизация, като копиране на цели директории, изключване на определени файлове, задаване на правила за обработка на символни връзки, и т.н.
  3. Сигурност: rsync може да се използва с ssh (Secure Shell) за криптиран пренос на данни, което го прави подходящ за пренос на чувствителна информация.
  4. Компресия и оптимизация: Програмата позволява компресиране на данните по време на трансфера, което води до по-бързо копиране, особено при бавни връзки.
  5. Запазване на атрибутите на файловете: rsync може да запази атрибутите на файловете (като разрешения, време на последна промяна, групи и притежатели), което е важно за запазване на консистентността на данните.
  6. Използване на скриптове и автоматизация: rsync често се използва в скриптове за автоматизиране на процеси на архивиране и резервно копие.

rsync е мощен инструмент, който се използва в множество сценарии за управление на файлове и данни, включително резервно копиране, зеркалиране на сайтове и ефективно обновяване на файлове в множество системи.

Примери с rsync

rsync работи като синхронизира файлове и директории между две местоположения, като копира само промените, които са настъпили от последното синхронизиране. Това го прави изключително ефективен за обновяване на големи набори от данни с минимален трафик. Ето няколко примера за това как работи rsync:

Просто Копиране на Файлове

За да копирате файлове от една директория в друга на същата система:

rsync -av /path/to/source/ /path/to/destination/
  • -a (архивен режим) запазва правата, връзките, времето на последна промяна и други атрибути.
  • -v (verbose) показва подробна информация за процеса на копиране.

Синхронизация между Сървъри

За да синхронизирате данни между два сървъра:

rsync -avz -e ssh user@remotehost:/path/to/remote/source/ /path/to/local/destination/
  • -z активира компресията на данните по време на трансфера.
  • -e ssh указва да се използва SSH за сигурна връзка.

Създаване на Резервно Копие

За да създадете резервно копие на вашите файлове на външно устройство или друга директория:

rsync -av --delete /path/to/source/ /path/to/backup/
  • --delete опцията премахва файлове в целевата директория, които вече не съществуват в източника.

Изключване на Файлове

Можете да изключите определени файлове или директории от процеса на синхронизация:

rsync -av --exclude 'pattern_to_exclude' /path/to/source/ /path/to/destination/
  • --exclude указва шаблони на файлове или папки, които да бъдат пропуснати.

Инкрементно Резервно Копие

rsync може да се използва за създаване на инкрементни резервни копия, като копира само променените файлове:

rsync -av --link-dest=/path/to/previous/backup /path/to/source/ /path/to/current/backup/
  • --link-dest свързва с файлове от предишно копие за намаляване на използваното пространство.

Ограничаване на Ширината на Лентата

Можете да ограничите скоростта на пренос на данни:

rsync -avz --bwlimit=1000 /path/to/source/ /path/to/destination/
  • --bwlimit ограничава скоростта на пренос в килобайти в секунда.

Тези примери илюстрират гъвкавостта и мощта на rsync за различни сценарии на синхронизиране и резервно копиране на данни.

Скрипт с rsync

Следващият скрипт автоматизира резервното копиране на сървър чрез rsync през SSH. Преди да стартира синхронизацията, той проверява дали скриптът се изпълнява от root, дали целевият сървър е достъпен на порт 22 и дали целевата директория съществува. При успех копира /etc, /root, /var/vmail и /var/www и записва времето на последното копие.

#!/bin/bash

# ---------------------------
# rsync script backup my server
# August 2019
# Samuil Arsov
# support@itservice-bg.net
# --------------------------

PASS='@11#22$33'
DIR='/mnt/hdd1/rsync'
IP='192.168.101.2'

clear

if [ $(whoami) != 'root' ]; then
        echo "Please run with root user."
        exit
fi

nmap -sT -Pn -p 22 $IP | egrep -q 'open'
if [[ $? -ne 0 ]]; then
    echo "IP $IP Not connection"
       exit 1
fi

if [ ! -d "$DIR" ]
then
    echo "Directory $DIR DOES NOT exists."
    exit 1
fi

sshpass -p $PASS rsync -avzh --delete -e ssh root@$IP:/etc/ $DIR/etc
sshpass -p $PASS rsync -avzh --delete -e ssh root@$IP:/root/ $DIR/root
sshpass -p $PASS rsync -avzh --delete -e ssh root@$IP:/var/vmail/ $DIR/vmail
sshpass -p $PASS rsync -avzh --delete -e ssh root@$IP:/var/www/ $DIR/www
date '+%Y-%m-%d %H:%M:%S' > $DIR/backup_time.txt

Заключение

rsync е незаменим инструмент за всеки системен администратор. Комбинацията от диференциално копиране, поддръжка на SSH, компресия и богати опции за филтриране го прави идеален избор за резервни копия, синхронизация между сървъри и автоматизирани скриптове. Веднъж разбран, rsync спестява значително време и ресурси при управлението на данни в Linux среда.