نحوه بک‌آپ گرفتن کامل از سیستم با rsync

در این مقاله می‌خواهیم با استفاده از دستور rsync تمامی مسیر / بجر چند فولدر خاص را منتقل کنیم. این روش نسبت به روش کپی کردن دیسک که با دستور dd صورت می‌گیرد بسیار مناسب‌تر است، زیرا اجازه می‌دهد پارتیشن‌ها و فایل سیستم‌های متفاوت و سایزهای متفاوت دیسک بهره‌مند شویم. همچنین از روش کپی کردن cp –a بهتر است زیرا کنترل بیشتری بر روی سطوح دسترسی، صفات و Access Control Lists و extended attributes به ما می‌دهد.
تمامی روش‌های فوق برای کپی کردن یک سیستم در حال اجرا قابل استفاده است اما فایل‌هایی که در این مدت تغییر می‌کند ممکن است منتقل بشوند یا نشوند. که این مورد برای برخی از نرم‌افزارهایی که با فایل‌های تغییر داده کار می‌کنند ممکن است مشکلی بوجود بیاورند. این روش همچنین برای مهاجرت از یک هارد دیسک به هارد دیسک دیگر و یا از یک سیستم عامل به سیستم عامل دیگر مناسب است.

با یک تک دستور:

دستور زیر را تحت یک کاربر root اجرا کنید تا مطمئن شوید rsync به تمامی فایل‌های موجود و فایل‌های سیستمی می‌تواند دسترسی داشته باشد و مالکیت آنها را حفظ کند.

# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder

با استفاده از سوئیچ aAX– این تنظیمات را انجام می‌دهیم که تمامی فایل‌ها در قالب فشرده شده به‌صورتی‌که تمامی لینک‌های نمادین فایل‌ها به حالت آرشیو منتقل می‌شوند. اطمینان داشته باشید که لینک‌های نمادین، دستگاه‌ها، سطوح دسترسی‌ها و مالکیت‌ها، تغییرات زمانی، ACL ها و ویژگی‌های توسعه تماما حفظ می‌شوند (با در نظر گرفتن این‌که سیستم عامل مقصد از این موارد پشتیبانی می‌کند).
سوئیج exclude- این اجازه را به شما می‌دهد تا مسیرهای مشخصی را نادیده بگیرید. برای مثال محتوای پوشه‌های dev, /proc, /sys, /tmp, /run در دستور فوق حذف شده‌اند. زیرا پوشه‌ها در هنگام بوت شدن سیستم لود می‌شوند (هرچند که آنها حقیقتا ساخته نمی‌شوند). مسیر /lost+found یک مسیر مخصوص فایل سیستم است.

نکته:
اگر تمایل به بکاپ گرفتن از سیستم‌تان را در مسیری غیر از /mnt یا /media را دارید مطمئن شوید که آن‌ها در مسیر exclude وجود داشته باشند در غیر این‌صورت یک چرخه بی‌نهایت ایجاد خواهید کرد.
اگر مسیرهای مشخصی را در سیستم خود mount کرده‌اید، آنها را نیز باید از لیست Bound خود حذف کنید چرا که فقط لازم است یکبار محتوای آن‌ها کپی شود.
اگر از فایل swap هم استفاده می‌کنید اطمینان حاصل کنید که آن فایل‌ها در لیست استثناها باشند.
چنان‌چه بخواهید مسیر /home/ را منتقل کنید عموما این پوشه اطلاعات بیشتری به نسبت پوشه‌های سیستمی دارد. استثنا کردن یک تعداد از فایل‌های غیر نیاز مانند /home/*/.thumbnails/*, /home/*/.cache/mozilla/*, /home/*/.cache/chromium/*, /home/*/.local/share/Trash/* به شما کمک می‌کند که فضای کمتری اشغال کنید و اطلاعات مورد نیاز را منتقل نکنید که این مورد بسته به نرم‌افزارهای روی سستم ممکن است متفاوت باشد.
شما همچنین می‌توانید دستورات و سوئیچ‌های بیشتری را به rsync اضافه کنید. (جهت مشاهده لیست کامل این دستورات man rsync را کلیک کنید):
اگر از تعداد زیادی hardlink استفاده می‌کنید حتما دستور H- را اضافه کنید. این دستور به صورت پیش‌فرض به دلیل مصرف بالای حافظه رم غیرفعال است هرچند که در اکثر سیتسم‌های جدید مشکلی بوجود نمی‌آورد. خیلی از مسیرهای Hardlink در پوشه /usr/ قرار دارند.
ممکن است تمایل داشته باشد دستور –delete را به دستور اصلی خود اضافه کنید، چنان‌چه می‌خواهید چندین بار این دستور را بر روی پوشه بکاپ خود اجرا کنید. این سوئیچ به شما این اطمینان را می‌دهد مسیرها هیچگاه بصورت /* نشوند. این مورد فقط بر روی فایل‌هایی که درون زیر پوشه‌های پوشه اصلی وجود دارند اتفاق می‌افتد اما بر روی فایل‌های موجود در پوشه اصلی اثری ندارد.
اگر از فایل‌هایی که بصورت هارد مجازی استفاده می‌شوند مانند virtual disks ، Docker images و مشابه آن شما باید دستور S- را استفاده کنید.
سوئیچ numeric-ids– این اجازه را به شما می‌دهد که ارتباط بین نام کاربری و نام گروه‌ها را غیرفعال کنید و به جای آنها از شناسه گروه‌ها و کابران برای انتقال استفاده کنید. این روش به شما این اطمینان را می‌دهد که در صورت انتقال بر روی SSH فایل سیتسم فعال شما بتواند به سیستم دیگری منتقل شود.
استفاده از سوئیچ info=progress2 — به جای v- پروسه و سرعت انتقال کپی کردن اطلاعات را به شما نشان می‌دهد.
اگر نیاز داشتید که بکاپ خود را بازیابی کنید از همان دستور rsync که در ابتدا استفاده کردید به کار ببرید فقط منبع و مقصد را باید معکوس نمائید.

نیازمندی‌های بوت شدن:

داشتن یک نسخه پشتیبان با قابلیت بوت شدن می‌تواند در مواقعی که سیستم خراب می‌شود یا پروسه آپدیت سیستم شما باعث خرابی سیستم‌تان می‌شود می‌تواند کاربردی باشد. این بکاپ همچنین به شما این اجازه را می‌دهد که شما بتوانید یک بستر تستی با مخازن تستی در اختیار داشته باشید و قبل از بروز رسانی سیستم اصلی خود، بروز رسانی را بر روی این سیستم تست نمائید. اگر شما فایل‌های سیستمی را در پوشه‌ها یا پارتیشن‌های متفاوتی منتقل کرده‌اید و می‌خواهید آنها را بوت کنید این روش به راحتی آپدیت کردن فایل /etc/fstab بر روی فایل تنظیمات bootloader خود است. که به راحتی با Edit کردن این فایل می‌توانید این کار را انجام دهید. در ادامه این تصور را داریم که شما به صورت کامل سیستم خود را بکاپ گرفته‌اید و بر روی یک هارد، یک درایو و یا یک پارتیشن دیگر آنها را بازیابی کرده‌اید و سیستم بوت فعلی شما به درستی کار می‌کند و می‌خواهید که از روی بکاپ نیز بوت شما به درستی کار کند.

به‌روزرسانی fstab:

پس از انتقال اطلاعات قبل از اینکه سیستم خود را Restart نمائید فایل fstab را باز کنید و تمام محتوای آن را حذف کنید و یک رکود پارتیشن بکاپ را مانند نمونه زیر در سیستم اضافه کنید.

/dev/sdaX / ext4 defaults 0 1

به خاطر داشته باشید که شما باید مسیر صحیح و فایل سیستم صحیح را در مورد نمونه فوق مطابق نیاز خود اصلاح کنید.

به‌روزرسانی فایل تنظیمات bootloader ها:

در syslinux تنها کاری که لازم است این است که یک کپی از رکورد مورد نظر تهیه کرده و فقط مسیر درایو یا پارتیشن را تغییر دهید.

نکته: به جای ویرایش syslinux.cfg، شما می‌توانید در زمان بوت به صورت موقت منو را ویرایش کنید. وقتی که منو نشان داده می‌شود کلید تب را فشار دهید و ورودی‌های مربوطه را تغییر دهید. پارتیش‌ها از یک و درایوها از صفر شمارش می‌شوند.

برای Grub توصیه می‌شود که به صورت خودکار فایل‌های تنظیمات را ایجاد کنید. اگر نیاز دارید که تمامی فایل‌های Grub را در مسیری به غیر از /boot مانند مسیر /mnt/newroot/boot ، از دستور –boot-directory flag استفاده کنید.
همچنین اطمینان حاصل کنید که ردیف درج شده در /boot/grub/grub.cfg شناسه هارد دیسک (UUID) با پارتیشن جدید همخوانی دارد در غیر این‌صورت سیستم همچنان از سیستم قدیمی بوت می‌شود. با استفاده از دستور زیر می‌توانید UUID هر پارتیشن را پیدا کنید:

# lsblk -no NAME,UUID /dev/sdb3

پس از جابجا کردن پارتیشن مورد نظر خود برای مشاهده کردن UUID هایی که Grub می‌تواند از روی آن‌ها بوت کند دستور زیر را استفاده کنید.

# grep UUID= /boot/grub/grub.cfg

اولین Boot:

تمامی مسیرهای موقتی حذف شده و پوشه‌هایی که در مسیر / خالی بودند با اطلاعات جدید پر می‌شوند. حالا شما می‌توانید با ویرایش کردن مجدد فایل /etc/fstab مسیرهای مورد و پارتیشه‌ها و mount point نظر خود را مجدد ایجاد نمائید.