rsync روی VPN: کدام سمت منبع حقیقت است؟
تونل به شما مسیر میدهد، نه سیاست ادغام. نسخه مرجع را انتخاب کنید، نسخه یکطرفه را پیشنمایش بگیرید و سپس جداگانه تصمیم بگیرید که آیا حذفها منتقل میشوند.
دو سرور، یک VPN، یک دایرکتوری که باید در هر دو جا وجود داشته باشد، و دستوری که اجرای آن آسان و بازگرداندنش دشوار است. پیش از تایپ آن، تصمیم بگیرید کدام نسخه مرجع است، زیرا هر پرسش بعدی درباره rsync به این پاسخ بستگی دارد. یک نسخه یکطرفه، یک پوشه کاری مشترک و یک بایگانی نسخهدار به قواعد متفاوتی برای ویرایشها و حذفها نیاز دارند. تونل مسیر را فراهم میکند و درباره هیچکدام از اینها نظری ندارد.
پیش از تایپ دستور تصمیم بگیرید کدام نسخه برنده است
جهت را در یک جمله بنویسید، همراه با نام میزبان و مسیر در هر سمت، و تأیید کسی را بگیرید که دادهها از اوست. در این راهنما منبع /srv/publish/ است و مقصد حسابی روی fileserver.example است که فقط اجازه نوشتن در /srv/mirror/ را دارد.
پیش از کپی، واقعیتهای انتقال را تأیید کنید: کلید میزبان SSH تأیید شده است، حساب مقصد میتواند در ناحیه تکثیر بنویسد و جای دیگری نه، و هر دو میزبان نسخههای سازگار rsync دارند. این پیششرطها مانع میشوند یک خطای کوچک برنامهریزی به حادثه مجوزها تبدیل شود. همچنین میگویند وقتی چیزی اشتباه پیش برود، کدام حساب در گزارشهای مقصد دیده میشود.
نسخه را پیشنمایش بگیرید و فهرست تفصیلی را بخوانید
کپی را ابتدا با پرچم پیشنمایش اجرا کنید و خروجی را نگه دارید. تغییرات تفصیلی میگویند بر سر هر مسیر چه میآید، که بسیار سودمندتر از خلاصه پایان کار پس از واقعیت است. خروجی را در سابقه تغییرات بگذارید تا اجرای بعدی چیزی برای مقایسه داشته باشد.
rsync -rt --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/
اسلش پایانی مهم است. در سمت منبع یعنی محتوای آن دایرکتوری، در حالی که حذف آن یک سطح دایرکتوری اضافه میکند که به نام منبع نامگذاری میشود. راهنمای rsync هر دو شکل را همراه با پرچمهای حفظ فراداده مستند میکند، و مجموعه گزینههایی که نیاز دارید به دادهها بستگی دارد نه به عادت.
هر خط را در برابر مقصدی که در نظر داشتید بخوانید. برداشتن پرچم پیشنمایش کپی را انجام میدهد و میتواند فایلها را بازنویسی کند، و بدون گزینه حذف، فایلهای اضافی که از قبل در مقصد هستند همانجا میمانند. این تنها زمانی پیشفرض ایمن است که واقعاً تصمیم گرفته باشید ماندن فایلهای کهنه قابل قبول است. اگر پاسخ منفی است، تصمیم حذفِ پایینتر باید گرفته شود، نه پرچم اضافهای که در این دستور بپاشید.
سپس تصمیم بگیرید آیا حذفها منتقل میشوند
تبدیل مقصد به آینه تصمیم دومی است، نه اصلاحی در تصمیم اول. آن را جداگانه پیشنمایش بگیرید، با پرچم حذف اضافهشده و هیچ چیز دیگری تغییر نکرده، تا تفاوت در فهرست کاملاً به همان تصمیم تعلق داشته باشد.
rsync -rt --delete --dry-run --itemize-changes -e ssh -- /srv/publish/ [email protected]:/srv/mirror/
حذفها فایلهای اضافی را در سمت گیرنده در محدوده همگامشده برمیدارند، و به همین دلیل یک مسیر منبع اشتباه، یک دایرکتوری وصلنشده یا فیلتری که بیش از حد موردنظر حذف میکند میتوانند یک اجرای مخرب را شبیه آینهای تمیز نشان دهند. فهرست پیشنمایش تنها جایی است که این تفاوت پیش از گران شدن قابل مشاهده میشود. هر جا دادهها آن را توجیه میکنند یک نسخه بازیابی مستقل نگه دارید، و به یاد داشته باشید که آینه یک حذف تصادفی را وفادارانه بازتولید میکند نه اینکه تاریخچه را حفظ کند.
پیشنمایش هیچ چیز را هم قفل نمیکند. مردم بین آزمایش و اجرای واقعی فایلها را ویرایش میکنند، و سیستمهای فایل نظر خودشان را دارند، پس اجرایی که تأیید میکنید و اجرایی که انجام میشود یک عملیات نیستند مگر اینکه هر دو درخت آرام باشند.
دو کار یکطرفه همگامسازی دوسویه نمیسازند
اجرای همان دستور در هر دو جهت رایجترین راه از دست دادن داده در این سناریو است. هر جهت طرف دیگر را مقصد میداند و با خوشحالی محتوای تازهتر را بازنویسی میکند، و حذفها به همان ترتیبی که زمانبندی فعال میشود آینه میشوند.
اگر کاربران باید هر دو نسخه را ویرایش کنند، این تصمیم دیگری در سطح محصول است: مدیریت تعارض، ردیابی حذف و ابزاری که برای آن مدل طراحی شده است. نزدیککردن آن با ترتیب زمانبندی همان راهی است که یک پوشه مشترک دو نسخه از هر سند پیدا میکند که هیچکس نمیتواند آشتی دهد. آن را صریح تصمیم بگیرید بهجای اینکه با دو ورودی cron و امید نزدیکش کنید.
فقط پس از نوشته شدن سیاست خودکار کنید
کار زمانبندیشده باید جهت، مسیرها، سیاست فراداده و تصمیم حذف تأییدشده را حمل کند. این پنج واقعیت را در خود پرونده کار بگذارید، نه در صفحه ویکی که مدیر بعدی شاید هرگز نخواند. از اجراهای همپوشان جلوگیری کنید، زیرا دو نسخه که همزمان روی یک درخت مینویسند وضعیتی میسازند که هیچکدام قصدش را نداشت.
وقتی منبع یک پایگاه داده زنده یا مجموعه داده چندفایلی دیگری است، ابتدا یک برونبری سازگار با برنامه یا یک عکس لحظهای هماهنگ بگیرید. پیمایش بازگشتی فایل تراکنش نیست، و نسخهای از مجموعه داده در حال تغییر سازگار نیست.
پایانها و شکستها را ثبت کنید و مجموعه داده را در مقصد بررسی کنید نه فقط کد خروج را. بازگرداندن VPN پس از قطعی اتصال را برمیگرداند؛ چیزی درباره تمام شدن آخرین کپی یا حل شدن ویرایشهای متعارض نمیگوید.