Backup script
|
2005-07-19, 10:03 PM,
ارسال : #1
|
|||
|
|||
Backup script
سلام دوستان
هفته گذشته یک کار نصب و راه اندازی سرور دستم بود و لازم بود برای یک شرکت که حدودا ۲۰ تا کارمند داره یک سرور نصب کنم. شرکت قبلا یک سرور لینوکس به عنوان فایل سرور داشت ودر طرف client هم همهجور سیستم عاملی پیدا میشد ویندوز لینوکس و اپل بنابراین برای اشتراک گذاری هم از samba استفاده می کردند. حالا قرار بود که من بر روی یک سرور جدید که خریده بودند750 Dell PowerEdge یک سیستم جدید با سامبا ۳ نصب کنم و در ضمن کاری کنم که فایل های مربوط به پروژه ها هم خیلی با اطمینان بالا ذخیره و Backup بشه. حالا میخوام در اینجا براتون شرح بدم که چطوری انجام شد که شاید به درد شما هم بخوره. سرور دارای دو هارد دیسک SATA بود ولی بدون سخت افزار کنترلر سیستم RAID با استفاده از سیستم نرم افزاری مربوط به سیستم RAID و mdtool و تونستم کاری کنم که تمام فایل سیستم روی هارد دارای RAID-1 باشه و فایلها بطور هم زمان بر روی هر دو هارد نوشته بشن در واقع یک سیستم mirror کامل. خوب این کافی نبود و آنها می خواستند بدون پرداختن پول اضافی برای یک سیستم Backup یک سیستم اتوماتیک داشته باشند که هر شب بعد از پایان ساعت کاری از تمام فایل هایی روی سرور یک Backup تهیه کنه و روی یک سرور دیگه کپی کنه. اطلاعات لینوکسی که داشتم را جمع و جور کردن و شروع کردم به نوشتن یک اسکریپت که بتونه این کار را انجام بده. بعد از جستجو ها فراوان و پرسیدن از افراد مختلف در اینترنت موفق به تهیه این اسکریپت شدم و خواستم که اون را در اختیار شما ها هم قرار بدم با این امید که شما ها از اون سود ببرید و این اسکریپت را کاملتر کنید. - سرور اصلی اسمش رو گذاشتم Helium و سیستمی که قرار است روی اون Backup تهیه بشه اسمش هست Neon - در ابتدا از دایرکتوری که قرار است پشتیبان تهیه بشه یک فایل آرشیو tar.bz2 تهیه میشه و در یک دایرکتوری موقتی TEMP ذخیره میشه. - بعد با استفاده از scp این فایل آرشیو تهیه شده بر روی سیستم Backup کپی میشه. برای این که این کار بدون وارد کردن پسورد وارد بشه لازم است که کلید مربوط به سیستم Backup روی سرور کپی بشه. چگونگی این کار را در قسمت آخر توضیح میدم - بعد از کپی از این فایل یک md5 ویا اثر انگشت می گیرم و فایل اثر انگشت که خیلی کوچیک است رو به سیستم Backup کپی می کنم. - حالا این اثر انگشت را با فایلی که کپی کردم کنترل می کنم تا ببینم که فایل Backup درست کپی شده یا در طول کار کپی کردن که خیلی هم طول میکشه بدلیل مشکلات شبکه خراب شده . - بعد از موفقیت آمیز بودن کار چک کردن درواقع کار تمام است. اما اگر این کار هر شب انجام بشه بعد از چند وقت فضای هارد سیستم پشتیبان پر میشه. برای همین هم من یک اسکریپت کوچک دیگه نوشتم که فایل های روی سیستم پشتیبان را چک می کنه و جدیدترین ۷ فایل آخر را نگه می داره و بقیه را پاک می کنه. این عدد را شما می تونین به دلخواه تغییر بدین . - برای اجرا اسکریپت تمیز کاری بر روی Neon از روز سرور اصلی helium با استفاده از ssh به سیستم Neon وصل می شیشم و اون اسکریپ را اجرا می کنم - تمامی کارها در یک logfile مستند سازی میشه و در صورت که مشکلی بوجود آمده باشه بعدا میشه فهمید که از کجاست. - تنها اولین اسکریپت در cronjob مربوط به سرور اصلی قرار داده شده. - اگر در شبکه شما یک سیستم DNS فعال نیست بایستی بجای اسامی ماشین ها IP_Address آنها را وارد کنید. اسکریپت اصلی برای تهیه پشتبان بر روی ماشین Helium [ltr] کد : #!/bin/bash این هم اسکریپت مربوط به تمیز کاری بر روی سیستم Backup ویا اون سیستمی که من اسمش را گذاشتم Neon [ltr] کد : #!/bin/bash - چطور میشه بدون وارد کردن پسورد روی یک ماشین دیگه login کرد. بر روی ماشینی که می خواهین بر روش بدون پسورد login کنید این کار ها را انجام بدید [ltr] کد : ssh-keygen -t rsa - این روش تهیه Backup خیلی کم خرج است و روش بدی نیست ولی هر بار بایستی که تمامی فایل ها کپی بشن و کار زیادی از هارد دیسک می کشه. - روش دیگه استفاده از rsync هست . با استفاده از rsync میشد کاری کرد که هر فایلی که بر روی Helium هست بر روی Neon هم باشه و روزی یک بار کنترل بشه و در صورتی که فایلی اضافه و یا کم شده فقط تغییرات بروی Neon اعمال بشه. ولی بدیش این بود که نمیشد چندین Backup مربوط به روز های گذشته را داشت. البته باید بگم که این کار هم ممکن است و باید cronjon ها را بر روی زمان های مختلف تنظیم کرد تا عمل هماهنگ سازی به تر تیب روز های هفته انجام بشه. یک بدی دیگه rscny این بود که بایستی فایل ها بصورت باز و آرشیو نشده بر روی Neon قرار می گرفتند و من اینقدر فضای کافی نداشتم. و هر بار می بایستی فایل ها را برای انجام عمل هماهنگ سازی باز می کردم. شاید یکی از شما دوستان اسکریپتی با استفاده از rsync برای تهیه Backup بنویسه و در اختیار همه بذاره خوب همچین کاری را می شد با دوتا سیستم ویندوز با این امنیت ssh انجام داد؟ قربان شما کیا |
|||
2005-07-19, 10:31 PM,
ارسال : #2
|
|||
|
|||
Re: Backup script
kiat نویسنده :سلام دوستان خیلی جالب بود ، من شخصا استفاده کردم ، ولی دو تا نکته . کپی کردن کلید ها کار خیلی امنی نیست ، چون اگه یه سیستم شما کرک شه ، دومی هم از دست میره ، راه بهتر استفاده از یه جور Host Based Authentication بر اساس آدرس و صد البته کلید SSH باشه . نمیدونم این Helium چه پروسسوری داره ، ولی عموما استفاده از bz2 رو توصیه نمیکنم ، برای Neon شاید ۱۰ مگابایت با ۱۵ مگابایت خیلی فرق نکنه ولی روی Helium شاید باعث استفاده زیادی از پروسسور موقع سرویس دادن بشه . Wish you Were here ... |
|||
2005-07-19, 10:49 PM,
ارسال : #3
|
|||
|
|||
بعد از مدتها یک تاپیک عالی پیدا شد. مرسی کیا جان
|
|||
2005-07-19, 10:51 PM,
ارسال : #4
|
|||
|
|||
دست شما درد نکند،جالب بود و آموزنده
لطفا قبل از اينکه سؤالات خود را در انجمن مطرح کنيد،حتما قوانين انجمنها را مطالعه فرماييد. |
|||
2005-07-19, 10:57 PM,
ارسال : #5
|
|||
|
|||
خوب باید می نوشتم که این کار را یک کار بر معمولی انجام میده که اسمش هست backupuser و روی هر دو سیستم هم به همین نام است و
- هرگز نباید اجازه login کردن بدون پسورد برای root داد - سرور داخل زون سبز داخلی و پشت سر دیوار آتش قرار دارند - بهر حال شما باید از یک روشی استفاده کنین که بدون پسورد بازدن ssh بشه login کرد و کار ها را انجام داد در مورد استفاده از bz2 با ید بگم که اسکریپت ساعت 12 شب از خواب پا میشه و در حالی که تمام کارمندان تو خونه ها شون خوابیدن شروع به کار میکنه پس سرویسی و جود نداره و این پروسسور تنبل بجایی اینکه بگیره بخوابه میتونه یک کم کار کنه در ضمن فایل های backup من هر کدوم حدود 5.5 GB هستن زمان آرشیو کردنشون خیلی طوال میکشه حدودا یک ساعت این رو میتونم از logfile ها بخونم ولی حجم فایل ها برام خیلی مهم است چون او سیستم backup یک workstation قدیمی است با دوتا هارد 40 تفاوت gz , bz2 حدود 30% میشه باتوجه به ا ینکه فایلها اکثرا فایل های سورس بصورت نوشتاری هستن میرم در این مورد Host Based Authentication یک کم گو گل کنم مرسی |
|||
2005-07-19, 11:20 PM,
ارسال : #6
|
|||
|
|||
kiat نویسنده :خوب باید می نوشتم که این کار را یک کار بر معمولی انجام میده که اسمش هست backupuser و روی هر دو سیستم هم به همین نام است و Look for Rhosts RSA Authentication Wish you Were here ... |
|||
2005-07-20, 08:00 AM,
ارسال : #7
|
|||
|
|||
خیلی جالب بود! ولی با این حال من هم با Zoup در مورد bz2 موافقم!
البته چون سرور توی اینترنت نیست و باری روش در اون ساعت خاص اعمال نمیشه مشکلی نداره، در غیر اینصورت ممکنه باعث overload شدن سرور بشه! ضمنا آیا نمیشد که دایرکتوری بکاپ مقصد رو با nfs به اشتراک بگذارید و بعد از اتمام کپی unmount اش کنید؟ [ltr]Life *free = new Life(const long OpenSource);[/ltr] |
|||
2005-07-20, 12:57 PM,
ارسال : #8
|
|||
|
|||
برای استفاده از nfs لازم بود که دایرکتوری های روی سرور اصلی و یا روی سیستم پشتیبان با استفاده از nfs به اشتراک گذاشته بشه. یعنی میبایستی این دایرکتوری ها برای استفاده توسط یک سیستم برایIP-Address سیستم دیگه آزاد باشه. مشکل استفاده از nfs هم در همین است یعنی آزاد سازی برا یک IP دیگه. از آنجایی که هرکس دارای این IP باشه اجازه استفاده از این فایل ها است کار جالبی نبود. یعنی هر کدام از کارمندان میتونستن به کامیپوتر خودشون این IP را بدن و سپس فایل ها را mount کنن. مشکل ناامنی nfs هم در همین است.
ولی میشود با تنظیمات دیگه ای از nfs استفاده کرد. مثلا میشه که من یک دایرکتوری temp برروی سیستم پشتیبان درست کتم و این دایرکتوری را به اشتراک بذارم و بعد از انجام کار کپی کردن فایلها دایرکتوری temp را خالی کرده و فایلهای خودم را به جایی دیگری منتقل کنم که با nfs به اشتراک گذاشته نشده. مشکل دیگر استفاده از nfs انتقال داده ها در شبکه بصورت رمز گذاری نشده است یعنی کسی میتونه وسط راه پاکت های ارسالی را بدزده. البته این کار را میشد با استفاده از samba انجام داد ولی تنظیمات اون طولانی تر بود و میبایستی که ssl میشد. یک کار دیگری که در این مورد انجام دادم قرار دادن دو کارت شبکه گیگابیتی در هر دو سیستم و لینک کردن آنها با استفاده از یک کابل شبکه cross over بود و بعد به آنها IP مربوط به زون دیگری دادم که مثلا ۱۹۲.۱۶۸.۲۰.۱ و ۱۹۲.۱۶۸.۲۰.۲ این طوری کار انتقال اطاعات خیلی پر سرعت تر و امن تر بود و اطلاعات من لازم نبود که از طریق سویچ عمومی رد و بدل بشن بکه از طریق این کانال خصوصی. در این صورت میشد که از nfs استفاده کرد و لی باز هم همان کار کپی کردن با scp را ترجیح دادم. |
|||
2005-07-20, 01:35 PM,
ارسال : #9
|
|||
|
|||
خیلی تمیز و خوب! :-) فکر کنم با gpg هم رمزنگاریشون کنید دیگه فرایند حفاظت اطلاعات کامل میشه :-)
[ltr]Life *free = new Life(const long OpenSource);[/ltr] |
|||
2005-07-21, 08:23 AM,
ارسال : #10
|
|||
|
|||
استفاده از bzip2 روی سرور های خیلی قوی هم می تونه برای حجم های بالا باعث overload شدن بشه . ایده دوکارت شبکه مجزا بسیار جالب بود و ایده خیلی خوبی از کار در اومده تا حالا. البته من همیشه پشتیبان های افزایشی رو ترجیح میدم ولی در این مورد چون پیاده سازی خوبی داشته برای مورد های مشابه می تونه بسیار جالب باشد.
حالا که مبحث به این خوبی شد بد نیست اشاره ای هم به Bacula بکنیم. به خصوص برای محیط هایی که از چندین پلتفرم همزمان استفاده می کنند. |
|||
2005-07-21, 09:42 AM,
ارسال : #11
|
|||
|
|||
کیا جان دستت جدا درد نکنه.
برای من به شخصه جالب بود. اگر تهران بودی حتما باید می امدید و به جمع اموزشی ها می پیوستید و شبکه را هم به ما کمک می کردید. علی linux is a way to be free. i |
|||
|