anything-sync-daemon(1) anything-sync-daemon(1)

anything-sync-daemon - ایجاد پیوند نمادین و همگام‌سازی پوشه‌های مشخص‌شده توسط کاربر در حافظه RAM جهت کاهش فراخوانی‌های دیسک و افزایش سرعت سیستم

برنامه Anything-sync-daemon (به‌اختصار asd) یک شبه‌دیمن کوچک است که برای مدیریت پوشه‌های مشخص‌شده توسط کاربر (که از این پس مقصدهای همگام‌سازی یا sync targets نامیده می‌شوند) در tmpfs و همگام‌سازی دوره‌ای آن‌ها به دیسک فیزیکی (HDD/SSD) طراحی شده است. این فرآیند از طریق مرحله bind mount و استفاده نوآورانه از rsync برای حفظ همگام‌سازی میان نسخه درون tmpfs و پشتیبان‌های روی دیسک فیزیکی انجام می‌شود. علاوه بر این، asd دارای چندین قابلیت بازیابی پس از خرابی (crash-recovery) است.

اهداف طراحی asd:

  • تجربه کاربری کاملاً شفاف و بی‌دردسر.
  • کاهش استهلاک دیسک‌های فیزیکی (به‌ویژه SSDها).
  • سرعت بالا.

از آنجا که مقصدهای همگام‌سازی به tmpfs (دیسک رم) منتقل می‌شوند، حجم بالای عملیات ورودی/خروجی (I/O) ناشی از استفاده سیستم از آن‌ها نیز از دیسک فیزیکی به RAM هدایت می‌شود؛ در نتیجه استهلاک دیسک فیزیکی کاهش یافته و سرعت و پاسخ‌دهی سیستم بهبود می‌یابد.

فایل /etc/asd.conf حاوی تمام تنظیمات مدیریتی کاربر است. به صورت اختیاری می‌توان با تنظیم متغیر محیطی ASDCONF از فایل دیگری استفاده کرد.

نکته: تغییرات اعمال‌شده در /etc/asd.conf در زمان اجرای asd، تنها پس از راه‌اندازی مجدد asd از طریق سرویس init اعمال خواهند شد.

  • در حداقل حالت، مقصدهای همگام‌سازی را که باید توسط asd مدیریت شوند در آرایه WHATTOSYNC تعریف کنید. نحو دستور در ادامه آمده است.
  • به صورت اختیاری، محل tmpfs توزیع خود را در متغیر VOLATILE از حالت کامنت خارج و مشخص کنید.
  • به صورت اختیاری، استفاده از overlayfs را برای افزایش بیشتر سرعت همگام‌سازی و کاهش ردپای حافظه فعال کنید. این کار را در متغیر USE_OVERLAYFS انجام دهید. توجه داشته باشید که این گزینه مستلزم آن است که هسته شما برای استفاده از ماژول 'overlay' یا 'overlayfs' پیکربندی شده باشد. برای جزئیات بیشتر در مورد این ویژگی، بخش پرسش‌های متداول (FAQ) زیر را ببینید.
  • به صورت اختیاری، استفاده از اسنپ‌شات‌های بازیابی پس از خرابی را غیرفعال کنید. این کار را در متغیر USE_BACKUPS انجام دهید.
  • به صورت اختیاری، تعداد اسنپ‌شات‌های بازیابی پس از خرابی را که باید نگهداری شوند در متغیر BACKUP_LIMIT تعیین کنید.

*توجه داشته باشید که مقدار پیش‌فرض "/tmp" برای تنظیم VOLATILE به خوبی کار می‌کند. در صورت استفاده از bleachbit، آن را با سوییچ '--clean system.tmp' اجرا نکنید؛ در غیر این صورت یک فایل نقطه‌دار کلیدی (.foo) را از /tmp که asd برای ردیابی وضعیت همگام‌سازی به آن نیاز دارد حذف خواهید کرد. همچنین توجه داشته باشید که استفاده از مقدار "/dev/shm" تنها زمانی که کاربران گزینه overlayfs را فعال کنند، می‌تواند در ایجاد NAMESPACE در systemd مشکلاتی ایجاد کند.

مثال:

WHATTOSYNC=('/var/lib/monitorix' '/srv/http' '/foo/bar')
or
WHATTOSYNC=(
'/var/lib/monitorix'
'/srv/http'
'/foo/bar'
)

گزینه پیش‌نمایش را می‌توان فراخوانی کرد تا بر اساس ورودی‌های موجود در /etc/asd.conf دقیقاً به کاربر نشان دهد asd چه کاری انجام خواهد داد یا در حال انجام آن است، و همچنین اطلاعات مفیدی مانند اندازه پوشه‌ها، مسیرها و ایجاد هرگونه اسنپ‌شات بازیابی را چاپ کند.

$ asd p
Anything-sync-daemon on Arch Linux.
Systemd service is currently active.
Systemd resync service is currently active.
Overlayfs v23 is currently active.
Asd will manage the following per /run/asd.conf settings:
owner/group id:     root/0
target to manage:   /srv/http/serve
sync target:        /srv/http/.serve-backup_asd
tmpfs target:       /tmp/asd-root/srv/http/serve
dir size:           21M
overlayfs size:     15M
recovery dirs:      2 <- delete with the c option
 dir path/size:     /srv/http/.serve-backup_asd-crashrecovery-20141105_124948 (17M)
 dir path/size:     /srv/http/.serve-backup_asd-crashrecovery-20150124_062311 (21M)
owner/group id:     facade/100
target to manage:   /home/facade/logs
sync target:        /home/facade/.logs-backup_asd
tmpfs target:       /tmp/asd-facadey/home/facade/logs
dir size:           1.5M
overlayfs size:     480K
recovery dirs:      none

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

توجه داشته باشید که اگر مالکیت یک مقصد همگام‌سازی در اختیار ریشه (root) یا کاربر دیگری باشد و asd را برای پاک‌سازی فراخوانی کنید، بر اساس مجوزهای مقصدهای همگام‌سازی شما با خطاهایی روبرو خواهد شد.

$ asd c
Anything-sync-daemon on Arch Linux.
Deleting 2 crashrecovery dirs for sync target /srv/http/serve
 /srv/http/.serve-backup_asd-crashrecovery-20141105_124948
 /srv/http/.serve-backup_asd-crashrecovery-20150124_062311

هر دو فایل سرویس و تایمر systemd ارائه شده‌اند و باید برای شروع یا توقف asd استفاده شوند.

نقش تایمر، به‌روزرسانی نسخه‌های موجود در tmpfs به دیسک است. این عمل به‌طور پیش‌فرض یک‌بار در هر ساعت رخ می‌دهد. تایمر به‌صورت خودکار همراه با asd.service آغاز می‌شود.

# systemctl [option] asd
گزینه‌های موجود: start stop enable disable

برای توزیع‌هایی که از systemd استفاده نمی‌کنند، باید از اسکریپت init دیگری برای مدیریت دیمن استفاده شود. نمونه‌هایی ارائه شده‌اند و عملکرد آن‌ها با Upstart تایید شده است.

توجه داشته باشید که برای این سیستم‌های init، اسکریپت کرون ارائه‌شده (نصب‌شده در /etc/cron.hourly) گزینه resync را برای همگام نگه داشتن نسخه‌های tmpfs اجرا می‌کند. البته برای این منظور، سیستم مقصد باید cron را به صورت نصب‌شده و فعال داشته باشد.

در حال حاضر، توزیع‌های زیر به طور رسمی پشتیبانی می‌شوند، اما دلیلی وجود ندارد که تصور شود asd روی توزیع‌های دیگر اجرا نمی‌شود:

•
Arch Linux

پرسش ۱: حالت overlayfs چیست؟

پاسخ ۱: فایل‌سیستم Overlayfs یک یونیون فایل‌سیستم ساده است که از نسخه ۳.۱۸.۰ وارد هسته اصلی لینوکس شد. از نسخه ۵.۵۴ برنامه asd، می‌توان از overlayfs برای کاهش مصرف حافظه فضای tmpfs در asd و افزایش سرعت عملیات همگام‌سازی و لغو همگام‌سازی (sync و unsync) استفاده کرد. سازوکار کارآمد آن بدین‌صورت است که سوار کردن overlay به جای کل مقصد همگام‌سازی، تنها داده‌هایی را که تغییر کرده‌اند می‌نویسد. مثال بخش حالت پیش‌نمایش در بالا را ببینید. همان ویژگی‌های بازیابی که asd در حالت پیش‌فرض استفاده می‌کند، هنگام اجرا در حالت overlayfs نیز فعال هستند. حالت overlayfs با خارج کردن USE_OVERLAYFS= از حالت کامنت در /etc/asd.conf و سپس راه‌اندازی مجدد دیمن فعال می‌شود.

چندین نسخه از overlayfs در توزیع‌های گوناگون برای هسته لینوکس موجود است. نسخه‌های ۲۲ و پایین‌تر دارای ماژولی به نام 'overlayfs' هستند، در حالی که نسخه‌های جدیدتر (۲۳ و بالاتر) دارای ماژولی به نام 'overlay' می‌باشند (به نبود پسوند 'fs' در نسخه جدیدتر دقت کنید). برنامه asd در صورتی که هسته برای استفاده از یکی از آن‌ها پیکربندی شده باشد، به طور خودکار نسخه موجود overlayfs را شناسایی می‌کند.

مثال بخش «حالت پیش‌نمایش» در بالا را مشاهده کنید که سیستمی را با استفاده از overlayfs برای نشان دادن میزان صرفه‌جویی در حافظه نشان می‌دهد. به گزارش "overlayfs size" در مقایسه با گزارش کل "dir size" برای هر مقصد همگام‌سازی توجه کنید. به یاد داشته باشید که این اعداد بسته به میزان داده نوشته‌شده در مقصد همگام‌سازی تغییر خواهند کرد، اما در حالت‌های متداول، اندازه overlayfs همیشه کمتر از اندازه پوشه خواهد بود.

پرسش ۲: چرا پوشه‌های ".foo-backup_asd" و ".foo-backup_asd-old" را مشاهده می‌کنم؟

پاسخ ۲: شیوه کار فرآیند پشتیبان‌گیری asd بدین صورت است که یک کلون با پیوند سخت (hard link) از پوشه اصلی ایجاد می‌کند؛ این مورد با نام .foo-backup_asd-old شناخته می‌شود. پوشه دیگر یعنی .foo-backup_asd صرفاً یک اتصال bind mount به پیوند پوشه اصلی است که برای دسترسی به محتویات پوشه اصلی جهت مقاصد لایه‌بندی overlay استفاده می‌شود.

پرسش ۳: سیستم من دچار خرابی (crash) شد و asd تغییرات را همگام نکرد. چه باید بکنم؟

پاسخ ۳: «آخرین نسخه سالم» پشتیبان مقصدهای همگام‌سازی شما بدون مشکل هنوز روی سیستم‌فایل شما باقی مانده است. پس از راه‌اندازی مجدد asd (مثلاً هنگام راه‌اندازی مجدد سیستم)، بررسی می‌شود که آیا خروج asd در وضعیتی آسیب‌دیده رخ داده است یا خیر. در صورت تشخیص این وضعیت، asd پیش از چرخاندن و بازگرداندن «آخرین نسخه سالم» به جای اصلی، یک اسنپ‌شات از آن تهیه می‌کند. توجه داشته باشید از آنجا که asd تلاش می‌کند مصرف دیسک را کاهش دهد، هرگز محتوای کامل پوشه را کپی نمی‌کند و صرفاً از پیوندهای سخت به فایل‌های پیشین بهره می‌برد. در مرحله rsync، فایل‌های جدیدی می‌سازد تا هاردلینک‌های قبلی دست‌نخورده باقی بمانند. بنابراین تلاش برای تغییر دادن پوشه در زمانی که asd در حال پشتیبان‌گیری است می‌تواند پوشه را در وضعیتی آسیب‌دیده رها کند.

پرسش ۴: این اسنپ‌شات را در کجا می‌توانم بیابم؟

پاسخ ۴: این اسنپ‌شات را در همان پوشه مقصد همگام‌سازی خواهید یافت و حاوی یک برچسب تاریخ و زمان است که به زمان انجام بازیابی اشاره دارد. برای نمونه، اسنپ‌شات مربوط به /foo/bar به صورت /foo/.bar-backup_asd-crashrecovery-20141221_070112.tar.zstd خواهد بود (البته پسوند تاریخ و زمان برای شما متفاوت است).

پرسش ۵: چگونه می‌توانم اسنپ‌شات را بازگردانی کنم؟

پاسخ ۵: این مراحل را دنبال کنید:

1.
سرویس asd را متوقف کنید.
2.
بررسی و اطمینان حاصل کنید که پوشه‌های ایجادشده توسط asd وجود ندارند. اگر وجود دارند، asd به دلایل دیگری به درستی متوقف نشده است.
3.
نسخه نامناسب مقصد همگام‌سازی را به یک نسخه پشتیبان منتقل کنید (هیچ‌چیز را کورکورانه حذف نکنید).
4.
فایل فشرده اسنپ‌شات را در مقصد همگام‌سازی مورد نظر بازگشایی (untar) کنید.

مثال با استفاده از /foo/bar:

1.
cd /foo
1.
mv bar bar-bad
2.
tar -xvf .bar-backup_asd-crashrecovery-20141221_070112.tar.zstd

در این مرحله، بررسی کنید که همه‌چیز در مورد داده‌ها در /foo/bar سالم باشد و در صورت مساعد بودن اوضاع، حذف اسنپ‌شات خطری ندارد.

پرسش ۶: آیا asd می‌تواند اسنپ‌شات‌ها را به طور خودکار حذف کند؟

پاسخ ۶: بله، asd را با سوییچ "clean" اجرا کنید تا اسنپ‌شات‌ها حذف شوند.

کاربرانی که مایل به مشارکت در توسعه این کد هستند، می‌توانند آن را فورک کرده و درخواست ادغام (pull request) ارسال نمایند. کد منبع به صورت آزاد در صفحه پروژه که در ادامه پیوند داده شده در دسترس است.

اشکالی پیدا کرده‌اید؟ لطفاً در صفحه پروژه که در ادامه پیوند داده شده یک issue باز کنید.

•
در حال حاضر، asd نمی‌تواند فایل‌های باز را روی مقصد همگام‌سازی مدیریت کند؛ بنابراین اگر فرآیندی که متوقف شده است فایلی را در آنجا باز نگه داشته باشد، ممکن است مشکل‌ساز شود.

graysky (graysky AT archlinux DOT us)

Manorit Chawdhry (manorit2001@gmail.com)

26 November 2016