SG_SANITIZE(8) SG3_UTILS SG_SANITIZE(8)

sg_sanitize - حذف تمام داده‌های کاربر از دیسک با استفاده از دستور SCSI SANITIZE

sg_sanitize [--ause] [--block] [--count=OC] [--crypto] [--dry-run] [--desc] [--early] [--fail] [--help] [--invert] [--ipl=LEN] [--overwrite] [--pattern=PF] [--quick] [--test=TE] [--timeout=SECS] [--verbose] [--version] [--wait] [--zero] [--znr] DEVICE

این ابزار دستور SCSI SANITIZE را فراخوانی می‌کند. این دستور نخستین بار در پیش‌نویس بازنگری ۲۷ استاندارد SBC-3 معرفی شد. هدف از عملیات sanitize (پاک‌سازی کامل) تغییر اطلاعات موجود در حافظه موقت (کش) و روی رسانه ذخیره‌سازی یک واحد منطقی (مانند یک دیسک) است، به‌گونه‌ای که بازیابی داده‌های کاربر غیرممکن گردد. اگر داده‌های کاربر قابل پاک‌شدن نباشند، یا در فرآیند پاک‌سازی قرار داشته باشند، عملیات پاک‌سازی مانع از دسترسی به آن داده‌ها می‌شود.

به‌محض اینکه یک دستور SCSI SANITIZE با موفقیت آغاز شود، داده‌های کاربر از روی آن دیسک دیگر در دسترس نخواهند بود. حتی اگر برق دیسک قطع و وصل (power cycled) شود، عملیات پاک‌سازی پس از وصل مجدد برق ادامه می‌یابد تا زمانی که کامل شود.

این ابزار نیازمند یکی از گزینه‌های --block، --crypto، --fail یا --overwrite است. با استفاده از گزینه‌های --block، --crypto یا --overwrite به کاربر ۱۵ ثانیه مهلت داده می‌شود تا در مورد تمایل خود به پاک کردن تمام داده‌های روی دیسک تجدید نظر کند، مگر اینکه گزینه --quick داده شده باشد که در این صورت عملیات پاک‌سازی بلافاصله آغاز می‌شود. رشته‌های پاسخ INQUIRY دیسک چاپ می‌شوند تا در صورتی که DEVICE اشتباهی داده شده باشد، مشخص گردد.

اگر گزینه --early داده شود، این ابزار بلافاصله پس از شروع دستور SANITIZE با بیت تنظیم‌شده IMMED خارج می‌شود. کاربر می‌تواند پیشرفت عملیات پاک‌سازی را با دستور sg_requests --num=9999 --progress که هر ۳۰ ثانیه یک دستور REQUEST SENSE ارسال می‌کند، نظارت کند. در غیر این صورت، اگر گزینه --wait داده شود، این ابزار تا زمان تکمیل (یا شکست) دستور SANITIZE منتظر می‌ماند که این ممکن است ساعت‌ها طول بکشد.

اگر گزینه --wait داده نشود، دستور SANITIZE با بیت تنظیم‌شده IMMED آغاز می‌گردد. اگر هیچ‌یک از گزینه‌های --early یا --wait داده نشوند، این ابزار هر ۶۰ ثانیه یک دستور REQUEST SENSE ارسال می‌کند تا زمانی که دیگر نشانه‌ای از پیشرفت وجود نداشته باشد، که در این حالت ابزار بدون نمایش پیامی خارج می‌شود. اگر افزون بر این، گزینه --verbose داده شده باشد، خروج با یک پیام کوتاه مشخص می‌شود مبنی بر اینکه پاک‌سازی موفقیت‌آمیز به نظر می‌رسد.

آرگومان‌های گزینه‌های طولانی برای گزینه‌های کوتاه نیز الزامی هستند. گزینه‌ها بر اساس نام گزینه طولانی به ترتیب الفبایی مرتب شده‌اند.

بیت AUSE را در cdb تنظیم می‌کند. عبارت AUSE سرنام "allow unrestricted sanitize exit" (اجازه خروج نامحدود از پاک‌سازی) است. اقدام پیش‌فرض، پاک نگه‌داشتن (صفر بودن) بیت AUSE است.
انجام عملیات پاک‌سازی از نوع "block erase" (پاک‌سازی بلوکی).
که در آن OC تعداد دفعات بازنویسی ("overwrite count") مرتبط با عملیات پاک‌سازی "overwrite" است. مقدار OC می‌تواند عددی بین ۱ تا ۳۱ باشد و مقدار پیش‌فرض آن ۱ است.
انجام عملیات پاک‌سازی از نوع "cryptographic erase" (پاک‌سازی رمزنگارانه). توجه داشته باشید که این نوع پاک‌سازی اغلب بسیار سریع است، زیرا صرفاً یک کلید رمزنگاری داخلی را با یک مقدار جدید بازنویسی می‌کند. این کلیدها برای کاربران در دسترس نیستند و تمام داده‌های نوشته‌شده را رمزگذاری و تمام داده‌های خوانده‌شده از رسانه را رمزگشایی می‌کنند. دلیل اصلی انجام این کار سرعت بالای این عملیات است. این عملیات غیرقابل بازگشت است.
فیلد DESC را در دستور REQUEST SENSE که برای نظارت دوره‌ای (polling) به کار می‌رود، تنظیم می‌کند. به‌طور پیش‌فرض این فیلد روی صفر تنظیم شده است. پس از صدور دستور SANITIZE (با فرض اینکه هیچ‌یک از گزینه‌های --early یا --wait داده نشده باشند)، یک حلقه نظارت دوره‌ای REQUEST SENSE برای بررسی پیشرفت این دستور استفاده می‌شود زیرا اجرای آن ممکن است مدتی طول بکشد.
این گزینه خط فرمان را تجزیه کرده و تمامی آماده‌سازی‌ها را انجام می‌دهد اما از صدور دستور واقعی SANITIZE صرف‌نظر می‌کند.
رفتار پیش‌فرض این ابزار بررسی دوره‌ای دیسک در هر ۶۰ ثانیه برای دریافت وضعیت پیشرفت تا زمان اتمام پاک‌سازی است. هنگامی که این گزینه داده شود، این ابزار به‌محض دریافت تاییدیه دستور SANITIZE با بیت IMMED تنظیم‌شده روی ۱، «زودتر» خارج می‌شود. این گزینه و گزینه --wait نمی‌توانند هم‌زمان استفاده شوند.
انجام عملیات پاک‌سازی از نوع "exit failure mode" (خروج از حالت شکست). معمولاً نیازمند آن است که دستور SANITIZE قبلی بیت AUSE را تنظیم کرده باشد.
نمایش اطلاعات نحوه استفاده و سپس خروج.
طول الگوی مقداردهی اولیه را برابر با LEN بایت قرار می‌دهد. به‌طور پیش‌فرض این مقدار برابر با طول فایل الگو (PF) یا در صورت استفاده از گزینه --zero برابر با ۴ تنظیم می‌شود. فقط زمانی فعال است که گزینه --overwrite نیز داده شده باشد. این مقدار نشان‌دهنده تعداد بایت‌هایی از فایل PF است که به عنوان الگوی مقداردهی اولیه استفاده خواهد شد (در صورتی که گزینه --zero داده نشده باشد). حداقل اندازه ۱ بایت و حداکثر آن اندازه بلوک منطقی DEVICE است (و نباید از ۶۵۵۳۵ فراتر رود). اگر LEN از اندازه فایل PF بیشتر باشد، الگوی مقداردهی اولیه با صفر پر می‌شود (padding).
بیت INVERT را در فهرست پارامترهای عمل سرویس overwrite تنظیم می‌کند. این مورد فقط بر عملیات پاک‌سازی "overwrite" تأثیر می‌گذارد. مقدار پیش‌فرض، پاک بودن بیت INVERT است. هنگامی که بیت INVERT تنظیم شود، الگوی مقداردهی اولیه بین گذرهای پیاپی بازنویسی معکوس می‌شود.
انجام عملیات پاک‌سازی از نوع "overwrite" (بازنویسی). هنگامی که این گزینه داده شود، مشخص کردن گزینه --pattern=PF یا گزینه --zero الزامی است.
که در آن PF نام فایل حاوی الگوی مقداردهی اولیه مورد نیاز برای عملیات پاک‌سازی "overwrite" است. طول این فایل به عنوان طول الگوی مقداردهی اولیه استفاده خواهد شد مگر اینکه گزینه --ipl=LEN مشخص شده باشد. طول الگوی مقداردهی اولیه باید بین ۱ تا اندازه بلوک منطقی DEVICE باشد.
اقدام پیش‌فرض (یعنی زمانی که این گزینه داده نشده است) این است که به کاربر ۱۵ ثانیه مهلت برای تجدید نظر در انجام عملیات پاک‌سازی روی DEVICE داده شود. هنگامی که این گزینه مشخص شود، این مرحله (یعنی دوره هشدار ۱۵ ثانیه‌ای) نادیده گرفته می‌شود.
فیلد TEST را در فهرست پارامترهای عمل سرویس overwrite تنظیم می‌کند. این مورد فقط بر عملیات پاک‌سازی "overwrite" تأثیر می‌گذارد. حالت پیش‌فرض قرار دادن مقدار ۰ در این فیلد است.
که در آن SECS تعداد ثانیه‌های تعیین‌شده برای مهلت زمانی (timeout) در دستور SANITIZE است.
افزایش سطح پرگویی خروجی (یعنی خروجی اشکال‌زدایی).
چاپ رشته نسخه و سپس خروج.
رفتار پیش‌فرض (یعنی بدون این گزینه و بدون گزینه --early) این است که دستور SANITIZE با بیت IMMED تنظیم‌شده آغاز شود و سپس با دستور REQUEST SENSE وضعیت پیشرفت به طور مرتب بررسی شود تا عملیات پاک‌سازی کامل گردد (یا شکست بخورد). زمانی که این گزینه داده شود (و گزینه --early داده نشده باشد)، دستور SANITIZE با بیت پاک‌شده IMMED آغاز می‌شود. برای دیسک‌های بزرگ این فرآیند ممکن است ساعت‌ها طول بکشد. [یک عملیات پاک‌سازی رمزنگارانه بالقوه می‌تواند بسیار سریع باشد.]
در عملیات پاک‌سازی "overwrite"، این گزینه باعث می‌شود الگوی مقداردهی اولیه برابر با صفر باشد (۴ بایت صفر به عنوان الگوی مقداردهی اولیه استفاده می‌شود). نمی‌توان آن را همراه با گزینه --pattern=PF استفاده کرد. اگر این گزینه دو بار داده شود (مانند '-zz')، مقدار 0xff به عنوان بایت مقداردهی اولیه استفاده خواهد شد.
بیت ZNR (منطقه‌بندی بدون بازنشانی یا zoned no reset) را در cdb تنظیم می‌کند. در پیش‌نویس بازنگری ۷ استاندارد SBC-4 معرفی شده است.

دستور SCSI SANITIZE ارتباط نزدیکی با دستور ATA SANITIZE دارد؛ هر دو نسبتاً جدید هستند و دستور ATA زودتر تعریف شده است. تعریف SCSI to ATA Translation (SAT) برای دستور SCSI SANITIZE در پیش‌نویس بازنگری ۴ استاندارد SAT-3 ارائه شد.

هنگامی که از لایه SAT برای یک دیسک (S)ATA استفاده می‌شود، برای حالت OVERWRITE الگوی مقداردهی اولیه باید دقیقاً ۴ بایت باشد. بنابراین این بدان معناست که یا باید گزینه --zero مشخص شود، یا یک فایل الگو (با گزینه --pattern=PF) که طول آن ۴ بایت باشد یا با گزینه --ipl=LEN روی این طول تنظیم شده باشد.

دستور SCSI SANITIZE با دستور SCSI FORMAT UNIT مرتبط است. احتمالاً یک عملیات پاک‌سازی بلوکی زمانی مشابه با فرمت کردن همان دیسک نیاز خواهد داشت (برای نمونه ۹ ساعت برای یک دیسک ۲ ترابایتی). هدف اصلی فرمت، پیکربندی دیسک در پایان فرآیند فرمت است (مثلاً تغییر اندازه بلوک منطقی یا افزودن اطلاعات محافظتی). حذف داده‌های کاربر صرفاً یکی از عوارض جانبی فرمت است. در دستور SCSI SANITIZE، حذف داده‌های کاربر هدف اصلی است. اگر عملیات پاک‌سازی قطع شود (مثلاً برق دیسک قطع و وصل شود)، پس از روشن شدن مجدد، هیچ‌یک از داده‌های باقی‌مانده کاربر در دسترس نخواهد بود و عملیات پاک‌سازی ادامه خواهد یافت. هنگامی که یک فرمت قطع شود (مثلاً قطع برق دیسک)، پیش‌نویس‌ها اطلاعات بسیار کمی درباره وضعیت دیسک ارائه می‌دهند. در عمل، ممکن است بخشی از داده‌های اولیه کاربر باقی بماند و لازم باشد فرمت مجدداً آغاز گردد.

یافتن اینکه آیا یک دیسک (SCSI یا ATA) از SANITIZE پشتیبانی می‌کند یا خیر می‌تواند چالش‌برانگیز باشد. اگر کاربر واقعاً نیاز به دانستن این موضوع داشته باشد و اطلاعات دیگری در دسترس نباشد، آزمایش با دستور 'sg_sanitize --fail -vvv <device>' و بررسی داده‌های سنس (sense data) بازگردانده‌شده ممکن است امن‌ترین رویکرد باشد. استفاده از شکل --fail این ابزار نباید هیچ اثری داشته باشد مگر اینکه پس از یک عملیات پاک‌سازی که پیش‌تر شکست خورده است اجرا شود. اگر دستور SCSI REPORT SUPPORTED OPERATION CODES (صفحه راهنمای sg_opcodes را ببینید) پشتیبانی شود، استفاده از آن رویکرد بهتری برای بررسی پشتیبانی از sanitize خواهد بود.

اگر از دستور dd برای بررسی داده‌های قبل و بعد از یک بلوک خاص استفاده می‌کنید (یعنی بررسی اینکه آیا پاک‌سازی واقعاً کار کرده است یا خیر)، ایده خوبی است که از عملوند 'iflag=direct' استفاده شود. در غیر این صورت، خواندن اولیه ممکن است کش شده و هنگام خواندن همان LBA در زمان کمی بعدتر، داده کش‌شده بازگردانده شود. بدیهی است که از این ابزار باید تنها برای پاک‌سازی داده‌های روی دیسکی استفاده شود که فایل‌سیستم‌های سوار شده (مانت‌شده) آن (در صورت وجود) پیش از پاک‌سازی جدا (unmount) شده باشند!

این مثال‌ها از نام‌های دستگاه لینوکس استفاده می‌کنند. برای نام‌های مناسب دستگاه در سایر سیستم‌های عامل پشتیبانی‌شده به صفحه راهنمای sg3_utils(8) مراجعه کنید.

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


sg_sanitize /dev/sdm

برای انجام پاک‌سازی از نوع "block erase" مشخص کردن گزینه --block الزامی است. به کاربر یک بازه زمانی ۱۵ ثانیه‌ای برای تجدید نظر داده می‌شود، دستور SCSI SANITIZE با بیت تنظیم‌شده IMMED آغاز خواهد شد، سپس این ابزار وضعیت پیشرفت را با دستور REQUEST SENSE مرتباً بررسی می‌کند تا عملیات پاک‌سازی پایان یابد:


sg_sanitize --block /dev/sdm

برای آغاز پاک‌سازی "block erase" و بازگشت از این ابزار به‌محض آغاز آن (اما پیش از تکمیل)، از گزینه --early استفاده کنید:


sg_sanitize --block --early /dev/sdm

اگر مهلت ۱۵ ثانیه‌ای برای تجدید نظر مورد نیاز نیست، گزینه --quick را اضافه کنید:


sg_sanitize --block --quick --early /dev/sdm

برای انجام پاک‌سازی "overwrite" می‌توان یک فایل الگو را مشخص کرد:


sg_sanitize --overwrite --pattern=rand.img /dev/sdm

اگر طول آن فایل "rand.img" برابر ۵۱۲ بایت باشد (اندازه بلوک منطقی متداول)، برای استفاده تنها از ۱۷ بایت اول (به‌صورت تکرارشونده) در عملیات پاک‌سازی "overwrite":


sg_sanitize --overwrite --pattern=rand.img --ipl=17 /dev/sdm

برای بازنویسی با صفر از دستور زیر استفاده کنید:


sg_sanitize --overwrite --zero /dev/sdm

وضعیت خروج دستور sg_sanitize در صورت موفقیت‌آمیز بودن ۰ است. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید. مگر در حالتی که گزینه --wait داده شده باشد، وضعیت خروج ممکن است نشان‌دهنده موفقیت یا عدم موفقیت فرمت نباشد.

قرارداد یونیکس بر این است که «بی‌خبری نشانه سلامت است» (no news is good news)، اما این موضوع می‌تواند پس از عملیاتی مانند sanitize کمی نگران‌کننده باشد، به‌ویژه اگر عملیات سریع به پایان برسد (یعنی پیش از ارسال نخستین درخواست بررسی پیشرفت). دادن گزینه --verbose برای یک بار باید خروجی اضافه کافی برای رفع این نگرانی فراهم کند.

نوشته‌شده توسط Douglas Gilbert.

گزارش باگ‌ها به <dgilbert at interlog dot com>.

حق نشر © 2011-2020 Douglas Gilbert
این نرم‌افزار تحت مجوز BSD-2-Clause توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا مناسب بودن برای یک هدف خاص.

sg_requests(8), sg_format(8)

December 2020 sg3_utils-1.46