درود به همه دوستان
مدتی بود که تصمیم داشتم یک برنامه فشرده ساز برای کمودور 64 بنویسم، ولی به خاطر تنبلی، نوشتن برنامه را به آینده موکول می کردم. این هفته تصمیم گرفتم کار نوشتن برنامه را آغاز کنم، از بین الگوریتم های LZW و Huffman اولی را برای نوشتن برنامه انتخاب کردم. پیاده سازی الگوریتم LZW در زبان اسمبلی کار آسانی است چون تنها به ساختمان داده، آرایه نیاز دارد، ولی هافمن محتاج به مجموعه و درخت است. بعلاوه در عمل کدگزاری LZW یا حسابی(Arithmetic coding) قابلیت فشرده سازی بهتری را نسبت به هافمن ارائه می دهند. پس از تکمیل برنامه کد آن را در این وبلاگ و C64 Scene Database قرار خواهم داد.
چند سال پیش کل شماره های مجله BYTE را (که مطالب بسیار خوبی در زمینه الکترونیک و کامپیوتر داشت)، از طریق تورنت دانلود کردم و روی دی وی دی قرار دادم. امروز هوس کردم نگاهی به شماره های دهه 80 آن بیاندازم. متاسفانه قسمت عمده ای از آنها قابل خواندن نبودند. بدلیل اینکه مجله حجم زیادی داشت(حدود 32 گیگابایت)، و آن موقع هم تمهید خاصی برای این موارد نیاندیشیده بودم مجبور شدم فایل های ناقص را تک تک دوباره دانلود کنم. این کار مرا به فکر انداخت که این پست را به جای ادامه آموزش زبان اسمبلی به روشهای حفاظت از فایل ها و پوشه ها در برابر نقص سخت افزار، خطای نرم افزار،آلودگی و تخریب توسط ویروس و برنامه های بدجنس و نحوه بازیابی و ترمیم آن ها توسط نرم افزار MultiPar، اختصاص بدهم.
بهتر است فایل ها و پوشه ها را در یک پوشه اصلی قرار دهیم و سپس به کمک نرم افزار WinRAR آن را در یک فایل با پسوند RAR قرار دهیم.(روی پوشه با ماوس راست-کلیک می کنید و گزینه Add to archive را انتخاب کنید).
* Solid compression: در علم محاسبات به روشی برای فشرده کردن دادۀ چندین فایل اطلاق می گردد، که درآن کلیۀ فایل های فشرده نشده به شکل یک زنجیر به هم متصل شده اند و با آن مانند یک بلوک داده رفتار می شود.
قالب های فایل فشرده، اغلب دو جنبه فشرده سازی(ذخیره داده در یک فضای کوچک) و آرشیو کردن(ذخیره چند فایل و ابرداده(metadata) در یک فایل تکی) را به نمایش می گذارند، شخص می تواند اینها را به دو روش متعارف ترکیب کند.
* فایل ها را به طور جداگانه فشرده کند، و سپس آنها را در فایل تکی آرشیو کند.* آنها را در یک بلوک داده(جریان داده به هم پیوسته) قرار دهد، و سپس فشرده کند.
ترتیب مهم است(این عملیات خاصیت جابجایی ندارند) و دومی فشرده سازی یکپارچه(solid compression) نامیده می شود. زمانی که فایل ها مشابه اند(یا در اغلب موارد، قالب فایل شان یکجور باشد)، solid compression، فشرده سازی با نرخ خیلی بیشتری را ممکن می سازد. همچنین برای آرشیو کردن تعداد زیادی فایل با اندازه کم هم موثر است
نکته مهم: از این روش نباید، برای آرشیوهایی که به جهت پشتیبان گیری ساخته میشوند، استفاده کرد. اما برای کارهای روزه اشکالی ندارد(در صورت نیاز چک-باکس Create solid archive را تیک بزنید).
نکته:
قالب آرشیو RAR برای محافظت از داده ها در مقابل خطرات احتمالی از نوع مخصوصی از داده های مازاد(redundant data) به نام رکورد بازیابی استفاده می کند. وجود این رکورد موجب می شود آرشیو بزرگتر شود اما امکان تعمیر آرشیو صدمه دیده را در صورت خرابی قسمتی از دیسک و یا عوامل دیگر فراهم می کند(به شرطی که این آسیب ها خیلی شدید نباشند).می توانیم طول رکورد بازیافت را به شکل درصدی از اندازه آرشیو، در برنامه مشخص کنیم، رکورد بازیابی با طول بیشتر امکان تعمیر مناطق آسیب دیده بیشتر را به ما می دهد، اما بر اندازه آرشیو می افزاید و پردازش آنرا هم کند می کند، 3 تا 10 درصد اندازه آرشیو اصلی، معمولا یک انتخاب معقولانه ای است. به خاطر به خدمت گرفتن داده سربار،اندازه رکورد بازیافت نتیجه، به طور تقریبی با درصدی که کاربر معین کرده مطابقت می کند( برای فایل های آرشیو کوچکتر، تفاوت زیادتر است).
نکته:
رکورد بازیابی RAR نسخه 4، برپایه الگوریتم ساده XOR است، رکورد بازیابی RAR نسخه 4 متشکل از سکتورهای 512 بایتی است و حداکثر می
تواند حاوی 524288 سکتور باشد پس اندازه مفید و توانایی بازیافت داده اش به
256 مگابایت محدود می شود. اگر منطقه آسیب دیده پیوسته باشد، هر سکتور به بازیابی 512 بایت از اطلاعات آسیب دیده کمک میکند. در مواردی که چندین آسیب وجود داشته باشد این مقدار ممکن است کمتر شود.
رکورد بازیابی RAR نسخه 5، کد تصحیح خطای پیشرفته، Reed-Solomon را بکار می برد. توانایی تعمیر آسیب پیوسته در آن با نسخه 4 تقریبا برابر است(امکان بازیابی مقدار کمتری داده نسبت به طول رکورد را می دهد)، اما در مواردی که آسیب در مناطق متعددی وجود دارد، به طور چشمگیری نسبت به رکورد نسخه 4، موثرتر است. اندازه رکورد بازیابی RAR نسخۀ 5، می تواند به بزرگی خود آرشیو باشد.
* در برنامه WinRAR سه گزینه برای انتخاب قالب آرشیو دارید، بهترینش همانطور که در بالا توضیح دادم RAR5 است. برای انتخاب به تصویر سمت چپ نگاهی بیاندازید، محل انتخاب قالب آرشیو با رنگ آبی مشخص شده.
نکته:
هر دو رکورد نسخۀ 4و5 در صورتی خیلی موثر خواهند بود که موقعیت داده ها در آرشیو صدمه دیده جابجا نشود، اگر شما با استفاده از یک نرم افزار مخصوص، آرشیو را از یک رسانه آسیب دیده(مثلا دی وی دی خش دار یا هارد دارای سکتورهای بد)
کپی می کنید و شما قدرت انتخاب داشته باشید که، منطقۀ آسیب دیده را با صفر
پرکنید و یا آن را از فایل کپی بردارید، اولی را برگزینید، به دلیل اینکه مواضع داده اصلی، حفظ خواهند شد. اگر چه این دلخواه ترین حالت نیست اما رکورد نسخه 4و5 تلاش خواهند کرد که داده ها را تعمیر کنند حتی در مواردی که مقدار قابل قبولی داده در آرشیو درج(insert) و یا از آن پاک(cut) شده باشد(موقعیت داده ها تغییر کند). رکورد بازیابی نسخۀ 5 به طور خیلی موثرتری نسبت به نسخه 4، می تواند به آسیب های درج و برش رسیدگی کند.
مثال:
به ترتیبی که در بالا توضیح دادم یک آرشیو از فایل ها و پوشه های دلخواه درست کنید(قالب آرشیو را RAR5 انتخاب کنید)، Recovery Record را هم روی 10 درصد تنظیم کنید. با یک Hex editor ساده فایل آرشیو را باز کنید، قسمت هایی از آرشیو از جمله Header ،آن را دستکاری و برش(cut) نمائید و در نهایت آن را ذخیره کنید.
Header: در تکنولوژی اطلاعات به داده های مکملی گفته می شود که در ابتدای بلوک داده ای که ذخیره یا مخابره خواهند شد، قرار می گیرد. برای ساخت Header ضروری است که از یک سری مشخصات یا قالب که به طور واضح و غیر مبهم بیان شده اند، پیروی کنیم تا امکان تجزیه(Parsing) وجود داشته باشد. هدر فایل در قالب های فایل آرشیو، به عنوان اثرانگشت یا امضاء برای شناسایی قالب فایل و نرم افزار کاری، همخوان با آن، به خدمت گرفته می شود.
به علت اینکه قسمت ابتدایی آرشیو یا Header آسیب دیده است نرم افزار WinRAR قادر به شناسایی نوع آرشیو نیست و با دو بار کلیک روی نام فایل خطای the archive either unknown or damaged(آرشیو ناشناخته یا آسیب دیده است) را به ما یادآوری میکند.
*نحوه تعمیر فایل آسیب دیده:
برنامه WinRAR را اجرا کنید، با استفاده از لیست کشویی مسیر پوشه ای که فایل آرشیو آسیب دیده در آن قرار دارد، را به برنامه بدهید، سپس نام آرشیو را انتخاب کنید و در آخر دکمۀ تعمیر(Repair)، روی میله ابزار برنامه را کلیک کنید. در دیالوگی که باز می شود با استفاده از دکمه Browse یک مسیری تعیین کنید تا فایل تعمیر شده در آن قرار گیرد. چون هدر آرشیو آسیب دیده است برنامه قادر به شناسایی قالب فایل نیست. با استفاده از دکمه های رادیویی تعیین می کنیم که برنامه چه جوری با آرشیو آسیب دیده رفتار کند، به عنوان فایل RAR یا ZIP ؟. اولین گزینه را انتخاب می کنیم و دکمه OK را می زنیم. پس از بازیابی بلوک های آسیب دیده، یک فایل هم نام آرشیو آسیب دیده و با پیشوند .fixed ایجاد می گردد که آرشیو تعمیر شده است.
نکته:اگر آرشیو آسیب دیده حاوی رکورد بازیابی نباشد و یا اگر آرشیو به خاطر آسیب های عمده قابل بازیابی نباشد مرحلۀ دوم اجرا می شود، در طول این مرحله فقط ساختار آرشیو دوباره سازی خواهد شد و فایل هایی که صحت جمع کنترلی(checksum) شان رد شده است قابل بازیابی نیستند، اما هنوز هم امکان بازیابی فایلهای آسیب ندیده ای که به واسطۀ خرابی ساختار آرشیو قابل دسترس نیستند، وجود دارد(این غالبا برای آرشیوهایی از نوع غیر-یکپارچه مفید خواهد بود). وقتی مرحلۀ دوم تکمیل شد، آرشیو احیا شده، در فایلی هم نام با آرشیو صدمه دیده و پیشوند .rebuilt ذخیره خواهد شد.
Volumes(قسمت کردن به چندین مجلد):
برنامه WinRAR می تواند آرشیوی ایجاد کند که از چندین فایل(یا حجم) تشکیل شده است، برای اینکار کافی است که در مرحله ساخت آرشیو از لیست کشویی زیر عبارت Split to volumes ،یک مقدار انتخاب کنید، تا آرشیو به چندین فایل به آن اندازه تقسیم شود. امکان استفاده از اعداد دلبخواه هم وجود دارد اما دقت کنید که پس از ویرایش عدد، واحد آن را هم به درستی از لیست جلویی(size) انتخاب کنید. برای باز کردن آرشیوهای چند قسمتی باید روی اولین حجم (که نامش به رشته part1.rar ختم می شود)، دو بار کلیک کنید.
اگر آرشیو را به چند قسمت تقسیم کنیم نگهداری و یا انتقال آن آسانتر می شود. دیگر نیازی به دیسک یا حافظه فلش با حجم بالا نداریم. همچنین آپلود کردن چند فایل با حجم کم خیلی آسانتر از یک آرشیو یک تکه با حجم زیاد است و نیز بیشتر سایت های میزبان فایل، برای حجم فایلها محدودیت می گذارند .و مهمتر از همه اگر به یک آرشیو آسیب وارد شود و مقدار صدمه بیش از درصد تعیین شده برای رکورد بازیابی باشد، دیگر فایل به طور کامل قابل تعمیر نیست و باید با نسخه پشتیبانش تعویض شود.
اجازه دهید با یک مثال توضیح دهم، فرضا فایل آرشیو ما 4GB است پس به راحتی آنرا می توانیم در دو دیسک دی.وی.دی معمولی(4.7GB) جای دهیم، یکی به عنوان دیسک اصلی و دیگری به عنوان پشتیبان. اگر به واسطۀ خط و خش بخش هایی از دیسک اصلی قابل خواندن نباشد و آسیب به آرشیو بیش از مقدار خاص تعیین شده باشد، فایل قابل تعمیر نیست و باید از آرشیوی که در دیسک پشتیبان قرار داده ایم استفاده کنیم. اگر بر حسب اتفاق دیسک پشتیبان هم دارای مشکل خط و خش باشد، فایل آرشیو از دست رفته است، اما اگر آرشیومان را به حجم های 700 مگابایتی تقسیم کنیم(6 قطعه) و یک و یا چند تا از این حجم ها قابل استفاده نباشند می توانیم با حجم معادلشان در دیسک پشتیبان تعویض کنیم. اما اگر بر حسب تصادف مثلا حجم های 1 و 6 از دیسک اصلی و 3و6 از دیسک پشتیبان قابل خواندن نباشند چون حجم 6 در هر دو دیسک قابل خواندن نیست پس تنها قسمت های 1 تا 5 آرشیو قابل استخراج(extract) است نه کل آن.
- برنامه MultiPar آرشیو ما را که به چند حجم تقسیم شده به عنوان ورودی می گیرد و به همان تعداد فایل، که حاوی بلوک بازیابی اند، بعلاوه یک فایل اندیس(index) کم حجم به عنوان خروجی تحویل می دهد. فایل اندیس حاوی بلوک بازیابی نیست بلکه حاوی هش فایل های ورودی است که می تواند بعدا، به سرعت برای تعیین هویت(identify) فایلهای ورودی و تایید(verify) بی نقصی( integrity) آنها به کار رود. این فایل های خروجی(با پسوند PAR یا PAR2) را می توانیم برای دوباره ساختن حجم های گمشده یا خراب آرشیو اصلی بکار ببریم.
نکته مهم: اگر در برنامه MultiPar، درصد افزونگی(Redundancy) را 100 انتخاب کنیم هر کدام از فایلهای خروجی(غیر از اندیس) این قابلیت را دارند که یکی از حجم های آرشیو اصلی را دوباره سازی کنند و این جالبترین ویژگی این برنامه است. مثلا اگر آرشیو 6 قسمتی تحویل این برنامه بدهیم خروجی برنامه 6 فایل حاوی بلوک بازیابی و یک اندیس است، این فایلها به عنوان پشتیبان آرشیو اصلی تلقی می شوند و باید جدا از آرشیو اصلی در جایی نگهداری شوند. اگر مانند مثال گذشته در دیسک اصلی مان حجم های 1و6 قابل خواندن نباشند کافی است دو فایل حاوی بلوک بازیابی(مهم نیست کدامشان) را از دیسک پشتیبان انتخاب کنیم و به همراه 4 حجم باقیمانده در دیسک اصلی تحویل نرم افزار MultiPar دهیم تا حجم های 1و6 را برایمان دوباره سازی کند و در نتیجه کل آرشیو قابل استخراج است!
ادامه دارد...