یه چیزی یادگرفتم که خیلی به کارم اومد گفتم تو یه پست کوتاه منتشرش کنم .
ما لینوکسی ها میدونیم برای انتقال داده حجیم از حافظه ای به حافظه دیگه دستور بسیار کاربردی ای وجود داره به نام dd که معمولا برای بکاپ گرفتن استفاده میشه ولی من تو این مقاله میخوام روش wipe کردن باهاشو یاد بدم. در واقع طرز کارش خیلی راحته :
# dd if=/dev/sda1 of=/dev/sdb
خیلی خیلی سادس، دستور یه if داره که کوتاه شده ی input file هست که مبداء ماست
یه of داره که کوتاه شده output file و به مقصد اشاره میکنه.
الان دستور بالایی که نوشتم یعنی هر چیزی که تو dev/sda هست رو بردار بریز تو dev/sdb/.
یادتون باشه این دستور اصلا کاری نداره تو of یا همون مقصدتون از قبل چه فایلایی دارید اگر براش مشخص نکنید از اول هارد مینویسه میره جلو ممکنه خیلی از دیتا های روی هارد رو overwrite کنه و دیگه قابل دسترسی نباشه. برای همین استفاده از دستور dd برای تازه کار های لینوکس اصلا پیشنهاد نمیشه !!!
و میتونه حتی خطرناک باشه !!!
البته این چیزی که من نوشتم، با حداقل پارامتر های دستوره، مواردی مثل block size یا انتخاب سکتور خاصی برای شروع هم داره که ما کاریش نداریم فعلا.
یه قسمتی هست تو دایرکتوری dev به اسم zero از اینجا میتونیم هرچقدر دلمون میخواد کاراکتر صفر برداریم بریزیم هر جا که دلمون میخواد .
خب ما برمیداریم کل حافظه رو با صفر پر میکنیم ، عملا با این کار همه اطلاعات جوری پاک میشه که قابل بازیابی نیست به راحتی، حداقل نه با تجهیزات خونگی.
به عنوان یه توضیح جمع و جور :
وقتی ما اطلاعاتی رو Delete میکنیم در واقع خود فایل سر جاش هست، و از حافظه حذف نمیشه ، ما فقط آدرس شروع و پایان فایل رو پاک میکینم برای همین پاک کردن نسبت به کپی و انتقال فایل اینقدر سریع اتفاق میوفته. حالا اگر به نحوی قسمت هایی که آدرسی دهی نشده (از نظر سیستم عامل خالیه، ولی واقعا نیست) رو بگردیم و فرم فایل ها رو بتونیم در بیاریم، میتونیم با دوباره آدرس دهی کردنش اونو بازیابی کنیم.ولی اگر به جای Delete اون فایل رو wipe کنیم، هم آدرس فایل پاک میشه هم خود فایل با یه کاراکتر مشخص رونویسی میشه. حالا با دستوری که ذکر میشه کل هارد رو با صفر بازنویسی میکنیم . که معنی اینو میده که کل حافظه wipe شده.
دستور dd برای wipe کردن یه حافظه خاص مثلا sdb2 :
# dd if=/dev/zero of=/dev/sdb2 bs=1M
هر حافظه ی دیگه ای رو میتونید به جای sdb2 بذارید . حتی اگر میخواید کل پارتیشن ها هم پاک بشه میتونید بدون شماره بزنید یعنی مثلا sdb.
دستور dd کارشو وقتی شروع میکنه ساکت میمونه و تا وقتی که تموم نشده هیچ خبری نمیده، یعنی هیچ لودینگ یا progress bar تو این برنامه وجود نداره، از طرفی وقتی مثلا یه هارد ۱ ترابایتی رو بخوایم wipe کنیم عملا به اندازه پر کردن کامل هارد زمان میبره،
پس!!! ما به progress bar نیاز داریم .
نویسنده های dd که ۳ نفر بودن با همکاری چند نفر دیگه یه نسخه پیشرفته تر از dd رو گسترش دادن به اسم dc3dd . تو این برنامه پارامتراش راحت تر شدن، progress bar اضافه شده، ولی مثل dd به صورت پیش فرض روی شل لینوکس نیست و باید تو توزیع های غیر امنیتی نصب بشه ( توزیع هایی مثل parrot و kali به صورت پیشفرض دارنش) کلی تغییر دیگه هم هست که تو man page میتونید بخونید.
حالا با dc3dd میخوایم wipe کنیم .
# dc3dd wipe=/dev/sdb pat=000111
اون pat که مخفف کلمه pattern هست الگوی دیتایی هست که قراره overwrite بشه ، هر چی دلتون میخواد بزنید.
به همین سادگی.
البته progress bar که تعبیه شده به شکل درصد و میزان دیتای کپی شده هست، مدت زمان گذشته و سرعت کپی کردن هست .
اینجا واقعا یه هارد ۱ ترابایتی رو دارم wipe میکنم که تا اینجا که ۳۱ درصد رفته حدودا ۲ ساعت و خرده ای زمان برده.
برای wipe یک حافظه یک ترابایتی حدودا ۷ ساعت زمان لازمه .البته با سرعت ۳۷ مگابایت برثانیه که من دارم.
امیدوارم که کاربردی بوده باشه.