Rsync

ფაილების და დირექტორიების სინქრონიზაცია

rsync არის მძლავრი და მრავალმხრივი ბრძანების ხაზის უტილიტა ფაილების და დირექტორიების სინქრონიზაციისთვის ორ ლოკაციას შორის. ის ფართოდ გამოიყენება სარეზერვო ასლების, მირინგის და მონაცემთა ეფექტური გადაცემისთვის, რადგან მას შეუძლია მხოლოდ ფაილებს შორის არსებული განსხვავებების გადატანა.

1. შესავალი rsync-ში

rsync (remote synchronize) არის უტილიტა ფაილების ეფექტური გადაცემისა და სინქრონიზაციისთვის კომპიუტერსა და საცავ სისტემას შორის და პირიქით. ის იყენებს დელტა-კოდირების ალგორითმს მონაცემთა გადაცემის მინიმიზაციისთვის, მხოლოდ ფაილების შეცვლილი ნაწილების გაგზავნით.

2. ძირითადი მახასიათებლები

  • დელტა გადაცემის ალგორითმი: მხოლოდ ფაილების შეცვლილ ნაწილებს გადასცემს, ზოგავს გამტარუნარიანობას და დროს.
  • დისტანციური Shell-ის მხარდაჭერა: შეუძლია გამოიყენოს SSH უსაფრთხო გადაცემისთვის ქსელზე.
  • ატრიბუტების შენარჩუნება: შეუძლია შეინარჩუნოს ნებართვები, მფლობელობა, დროის ნიშნები, სიმბოლური ბმულები და სხვა.
  • მოქნილი ფილტრაცია: იძლევა კონკრეტული ფაილების და დირექტორიების ჩართვას ან გამორიცხვას.
  • Daemon რეჟიმი: შეუძლია იმუშაოს როგორც დემონი დაგეგმილი სარეზერვო ასლების და სინქრონიზაციისთვის.

3. ძირითადი გამოყენება

rsync-ის ზოგადი სინტაქსი ასეთია:

rsync [options] SOURCE DESTINATION

მოდით განვიხილოთ რამდენიმე ძირითადი მაგალითი.

ლოკალურიდან ლოკალურზე

დირექტორიის კოპირება თქვენი ლოკალური მანქანის ერთი მდებარეობიდან მეორეზე.

# შევქმნათ სატესტო მონაცემები
mkdir -p /tmp/source_dir
echo "Hello World" > /tmp/source_dir/file1.txt
echo "Another file" > /tmp/source_dir/file2.txt

# სინქრონიზაცია /tmp/source_dir-დან /tmp/destination_dir-ში
rsync -av /tmp/source_dir/ /tmp/destination_dir/

მიაქციეთ ყურადღება ბოლო სლეშს:

  • source_dir/: სინქრონიზაციას უკეთებს source_dir-ის შინაარსს.
  • source_dir: სინქრონიზაციას უკეთებს source_dir-ს თვითონ დანიშნულების ადგილას.

ლოკალურიდან დაშორებულზე

ფაილების კოპირება თქვენი ლოკალური მანქანიდან დისტანციურ სერვერზე. დაგჭირდებათ SSH წვდომა დისტანციურ სერვერზე.

rsync -avz /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

დაშორებულიდან ლოკალურზე

ფაილების კოპირება დისტანციური სერვერიდან თქვენს ლოკალურ მანქანაზე.

rsync -avz user@remote_host:/path/to/remote/dir/ /path/to/local/dir/

4. მნიშვნელოვანი ოფციები

მოდით განვიხილოთ rsync-ის ყველაზე ხშირად გამოყენებული ოფციები.

-a (არქივის რეჟიმი)

ეს არის ერთ-ერთი ყველაზე მნიშვნელოვანი და ხშირად გამოყენებული ოფცია. ის არის რამდენიმე სხვა ოფციის (-rlptgoD) კომბინაცია, რომელიც უზრუნველყოფს რეკურსიულ კოპირებას, რომელიც ინარჩუნებს თითქმის ყველაფერს.

  • -r: რეკურსიული
  • -l: სიმბოლური ბმულების კოპირება როგორც სიმბოლური ბმულები
  • -p: ნებართვების შენარჩუნება
  • -t: მოდიფიკაციის დროის შენარჩუნება
  • -g: ჯგუფის შენარჩუნება
  • -o: მფლობელის შენარჩუნება (მხოლოდ root)
  • -D: მოწყობილობის ფაილების და სპეციალური ფაილების შენარჩუნება (მხოლოდ root)

მაგალითი:

rsync -a /path/to/source/ /path/to/destination/

-v (დეტალური)

ზრდის დეტალურობას, გიჩვენებთ რომელი ფაილები გადაიცემა და გაწვდით მეტ დეტალს პროცესის შესახებ.

მაგალითი:

rsync -av /tmp/source_dir/ /tmp/destination_dir/

-z (შეკუმშვა)

შეკუმშავს ფაილის მონაცემებს გადაცემის დროს, რამაც შეიძლება მნიშვნელოვნად დააჩქაროს გადაცემა ნელი ქსელის კავშირებისას.

მაგალითი:

rsync -avz /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

-h (ადამიანისთვის წაკითხვადი)

გამოაქვს რიცხვები ადამიანისთვის წაკითხვად ფორმატში (მაგ., 1K, 234M, 2G). ხშირად გამოიყენება -v-სთან ერთად.

მაგალითი:

rsync -avh /path/to/source/ /path/to/destination/

--delete (ზედმეტი ფაილების წაშლა)

ეს ოფცია გადამწყვეტია მირინგისთვის. ის შლის ფაილებს დანიშნულების ადგილას, რომლებიც არ არსებობს წყაროში. გამოიყენეთ სიფრთხილით!

მაგალითი:

# წყაროს სინქრონიზაცია დანიშნულებასთან, წაშლის ყველა ფაილს დანიშნულებაში, რომელიც არ არის წყაროში
rsync -av --delete /path/to/source/ /path/to/destination/

--exclude და --include (ფაილების ფილტრაცია)

ეს ოფციები საშუალებას გაძლევთ მიუთითოთ ფაილების ან დირექტორიების შაბლონები, რომლებიც უნდა გამოირიცხოს ან ჩაირთოს გადაცემაში. --exclude უპირატესობას ანიჭებს --include-ს.

მაგალითი: კონკრეტული დირექტორიის და ფაილის ტიპის გამორიცხვა

rsync -av --exclude 'cache/' --exclude '*.log' /path/to/source/ /path/to/destination/

მაგალითი: მხოლოდ კონკრეტული ფაილის ტიპების ჩართვა

# მხოლოდ .html და .css ფაილების სინქრონიზაცია, მაგრამ ყველაფრის გამორიცხვა
rsync -av --include='*.html' --include='*.css' --exclude='*' /path/to/source/ /path/to/destination/

--dry-run (ტესტირება ცვლილებების გარეშე)

ძალიან სასარგებლოა თქვენი rsync ბრძანების შესამოწმებლად რეალური ცვლილებების განხორციელებამდე. ის გიჩვენებთ, რა მოხდებოდა რეალურად არაფრის კოპირების ან წაშლის გარეშე.

მაგალითი:

rsync -av --delete --dry-run /path/to/source/ /path/to/destination/

-P (პროგრესი და ნაწილობრივი)

ეს არის --progress (აჩვენებს გადაცემის პროგრესს) და --partial (ინახავს ნაწილობრივ გადაცემულ ფაილებს, რაც საშუალებას გაძლევთ გააგრძელოთ შეწყვეტილი გადაცემები) კომბინაცია.

მაგალითი:

rsync -avP /large/file.zip user@remote_host:/backup/

-e (დისტანციური shell-ის მითითება)

საშუალებას გაძლევთ მიუთითოთ დისტანციური shell, რომლის გამოყენებაც გსურთ, როგორც წესი, სხვა SSH პორტის ან გასაღების გამოყენებისთვის.

მაგალითი: კონკრეტული SSH გასაღების გამოყენება

rsync -avz -e "ssh -i ~/.ssh/my_rsync_key" /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

მაგალითი: მორგებული SSH პორტის გამოყენება

rsync -avz -e "ssh -p 2222" /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

5. გამოყენების გავრცელებული შემთხვევები

ვებსაიტის განთავსება

თქვენი ლოკალური ვებსაიტის განვითარების დირექტორიის სინქრონიზაცია დისტანციურ ვებ სერვერთან.

rsync -avz --delete --exclude 'node_modules/' --exclude '.git/' /var/www/mywebsite/ [email protected]:/var/www/html/mywebsite/

ყოველდღიური სარეზერვო ასლები

მნიშვნელოვანი ფაილების ყოველდღიური სარეზერვო ასლის შექმნა გარე დისკზე ან დისტანციურ სარეზერვო სერვერზე.

# ლოკალური სარეზერვო ასლი გარე დისკზე
rsync -avh --delete /home/youruser/documents/ /media/external_hdd/backups/documents_backup/

# დისტანციური სარეზერვო ასლი (მაგ., cron job-ში)
rsync -avzh --delete /home/youruser/data/ [email protected]:/mnt/backups/mydata/

დირექტორიების მირინგი

დირექტორიის ზუსტი ასლის შენარჩუნება, იმის უზრუნველყოფა, რომ ნებისმიერი ცვლილება (დამატებები, მოდიფიკაციები, წაშლა) წყაროში აისახოს დანიშნულების ადგილას.

rsync -a --delete /path/to/master_copy/ /path/to/mirror/

მონაცემთა მიგრაცია

დიდი მოცულობის მონაცემების გადაცემა სერვერებს შორის.

rsync -avzP user@old_server:/var/www/html/ user@new_server:/var/www/html/

ეს ბრძანება ასრულებს rsync-ს თქვენი ლოკალური მანქანიდან, იღებს მონაცემებს old_server-დან და უბიძგებს new_server-ზე.

6. მოწინავე თემები

Rsync Daemon

მოწინავე სცენარებისთვის, rsync-ს შეუძლია იმუშაოს როგორც დემონი, რაც კლიენტებს საშუალებას აძლევს დაუკავშირდნენ SSH-ის გარეშე. ეს გავრცელებულია საჯარო სარკეებისთვის ან შიდა ქსელის სარეზერვო ასლებისთვის, სადაც SSH-ზე პირდაპირი წვდომა არ არის სასურველი ყველა კლიენტისთვის.

ტიპიური rsyncd.conf ფაილი შეიძლება ასე გამოიყურებოდეს:

# /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 10
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[my_share]
    path = /srv/rsync/data
    comment = My shared data
    read only = yes
    list = yes
    auth users = rsyncuser
    secrets file = /etc/rsyncd.secrets

დემონთან დასაკავშირებლად:

rsync -av rsyncuser@remote_host::my_share /path/to/local/destination/

გამტარუნარიანობის ლიმიტირება

შეგიძლიათ შეზღუდოთ გამტარუნარიანობა, რომელსაც rsync იყენებს გადაცემის დროს. ეს სასარგებლოა rsync-ის მიერ თქვენი ქსელის კავშირის გაჯერების თავიდან ასაცილებლად.

# ლიმიტი 100 KB/s
rsync -av --bwlimit=100 /path/to/source/ user@remote_host:/path/to/destination/

7. დასკვნა

rsync არის შეუცვლელი ინსტრუმენტი მათთვის, ვინც მართავს ფაილებს სხვადასხვა სისტემებს შორის. მისი ეფექტურობა, მოქნილობა და მდიდარი ფუნქციონალი მას შესაფერისს ხდის მრავალი ამოცანისთვის, მარტივი ფაილის კოპირებიდან რთულ სარეზერვო ასლების სტრატეგიებამდე და სისტემის მიგრაციებამდე. rsync-ის დაუფლება მნიშვნელოვნად გააუმჯობესებს თქვენს შესაძლებლობას ეფექტურად მართოთ მონაცემები.