پشتیبان‌گیری با rsync, cron, dropbox

·

4 min read

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

ولی نکته این‌جاست که با این کار مهم‌ترین مزیت سیستم‌های تحت وب را از دست داده‌ام. چطور؟ اول این که قابلیت انتقال این فایل‌های مهم را از دست داده‌ام و ثانیا این که نمی‌توانم ازشان یک backup درست درمان داشته باشم! نمی‌توانم؟ خوب دروغ گفتم‌، قرار است در نگاه اول این‌طور به نظر برسد! با چند ابزار ساده و به درد بخور لینوکسی، کمی هم چاشنی Dropbox ‌، هم می‌شود قابلیت انتقال را داشت و هم backup!

Dropbox را نصب کنید

خوشبختانه dropbox یک نرم‌افزار متن‌باز GPL‌ایه خوب برای لینوکس دارد که قابلیت Sync کردن فایل‌ها با اکانت dropbox‌مان را بهمان می‌دهد. آن را متناسب با توزیع‌تان پیدا و نصب کنید. مثلا من از این SlackBuild استفاده کردم.

بعد از نصب احتمالا اگر خودتان دستکاری‌اش نکرده باشید ‎~/Dropbox پوشه‌ای است که قرار است با اکانت‌تان Sync شود. من آن را در مسیر دیگری قرار دادم. شما هم می‌توانید بسته به نیاز‌تان مسیر بهتری را انتخاب کنید. هر چه باشد فایل‌های مهمی تویش است‌، خوبیت ندارد همین‌طوری توی چشم باشد که ;-)

برای اجرای خودکار این برنامه در هنگام ورود به سیستم کافیست دستور dropboxd را در هنگام ورود به محیط‌کار‌تان اجرا کنید. یعنی یا آن را به فایل ‎~/.xinitrc تان اضافه کنید. یا مثل من بگذارید توی تنظیمات i3 که اجرا شود. روش‌های دیگری هم هست‌، ولی همین یکی فکر کنم کفایت کند‌!

اسکریپت backup

حالا که تنها کافیست فایل‌های مهم‌مان را درون یک پوشه بریزیم تا خود به خود روی Dropbox کپی شود‌، یک اسکریپت می‌خواهیم که این کار را به نحو مناسبی برای‌مان انجام دهد. عملا کپی (cp) کردن فایل جواب مساله‌مان نیست. چطور؟ خوب ممکن است بخواهیم فایل‌مان را تغییر دهیم یا چه می‌دانم‌، فایل خاصی به دایرکتوری اضافه کنیم. این است که دوست قدیمی‌مان rsync را صدا می‌زنیم. اسکریپت من یک هم‌چین چیزی از آب در آمد:

rsync -a -v ~/.pwsafe* ~/Workspace/Dropbox/safe
rsync -r -v ~/Workspace/org ~/Workspace/Dropbox

سر راست است این‌طور نیست؟ فعلا شروع کار است‌، احتمالا در آینده عملش طولانی‌تر هم می‌شود‌، ولی احتمالا باز هم به همین سادگی‌ست. حالا کافیست هر بار آن را اجرا کنم تا فایل‌ها خیلی تمیز کپی شوند داخل پوشهٔ dropbox ام و برنامهٔ dropbox آن را برایم بفرستد روی Cloud!

اجرای خود‌کار اسکریپت

الان هم اسکریپت‌مان خوب کار می‌کند و هم پوشهٔ dropbox فایل‌ها را خیلی راحت روی Cloud می‌فرستد. ولی هنوز یک ضعف وجود دارد. این که هر بار باید خودم یادم باشد که اسکریپت را اجرا کنم. خوب با این حافظهٔ من‌، می‌دانم که کل این پروسهٔ backup‌گیری با شکست مواجه می‌شود. اولین انتخابم این است که مثلا کاری کنم که موقع خاموش‌کردن سیستم این اسکریپت اجرا شود که چندان عقلانی به نظر نمی‌رسد! به هر حال اینترنت ماست دیگر‌! همیشه که سر حال نیست.

این است که به سراغ آن یکی دوست قدیمی‌مان می‌رویم‌، cron! وظیفهٔ این دوست‌مان این است که یک دستوری را بگیرد و به طبق زمان‌بندی خاصی اجرایش کند. اگر درست نمی‌شناسیدش کافیست یک سری به manpage‌اش بزنید و یا این پست cyberciti را بخوانید.

برای اضافه‌کردن یک job جدید‌، کافیست دستور crontab -e را وارد کنیم. خودش فایل را باز می‌کند و نوبت ویرایش شما می‌رسد. اما قبل از آن بهتر است که تعیین کنید که کدام ویرایش‌گر برای این کار استفاده شود. خودش به صورت پیش‌فرض از vi استفاده می‌کند که من دوستش ندارم. این است که با گذاشتن export EDITOR=vim داخل ‎~/.zshrc‌ام بهش می‌گویم که از vim استفاده کند که بسیار قابل تحمل‌تر است.

حالا خط زیر را به عنوان job اضافه می‌کنم.

@hourly ID=backup-hourly /home/shahin/Workspace/bin/dropbackup.sh > /home/shahin/.cronstatus

یعنی هر ساعت (‎@hourly) دستور dropbackup.sh را اجرا کن و خروجی‌اش را جای ایمیل کردن برایم (ایمیل داخل خود سیستم منظورم است) آن را درون فایل ‎.cronstatus ذخیره کن. به همین راحتی ;-)

ویرایش اول: تگ ID حتما باید در دستور وجود داشته باشد‌، در غیر این صورت دستور به درستی عمل نمی‌کند.