SG_SEEK(8) SG3_UTILS SG_SEEK(8)

sg_seek - ارسال دستورات SEEK، PRE-FETCH(10) یا PRE-FETCH(16) در اسکازی (SCSI)

sg_seek [--10] [--count=NC] [--grpnum=GN] [--help] [--immed] [--lba=LBA] [--num-blocks=NUM] [--pre-fetch] [--readonly] [--skip=SB] [--time] [--verbose] [--version] [--wrap-offset=WO] DEVICE

یک دستور SEEK(10)، PRE-FETCH(10) یا PRE-FETCH(16) در اسکازی (SCSI) را به DEVICE ارسال می‌کند. دستور SEEK از زمان استاندارد SBC-2 (سال ۲۰۰۵) منسوخ شده است، اما همچنان در برخی از دیسک‌های سخت و حتی برخی درایوهای حالت جامد (SSD) پشتیبانی می‌شود. دستور PRE-FETCH را می‌توان به عنوان جایگزین مدرن SEEK در نظر گرفت. به‌جای اشاره به حرکت هدهای دیسک به شیار حاوی LBA مورد جستجو، از آوردن LBA مورد جستجو (و تعداد مشخصی بلوک) به حافظه نهان (کَش) دیسک سخن می‌گوید. همچنین دستورات PRE-FETCH دارای یک فیلد IMMED هستند.

دستورات PRE-FETCH می‌توانند خطاهای «واقعی» را گزارش دهند، اما معمولاً یکی از دو وضعیت «خوب» را گزارش می‌کنند. برای این منظور، آن‌ها وضعیت به‌ندرت استفاده‌شده CONDITION MET را برمی‌گردانند. اگر تعداد بلوک‌ها واقعاً در حافظه نهان جا شود (زمانی که IMMED=0 است) یا هنگام رسیدن دستور فضای کافی در حافظه نهان وجود داشته باشد (زمانی که IMMED=1 است)، وضعیت CONDITION MET بازگردانده می‌شود. اگر تعداد بلوک‌های درخواستی جا نشود (IMMED=0) یا جا نشود (IMMED=1)، وضعیت GOOD بازگردانده می‌شود؛ بنابراین اگر دیسک حافظه نهان بزرگی داشته باشد و از PRE-FETCH به‌ندرت استفاده شود، احتمال بازگرداندن CONDITION MET بیشتر از GOOD خواهد بود. این مسئله برای برخی از زیرسیستم‌های SCSI مشکلاتی ایجاد می‌کند، زیرا به دلیل نادری آن، با CONDITION MET رفتار نادرستی دارند و آن را به عنوان یک خطا در نظر می‌گیرند (بخش «نکات» زیر را ببینید).

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

استفاده از یک دستور cdb ده‌بایتی، یعنی یکی از دستورات SEEK(10) یا PRE-FETCH(10). در صورت عدم وجود گزینه --pre-fetch، از دستور SEEK(10) استفاده می‌شود. اگر گزینه --pre-fetch بدون این گزینه ارائه شود، از دستور PRE-FETCH(16) استفاده خواهد شد.
NC تعداد دستوراتی است (یکی از SEEK(10)، PRE-FETCH(10) یا PRE-FETCH(16)) که اجرا خواهند شد. مقدار پیش‌فرض ۱ است. در صورت بروز خطا، ثبت شده و برنامه تا پایان اجرای NC ادامه می‌یابد. اگر NC برابر ۰ باشد، گزینه‌ها بررسی شده و DEVICE باز می‌شود اما هیچ دستوری ارسال نخواهد شد.
GN شماره گروه است؛ مقداری بین ۰ تا ۶۳ (در مبنای ۱۶: 0x3f). مقدار پیش‌فرض ۰ است. اگر دستور انتخاب‌شده SEEK(10) باشد، این گزینه نادیده گرفته می‌شود.
نمایش پیام راهنمای نحوه استفاده و سپس خروج.
این گزینه فقط برای PRE-FETCH(10) و PRE-FETCH(16) اعمال می‌شود و بیت IMMED را تنظیم می‌کند. بدون این گزینه، DEVICE پس از تکمیل انتقال تمام یا بخشی از بلوک‌های درخواستی به حافظه نهان بازمی‌گردد. اگر این گزینه داده شود، DEVICE پس از انجام بررسی‌های صحت روی cdb (مانند اطمینان از اینکه LBA بیشتر از تعداد بلوک‌های موجود است) و قبل از انجام انتقال به حافظه نهان بازمی‌گردد.
توجه داشته باشید که حتی با وجود این گزینه، وضعیت بازگشتی از دستورات PRE-FETCH همچنان یکی از وضعیت‌های CONDITION MET (اگر به نظر برسد حافظه نهان فضای خالی کافی برای انتقال دارد) یا وضعیت GOOD (اگر به نظر نرسد حافظه نهان فضای خالی کافی دارد) است.
LBA نشانی بلوک منطقی آغازین است که در بلوک توصیف‌گر دستور (cdb) مربوط به دستور انتخاب‌شده قرار می‌گیرد. توجه داشته باشید که فیلد LBA در SEEK(10) و PRE-FETCH(10) یک مقدار ۳۲ بیتی است، در حالی که در PRE-FETCH(16) یک مقدار ۶۴ بیتی است. مقدار پیش‌فرض ۰ است.
NUM تعداد بلوک‌هایی است که از LBA شروع شده و شامل آن می‌شود تا در حافظه نهان DEVICE قرار گیرد. دستور SEEK(10) از مقدار NUM استفاده نمی‌کند. برای PRE-FETCH(10) مقدار NUM یک کمیت ۱۶ بیتی است، در حالی که برای PRE-FETCH(16) یک کمیت ۳۲ بیتی است. مقدار پیش‌فرض ۱ است. اگر NUM برابر ۰ باشد، DEVICE تلاش خواهد کرد تمام بلوک‌ها را از LBA داده‌شده تا انتهای رسانه منتقل کند.
این گزینه یکی از دستورات PRE-FETCH(10) یا PRE-FETCH(16) را انتخاب می‌کند. در صورتی که گزینه --10 نیز داده شود، دستور PRE-FETCH(10) انتخاب می‌شود؛ بدون آن گزینه، دستور PRE-FETCH(16) انتخاب خواهد شد. در حالت پیش‌فرض (در صورت نبود این گزینه و سایر گزینه‌های انتخاب‌کننده)، دستور SEEK(10) انتخاب می‌شود.
این گزینه پرچم «فقط‌خواندنی» (read-only) را هنگام باز کردن DEVICE توسط سیستم‌عامل زیرین تنظیم می‌کند. این ممکن است کار نکند، زیرا سیستم‌های عامل به‌راحتی نمی‌توانند تشخیص دهند که آیا یک عملیات عبوری (pass-through) یک عملیات خواندن یا نوشتن منطقی است، بنابراین جانب احتیاط را رعایت کرده و صرف‌نظر از آنچه توسط گذرگاه انجام می‌شود، نیازمند باز شدن DEVICE به‌صورت خواندن/نوشتن هستند.
SB تعداد نشانی‌های بلوک منطقی است که باید بین دستورات تکراری هنگامی که NC بزرگتر از ۱ است، رد شوند. مقدار پیش‌فرض SB برابر ۱ است. SB می‌تواند روی ۰ تنظیم شود تا تمام NC دستور PRE-FETCH از همان LBA استفاده کنند.
در صورت ارائه، زمان سپری‌شده برای اجرای NC دستور ثبت می‌شود. این زمان قبل از خروج این ابزار چاپ می‌شود. اگر NC بزرگتر از ۱ باشد، زمان «به ازای هر دستور» نیز چاپ می‌شود.
افزایش سطح پرگویی (یعنی خروجی اشکال‌زدایی).
چاپ رشته نگارش برنامه و سپس خروج.
WO تعداد بلوک‌هایی نسبت به LBA است که با فراتر رفتن از آن، نشانی بلوک منطقی دستور بعدی به LBA بازنشانی می‌شود. این که این عمل «بازنشانی به LBA» رخ دهد یا خیر، به مقادیر NC و SB بستگی دارد.

پیش از هسته لینوکس 4.17 وضعیت CONDITION MET به عنوان یک خطا در لاگ ثبت می‌شد. نگارش‌های اخیر FreeBSD با وضعیت CONDITION MET به‌درستی رفتار می‌کنند.

اگر گزینه --count=NC یا --verbose داده شود، یک خط خلاصه مانند زیر:

Command count=5, number of condition_mets=3, number of goods=2

قبل از خروج ابزار چاپ می‌شود.

وضعیت خروج sg_seek در صورت موفقیت‌آمیز بودن ابزار ۰ (GOOD) یا ۲۵ (CONDITION_MET) است. اگر چندین دستور اجرا شوند (مثلاً زمانی که NC بزرگتر از ۱ است)، نتیجه آخرین دستور SEEK یا PRE-FETCH اجراشده وضعیت خروج را تعیین می‌کند. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید.

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

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

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

sg_vpd(sg3_utils); sdparm(sdparm)

September 2018 sg3_utils-1.43