SG_VERIFY(8) SG3_UTILS SG_VERIFY(8)

sg_verify - فراخوانی دستور(ات) SCSI VERIFY روی یک دستگاه بلوکی

sg_verify [--0] [--16] [--bpc=BPC] [--count=COUNT] [--dpo] [--ff] [--ebytchk=BCH] [--group=GN] [--help] [--in=IF] [--lba=LBA] [--ndo=NDO] [--quiet] [--readonly] [--verbose] [--version] [--vrprotect=VRP] DEVICE

یک یا چند دستور SCSI VERIFY (نسخه ۱۰ یا ۱۶) را به DEVICE ارسال می‌کند. این دستورات SCSI در استانداردهای SBC-2 و SBC-3 در نشانی https://www.t10.org و پیش‌نویس‌های SBC-4 تعریف شده‌اند.

هنگامی که گزینه --ndo=NDO داده نشود، اعتبارسنجی از آدرس بلوک منطقی مشخص‌شده توسط گزینه --lba=LBA آغاز شده و برای --count=COUNT بلوک ادامه می‌یابد. توسط هر دستور VERIFY حداکثر --bpc=BPC بلوک تأیید اعتبار می‌شود؛ بنابراین در صورت نیاز چندین دستور VERIFY ارسال خواهد شد. عملیات اعتبارسنجی رسانه توسط DEVICE انجام می‌شود (برای مثال، با فرض اینکه هر بلوک دارای داده‌های اضافی EEC باشد، این داده‌ها با محتوای بلوک منطقی بررسی می‌شوند). نبود هیچ پیامی نشانه موفقیت است (یعنی اگر خطایی در اعتبارسنجی تشخیص داده نشود، هیچ پیامی به stderr ارسال نمی‌شود و وضعیت خروج یونیکس برابر با ۰ خواهد بود).

هنگامی که گزینه --ndo=NDO داده شود، گزینه --bpc=BPC نادیده گرفته می‌شود. یک دستور منفرد VERIFY صادر شده و مقایسه‌ای از آدرس بلوک منطقی مشخص‌شده توسط گزینه --lba=LBA آغاز گردیده و برای --count=COUNT بلوک ادامه می‌یابد. دستور VERIFY دارای یک بافر داده خروجی (data-out buffer) مرتبط با طول NDO بایت است. محتویات بافر داده خروجی از فایل FN (در صورت ارائه --in=FN) یا از stdin دریافت می‌شود. مقایسه‌ای میان بافر داده خروجی و بلوک‌های منطقی روی DEVICE صورت می‌گیرد. اگر مقایسه موفقیت‌آمیز باشد، هیچ پیامی به stderr ارسال نشده و وضعیت خروج یونیکس ۰ خواهد بود. اگر مقایسه با شکست مواجه شود، یک بافر سنس (sense buffer) با کلید سنس MISCOMPARE بازگردانده می‌شود؛ در این حالت وضعیت خروج یونیکس ۱۴ خواهد بود. پیام‌های مرتبط با بافر سنس MISCOMPARE به stderr ارسال خواهند شد مگر اینکه گزینه --quiet مشخص شده باشد.

در نگارش ۳۴ استاندارد SBC-3 فیلد BYTCHK در تمام دستورات SCSI VERIFY از یک بیت به دو بیت گسترش یافت. این امر مستلزم تغییراتی در گزینه‌های این ابزار بود؛ بخش زیر با عنوان «تغییرات گزینه‌ها» را ببینید.

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

-0, --0
بافری با طول NDO بایت پر از صفر به عنوان بخش داده خروجی (data-out) یک دستور VERIFY ارسال می‌شود. بنابراین stdin خوانده نمی‌شود و اگر --in=IF داده شده باشد، یک خطا ایجاد می‌شود. این گزینه زمانی که BCH برابر با ۳ باشد برای بررسی اینکه آیا بخشی یا تمامی DEVICE (برای مثال یک دیسک) از بلوک‌های پر از صفر تشکیل شده است، مفید خواهد بود.
از دستور VERIFY(16) استفاده می‌کند (پیش‌فرض VERIFY(10) است). حتی بدون این گزینه، استفاده از یک --lba=LBA که بیش از حد بزرگ باشد، باعث می‌شود که این ابزار دستور VERIFY(16) صادر کند.
اگر گزینه --ndo=NDO مشخص شده باشد، این گزینه نادیده گرفته می‌شود. در غیر این صورت، BPC حداکثر تعداد بلوک‌هایی را مشخص می‌کند که توسط یک دستور منفرد SCSI VERIFY تأیید اعتبار خواهند شد. مقدار پیش‌فرض ۱۲۸ بلوک است که برای یک دیسک با بلوک‌های ۵۱۲ بایتی معادل ۶۴ کیلوبایت است. اگر BPC کمتر از COUNT باشد، چندین دستور SCSI VERIFY به DEVICE ارسال می‌شود. برای دستور پیش‌فرض VERIFY(10)، مقدار BPC نمی‌تواند از 0xffff (۶۵٬۵۳۵) فراتر رود، در حالی که برای VERIFY(16)، مقدار BPC نمی‌تواند از 0x7fffffff (۲٬۱۴۷٬۴۸۳٬۶۴۷) فراتر رود. برای دستگاه‌های بلوکی جدید (دیسک‌ها)، این مقدار ممکن است توسط فیلد حداکثر طول انتقال (maximum transfer length) در صفحه Block Limits VPD محدود شود.
که در آن COUNT تعداد بلوک‌ها برای اعتبارسنجی را مشخص می‌کند. مقدار پیش‌فرض ۱ است. اگر COUNT بزرگ‌تر از BPC (یا مقدار پیش‌فرض آن ۱۲۸) باشد و NDO داده نشده باشد، چندین دستور SCSI VERIFY به دستگاه ارسال می‌شود. در غیر این صورت، COUNT محتوای فیلد طول اعتبارسنجی (verification length) دستور SCSI VERIFY صادرشده خواهد بود. از ابزار sg_readcap می‌توان برای یافتن حداکثر تعداد بلوک‌هایی که یک دستگاه بلوکی (برای مثال یک دیسک) دارد استفاده کرد.
غیرفعال‌سازی خارج کردن صفحه از حافظه (disable page out) اولویت نگهداری بلوک‌های خوانده‌شده در حافظه نهان (کش) دستگاه را به کمترین اولویت تغییر می‌دهد. این بدان معناست که بلوک‌های خوانده‌شده توسط دستورات دیگر احتمال بیشتری برای باقی ماندن در حافظه نهان دستگاه خواهند داشت.
فیلد BYTCHK را روی BCH تنظیم می‌کند و مقدار (1) را که توسط گزینه --ndo=NDO تنظیم شده بود لغو می‌نماید. مقادیر ۱، ۲ یا ۳ برای BCH پذیرفته می‌شوند، اما استاندارد sbc3r34 مقدار ۲ را رزرو کرده است. اگر این گزینه داده شود، --ndo=NDO نیز باید ارائه گردد. اگر BCH برابر با ۳ باشد، آنگاه NDO باید اندازه یک بلوک منطقی باشد (به‌علاوه اندازه تمام یا بخشی از اطلاعات حفاظت در صورتی که VRP بزرگ‌تر از ۰ باشد).
بافری با طول NDO بایت پر از بایت‌های 0xff به عنوان بخش داده خروجی (data-out) یک دستور VERIFY ارسال می‌شود. بنابراین stdin خوانده نمی‌شود و اگر --in=IF داده شده باشد، یک خطا ایجاد می‌شود. این گزینه زمانی که BCH برابر با ۳ باشد برای بررسی اینکه آیا بخشی یا تمامی DEVICE (برای مثال یک دیسک) از بلوک‌های پر از بایت 0xff تشکیل شده است، مفید خواهد بود.
که در آن GN محتوای فیلد شماره گروه (group number) در دستور SCSI VERIFY(16) خواهد بود. این مقدار می‌تواند از ۰ تا ۶۳ (شامل هر دو) باشد. مقدار پیش‌فرض برای GN برابر با ۰ است. توجه داشته باشید که این گزینه برای دستور SCSI VERIFY(10) نادیده گرفته می‌شود.
نمایش پیام راهنمای استفاده و سپس خروج.
که در آن IF نام فایلی است که NDO بایت از آن خوانده شده و در بافر داده خروجی قرار می‌گیرد. این کار تنها زمانی انجام می‌شود که گزینه --ndo=NDO داده شده باشد. اگر این گزینه ارائه نشود، ورودی استاندارد (stdin) خوانده می‌شود. اگر IF برابر با «-» باشد نیز stdin مورد استفاده قرار می‌گیرد.
که در آن LBA آدرس بلوک منطقی اولین بلوک برای شروع عملیات اعتبارسنجی را مشخص می‌کند. فرض بر این است که LBA در مبنای ده‌دهی است مگر اینکه دارای پیشوند '0x' یا پسوند 'h' باشد (زیر را ببینید). مقدار پیش‌فرض ۰ است (یعنی ابتدای دستگاه).
NDO تعداد بایت‌هایی است که باید از فایل FN (در صورت ارائه --in=FN) یا از ورودی استاندارد (stdin) به دست آید. این بایت‌ها در بافر داده خروجی مرتبط با دستور SCSI VERIFY قرار می‌گیرند و NDO در فیلد طول اعتبارسنجی در cdb قرار می‌گیرد. مقدار پیش‌فرض برای NDO برابر با ۰ است و حداکثر مقدار آن به سیستم‌عامل بستگی دارد. اگر گزینه --ebytchk=BCH داده نشده باشد، فیلد BYTCHK در cdb روی ۱ تنظیم می‌شود.
پیام‌های بافر سنس مرتبط با کلید سنس MISCOMPARE را که در غیر این صورت به stderr ارسال می‌شدند سرکوب می‌کند. وضعیت خروج همچنان روی ۱۴ تنظیم می‌شود که مقدار کلید سنس نشان‌دهنده MISCOMPARE است.
دستگاه DEVICE را به جای حالت خواندن/نوشتن (که پیش‌فرض است) به صورت فقط‌خواندنی باز می‌کند. درایور sg لینوکس برای دستور SCSI VERIFY به دسترسی خواندن/نوشتن نیاز دارد، اما سایر روش‌های دسترسی ممکن است به دسترسی فقط‌خواندنی احتیاج داشته باشند.
افزایش سطح گزارش جزئیات (یعنی خروجی اشکال‌زدایی).
چاپ رشته نسخه برنامه و سپس خروج.
که در آن VRP مقدار موجود در فیلد vrprotect در cdb دستور VERIFY است. این مقدار باید عددی بین ۰ تا ۷ (شامل هر دو) باشد. مقدار پیش‌فرض صفر است.

نام BYTCHK مربوط به یک فیلد (با پهنای دو بیت) در دستورات VERIFY(10) و VERIFY(16) است. هنگامی که روی ۱ یا ۳ تنظیم شود (استاندارد sbc3r34 مقدار ۲ را رزرو کرده است)، نشان می‌دهد که همراه با دستور SCSI VERIFY، یک بافر داده خروجی (data-out buffer) برای بررسی توسط دستگاه (دیسک) ارسال خواهد شد. استفاده از گزینه --ndo=NDO فیلد BYTCHK را روی ۱ تنظیم می‌کند و NDO تعداد بایت‌های قرار گرفته در بافر داده خروجی است. این بایت‌ها از stdin یا IF (از گزینه --in=FN) به دست می‌آیند. از گزینه --ebytchk=BCH می‌توان برای بازنویسی مقدار ۱ فیلد BYTCHK با BCH استفاده کرد.

محاسبه NDO به عهده کاربر است. مقدار آن به اندازه بلوک منطقی (که با ابزار sg_readcap قابل یافتن است)، مقادیر COUNT و VRP بستگی دارد. اگر VRP بزرگ‌تر از ۰ باشد، هر بلوک منطقی شامل (حداقل) ۸ بایت داده‌های اضافی اطلاعات حفاظت خواهد بود.

هنگامی که فیلد BYTCHK برابر با ۰ باشد، فرآیند اعتبارسنجی انجام‌شده توسط دستگاه (دیسک) به صورت اختصاصی سازنده (vendor specific) خواهد بود. این فرآیند معمولاً شامل بررسی هر بلوک روی دیسک در برابر کدهای تصحیح خطای آن (ECC) است که داده‌های اضافی ذخیره‌شده روی دیسک هستند.

بسیاری از سیستم‌های عامل محدودیت‌هایی را بر روی حداکثر اندازه بافر داده خروجی (و داده ورودی) اعمال می‌کنند. برای لینوکس در گذشته این محدودیت کمتر از ۱ مگابایت بود اما تا حدودی افزایش یافته است.

نسخه‌های پیشین این ابزار دارای گزینه --bytchk=NDO بودند که بیت BYTCHK را تنظیم کرده و فیلد طول اعتبارسنجی cdb را روی NDO قرار می‌داد. شکل کوتاه‌تر آن گزینه -B NDO بود. برای سازگاری با گذشته، این گزینه همچنان وجود دارد اما مستند نشده است. به جای آن گزینه --ndo=NDO قرار دارد که شکل کوتاه‌تر آن -n NDO است. گزینه --ndo=NDO فیلد BYTCHK را روی ۱ تنظیم می‌کند مگر اینکه با --ebytchk=BCH بازنویسی شود.

آرگومان‌های عددی گوناگون (مانند LBA) ممکن است شامل پسوندهای ضریبی باشند یا در مبنای ۱۶ (هگزادسیمال) داده شوند. بخش "NUMERIC ARGUMENTS" را در صفحه راهنمای sg3_utils(8) ببینید.

میزان تصحیح خطا و تعداد تلاش‌های مجدد پیش از اینکه یک بلوک معیوب در نظر گرفته شود، تا حدی توسط صفحه حالت Verify Error Recovery کنترل می‌شود. یادداشتی در پیش‌نویس SBC-3 (نگارش ۲۹، بخش 6.4.9 درباره صفحه حالت Verify Error Recovery) توصیه می‌کند که برای به حداقل رساندن تعداد بررسی‌ها (و در نتیجه داشتن «حساس‌ترین» بررسی اعتبارسنجی)، موارد زیر در آن صفحه حالت انجام شود: بیت EER روی ۰، بیت PER روی ۱، بیت DTE روی ۱، بیت DCR روی ۱، شمارنده تلاش مجدد اعتبارسنجی (verify retry count) روی ۰ و محدودیت زمانی بازیابی اعتبارسنجی (verify recovery time limit) روی ۰ تنظیم شوند. صفحات حالت را می‌توان با ابزار sdparm تغییر داد.

دستور SCSI VERIFY(6) که در استاندارد SSC-2 و پس از آن تعریف شده است (یعنی برای سامانه‌های درایو نوار مغناطیسی)، توسط این ابزار پشتیبانی نمی‌شود.

وضعیت خروج sg_verify در صورت موفقیت برابر با ۰ است. هنگامی که BCH مقداری غیر از ۰ داشته باشد، یک مقایسه صورت می‌گیرد و اگر با شکست مواجه شود، وضعیت خروج ۱۴ خواهد بود که همان مقدار کلید سنس MISCOMPARE است. در غیر این صورت، بخش EXIT STATUS در صفحه راهنمای sg3_utils(8) را ببینید.

نسخه‌های پیشین این ابزار در صورت بروز MISCOMPARE وضعیت خروج را روی ۹۸ تنظیم می‌کردند.

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

گزارش باگ‌ها را به <dgilbert at interlog dot com> ارسال کنید.

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

sdparm(sdparm), sg_modes(sg3_utils), sg_readcap(sg3_utils), sg_inq(sg3_utils)

December 2019 sg3_utils-1.45