آموزش بکاپ‌گیری خودکار در لینوکس با rsync + cron

rsync و cron

بکاپ‌گیری درست مثل بیمه است، شاید هر روز به آن نیاز پیدا نکنید، اما در صورت بروز رویدادهایی چون حذف ناخواسته فایل‌، خرابی دیسک یا حمله باج‌افزاری، نبود آن می‌تواند همه‌چیز را نابود کند. برای همین، برنامه‌ریزی هوشمند برای بکاپ‌گیری خودکار در لینوکس اهمیت حیاتی پیدا می‌کند.

در این مطلب، به شما نشان می‌دهم که چگونه با استفاده از rsync و cron، بکاپ گیری افزایشی (Incremental Backup) را برنامه‌ریزی کنید. توضیح می‌دهم که بکاپ گیری افزایشی چیست، rsync چگونه در پشت صحنه کار می‌کند و چگونه کل فرآیند را با cron خودکار کنید.

بکاپ‌گیری افزایشی چیست؟

بکاپ‌گیری افزایشی (Incremental Backup) روشی است که در آن تنها از فایل‌هایی نسخه بکاپ تهیه می‌شود که از آخرین عملیات بکاپ‌گیری دچار تغییر شده باشند. در این شیوه، به جای کپی‌برداری کامل از تمامی داده‌ها در هر بار بکاپ‌گیری که می‌تواند زمان‌بر بوده و فضای ذخیره‌سازی زیادی را اشغال کند، تنها فایل‌های جدید یا ویرایش‌شده ذخیره می‌شوند.

به عنوان مثال، فرض کنید پوشه‌ای حاوی ۱۰۰۰۰ فایل دارید و در طول روز تنها ۲۰ فایل آن تغییر کرده است. در فرآیند بکاپ‌گیری افزایشی، ۹۹۸۰ فایل بدون تغییر نادیده گرفته می‌شود و تنها از همان ۲۰ فایل تغییر یافته نسخه بکاپ تهیه می‌شود. این رویکرد، روشی بسیار کارآمد و مناسب برای بکاپ‌گیری روزانه به شمار می‌آید.

چرا از rsync استفاده کنیم؟

rsync ابزاری قدرتمند و قابل‌اعتماد در سیستم‌عامل لینوکس است که برای کپی و همگام‌سازی فایل‌ها و دایرکتوری‌ها به کار می‌رود. آنچه این ابزار را متمایز می‌کند، قابلیت آن در انتقال و همگام‌سازی فقط تفاوت‌های موجود بین منبع و مقصد است، که موجب افزایش سرعت و کاهش مصرف منابع می‌شود.

rsync هم در محیط لوکال(انتقال بین پوشه‌های یک سیستم) و هم به‌صورت ریموت (از طریق پروتکل SSH به سرور دیگر) قابل استفاده است. این ابزار قادر است پرمیشن‌های فایل، تایم استمپ (Timestamp) و لینک نمادین (Symbolic Links) را حفظ کند و حتی امکان حذف فایل‌هایی را که در مقصد دیگر وجود ندارند، فراهم آورد. سرعت بالا، انعطاف‌پذیری و وجود پیشفرض آن در اکثر توزیع‌های لینوکس، rsync را به یکی از ابزارهای کلیدی مدیریت فایل در این سیستم‌عامل تبدیل کرده است.

اگر rsync نصب نشده باشد، می‌توانید آن را با موارد زیر دریافت کنید:

sudo apt install rsync # Debian/Ubuntu
sudo yum install rsync # CentOS/RHEL

نمونه بکاپ‌گیری خودکار در لینوکس

فرض کنید تعدادی فایل مهم در مسیر /home/hasan/documents/ ذخیره کرده‌اید و قصد دارید از آن‌ها در مسیر /backup/documents/ نسخه بکاپ تهیه کنید. برای این منظور، می‌توان یک شل اسکریپت(Shell Script) ساده ایجاد کرد که با استفاده از ابزار rsync، تنها فایل‌های تغییر یافته را به دایرکتوری backup منتقل کند.

پس از آماده‌سازی این اسکریپت، می‌توان آن را با بهره‌گیری از Cron زمان‌بندی کرد تا به‌صورت خودکار، هر روز راس ساعت ۲ بامداد اجرا شود. این روش، فرآیند بکاپ‌گیری را بدون نیاز به دخالت دستی و با صرف حداقل منابع، به‌طور منظم انجام می‌دهد.

مرحله ۱: نوشتن اسکریپت بکاپ‌گیری

ابتدا، بیایید یک اسکریپت shell برای انجام بکاپ‌گیری ایجاد کنیم.

sudo nano /usr/local/bin/rsync-backup.sh

اسکریپت زیر را در آن قرار دهید:

#!/bin/bash

SOURCE="/home/hasan/documents/"
DEST="/backup/documents/"
LOGFILE="/var/log/rsync-backup.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")

rsync -av --delete "$SOURCE" "$DEST" >> "$LOGFILE" 2>&1
echo "Backup completed at $DATE" >> "$LOGFILE"

این اسکریپت به rsync می‌گوید که فایل‌ها را از دایرکتوری منبع به مقصد همگام‌سازی کند. پرچم a- به آن می‌گوید که در حالت بایگانی اجرا شود و مجوزها و متادیتا را حفظ کند.

v- خروجی را طولانی می‌کند (بنابراین می‌توانیم آنچه را که اتفاق می‌افتد ثبت کنیم) و delete– اگر فایل‌ها دیگر در منبع وجود نداشته باشند، آنها را از بکاپ‌گیری حذف می‌کند. تمام خروجی در یک فایل لاگ در var/log/rsync-backup.log/ نوشته می‌شود تا بتوانیم بعدا بررسی کنیم که آیا مشکلی پیش آمده است یا خیر.

حالا اسکریپت را قابل اجرا کنید:

sudo chmod +x /usr/local/bin/rsync-backup.sh

مرحله ۲: اسکریپت را با Cron زمان‌بندی کنید

در مرحله بعد، باید مطمئن شویم که اسکریپت بکاپ‌گیری هر روز ساعت ۲:۰۰ بامداد به طور خودکار اجرا می‌شود، بنابراین باید cron job های خود را ویرایش کنید، تایپ کنید:

crontab -e

این خط را در پایین اضافه کنید:

۰ ۲ * * * /usr/local/bin/rsync-backup.sh

برای تایید اضافه شدن cron job خود:

crontab -l

مرحله ۳: تست تنظیمات بکاپ‌گیری

قبل از اینکه به سیستم اجازه دهید پشتیبان‌گیری‌ها را به طور خودکار اجرا کند، مهم است که اسکریپت را به صورت دستی آزمایش کنید تا مطمئن شوید همه چیز طبق انتظار کار می‌کند، که به شما کمک می‌کند قبل از اینکه cron آن را به صورت بی‌صدا در پس‌زمینه اجرا کند، هرگونه مشکل مسیر، خطای مجوز یا غلط املایی را تشخیص دهید.

ابتدا، اسکریپت بکاپ‌گیری را به صورت دستی اجرا کنید، که بلافاصله فرآیند بکاپ‌گیری را آغاز می‌کند و لیستی از فایل‌هایی که کپی یا رد می‌شوند را مشاهده خواهید کرد.

sudo /usr/local/bin/rsync-backup.sh

پس از اتمام اسکریپت، به دایرکتوری پشتیبان خود بروید و تأیید کنید که فایل‌ها به درستی کپی شده‌اند:

ls -lh /backup/documents/

حالا، فایل لاگ را بررسی کنید تا مطمئن شوید اسکریپت بدون خطا اجرا شده و زمان بکاپ‌گیری را ثبت کرده است:

cat /var/log/rsync-backup.log

باید خروجی مشابه این را ببینید:

sending incremental file list
./
file1.txt
folder2/
folder2/file2.pdf

Backup completed at 2025-06-16 14:00:01

این تایید می‌کند که اسکریپت نه تنها فایل‌ها را کپی کرده، بلکه رویداد را با یک مهر زمانی نیز ثبت کرده است.

مرحله ۴: ایجاد پشتیبان‌گیری‌های روزانه Snapshot

اگر می‌خواهید یک قدم جلوتر بروید و Snapshotهای روزانه از داده‌های خود را نگه دارید (به جای فقط یک پوشه پشتیبان)، می‌توانید از گزینه –link-dest در rsync استفاده کنید، که به شما امکان می‌دهد پشتیبان‌گیری‌های hard-linked ایجاد کنید که اساساً پوشه‌های جدیدی ایجاد می‌کنند که شبیه پشتیبان‌گیری‌های کامل هستند اما فقط از فضا برای فایل‌هایی که تغییر کرده‌اند استفاده می‌کنند.

در روز اول، بکاپ‌گیری کامل اولیه را ایجاد کنید:

rsync -a /home/hasan/documents/ /backup/daily.0/

در روز بعد، از پوشه روز قبل به عنوان مرجع برای ایجاد یک بکاپ‌گیری افزایشی استفاده کنید:

rsync -a --link-dest=/backup/daily.0/ /home/hasan/documents/ /backup/daily.1/

فایل‌هایی که تغییر نکرده‌اند hard-linked می‌شوند و در فضا صرفه‌جویی می‌کنند. حتی می‌توانید این پوشه‌ها را با استفاده از یک اسکریپت ساده که نام قدیمی‌ها را تغییر می‌دهد و هر روز یک Snapshot جدید ایجاد می‌کند، بچرخانید.

در اینجا یک اسکریپت چرخش پایه برای ۷ روز آمده است:

#!/bin/bash

rm -rf /backup/daily.7
mv /backup/daily.6 /backup/daily.7
mv /backup/daily.5 /backup/daily.6
mv /backup/daily.4 /backup/daily.5
mv /backup/daily.3 /backup/daily.4
mv /backup/daily.2 /backup/daily.3
mv /backup/daily.1 /backup/daily.2
mv /backup/daily.0 /backup/daily.1

rsync -a --delete --link-dest=/backup/daily.1 /home/hasan/documents/ /backup/daily.0/

شما می‌توانید این اسکریپت را با استفاده از cron، درست مانند اسکریپت بکاپ‌گیری پایه، زمان‌بندی کنید. به عنوان مثال، برای اجرای آن هر روز ساعت ۲ بامداد:

۰ ۲ * * * /usr/local/bin/daily-rsync-rotate.sh

نکته اضافی: بکاپ‌گیری در یک سرور از راه دور
اگر می‌خواهید از داده‌های خود در دستگاه دیگری (مانند یک سرور پشتیبان‌گیری) بکاپ‌گیری کنید، می‌توانید از rsync از طریق SSH استفاده کنید، اما مطمئن شوید که کلیدهای SSH برای ورود بدون رمز عبور تنظیم شده‌اند، سپس چیزی شبیه به این را اجرا کنید:

rsync -av -e ssh /home/hasan/documents/ hasan@backup-server:/backup/hasan/

می‌توانید دستور بالا را به اسکریپت خود اضافه کنید یا یک اسکریپت جداگانه فقط برای بکاپ‌گیری از راه دور ایجاد کنید.

خرید VPS لینوکس با دسترسی کامل SSH و منابع اختصاصی، مناسب برای برنامه‌نویسان، توسعه‌دهندگان و مدیران سایت در پارسدو فراهم است.

جمع‌بندی

شاید فرآیند بکاپ‌گیری خودکار در لینوکس چندان هیجان‌انگیز به نظر نرسد، اما از دست دادن داده‌ها بدون تردید تجربه‌ای ناخوشایند خواهد بود. با پیکربندی بکاپ‌گیری افزایشی به کمک rsync و cron، می‌توانید اطمینان داشته باشید که فایل‌های شما به‌صورت روزانه و منظم محافظت می‌شوند. این رویکرد، امنیت اطلاعات را تضمین کرده و از بروز خسارات ناشی از حذف یا خرابی ناخواسته داده‌ها جلوگیری می‌کند.

همیشه بکاپ خود را آزمایش کنید، مطمئن شوید که اسکریپت‌های شما کار می‌کنند و فراموش نکنید که هر از گاهی لاگ‌ها را بررسی کنید. اگر نیاز به بازیابی چیزی داشته باشید، خوشحال خواهید شد که این سیستم را دارید.

نوشتن نظر

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *