| SG_INQ(8) | SG3_UTILS | SG_INQ(8) |
نام (NAME)
sg_inq - ارسال دستور SCSI INQUIRY و/یا رمزگشایی پاسخ آن
خلاصه دستور (SYNOPSIS)
sg_inq [--ata] [--block=0|1] [--cmddt] [--descriptors] [--export] [--extended] [--force] [--help] [--hex] [--id] [--inhex=FN] [--json[=JO]] [--js-file=JFN] [--len=LEN] [--long] [--maxlen=LEN] [--only] [--page=PG] [--quiet] [--raw] [--sinq_inraw=RFN] [--vendor] [--verbose] [--version] [--vpd] DEVICE
sg_inq [-36] [-a] [-A] [-b] [--B=0|1] [-c] [-cl] [-d] [-e] [-f] [-h] [-H] [-i] [-I=FN] [-j[=JO]] [-l=LEN] [-L] [-m] [-M] [-o] [-p=VPD_PG] [-P] [-q] [-r] [-s] [-u] [-v] [-V] [-x] [-36] [-?] DEVICE
توضیحات (DESCRIPTION)
این ابزار، هنگامی که DEVICE داده شده باشد، یک دستور SCSI INQUIRY به آن ارسال کرده و سپس پاسخ را در خروجی چاپ میکند. تمام دستگاههای SCSI طوری طراحی شدهاند که به یک دستور INQUIRY «استاندارد» با پاسخی دستکم ۳۶ بایتی (در SCSI 2 و بالاتر) پاسخ دهند. یک دستور INQUIRY زمانی «استاندارد» نامیده میشود که هر دو بیت EVPD و CmdDt (اکنون منسوخشده) پاک (صفر) باشند. از نظر رسمی (یعنی طبق استانداردهای SPC) نام پاسخ یک INQUIRY استاندارد، «قالب داده استاندارد INQUIRY» است، اما در اینجا عبارت «پاسخ استاندارد INQUIRY» به دلیل کوتاهتر و گویاتر بودن به کار رفته است.
به عنوان روشی دیگر میتوان گزینه --inhex=FN را به کار برد. در این حالت فرض میشود FN نام فایلی ('-' برای ورودی استاندارد stdin) حاوی مقادیر هگزادسیمال ASCII است که پاسخ INQUIRY را نشان میدهد.
این ابزار از دو نوع ساختار خط فرمان پشتیبانی میکند. ساختار ترجیحی ابتدا در بخش خلاصه دستور نشان داده شده و در بخش اصلی «گزینهها (OPTIONS)» شرح داده شده است. بخش بعدی با عنوان «گزینههای قدیمی خط فرمان (OLDER COMMAND LINE OPTIONS)» گروه دوم گزینهها را توصیف میکند.
یک صفحه INQUIRY «غیراستاندارد» مهم، صفحه اطلاعات حیاتی محصول (VPD) با عنوان شناسایی دستگاه (Device Identification) به شماره [0x83] است. از زمان استاندارد SPC-3، پشتیبانی از این صفحه اجباری است. گزینه --id این صفحه را رمزگشایی میکند. اطلاعات صفحات جدید VPD دیگر به این ابزار افزوده نمیشود. ابزار sg_vpd(8) برای رمزگشایی صفحات VPD تخصصی شده و به همین منظور از کدهای مشترک با این ابزار استفاده میکند. ابزار sdparm(8) که در بستهای به همین نام قرار دارد نیز صفحات VPD را رمزگشایی میکند، هرچند هدف اصلی آن دسترسی و اصلاح صفحات حالت (mode pages) در SCSI است.
در لینوکس، اگر DEVICE وجود داشته باشد اما SCSI INQUIRY شکست بخورد (به عنوان مثال به این دلیل که ioctl مربوط به SG_IO پشتیبانی نمیشود)، آنگاه دستور ATA IDENTIFY (PACKET) DEVICE امتحان میشود. اگر موفقیتآمیز باشد، رشتههای شناسایی دستگاه چاپ میشوند. گزینههای --raw و --hex میتوانند برای دستکاری خروجی استفاده شوند. اگر گزینه --ata داده شود، دستور SCSI INQUIRY اجرا نمیشود و فرض بر این قرار میگیرد که DEVICE یک دستگاه ATA (یا ATAPI) است. برای اطلاعات بیشتر بخش «دستگاههای ATA» را در ادامه ببینید.
در برخی سیستمهای عامل ممکن است یک دستگاه NVMe (مانند SSD) به عنوان DEVICE داده شود. برای اطلاعات بیشتر بخش «دستگاههای NVME» را در ادامه ببینید.
مستند مرجع استفادهشده برای تفسیر یک INQUIRY سند T10/BSR INCITS 566 Revision 6 یعنی پیشنویس SPC-6 مورخ ۲۲ اکتبر ۲۰۲۱ است که در نشانی https://www.t10.org یافت میشود. موارد منسوخشده و رزروشده در خروجی پاسخ استاندارد INQUIRY داخل براکت نمایش داده میشوند.
گزینهها (OPTIONS)
آرگومانهای گزینههای بلند برای گزینههای کوتاه نیز اجباری هستند. گزینهها بر اساس حروف الفبای نام گزینه بلند مرتب شدهاند.
- -a, --ata
- این گزینه
فقط در
لینوکس در
دسترس است.
فرض را بر
این
میگذارد
که DEVICE
دادهشده
یک دستگاه ATA
یا ATAPI است که
میتواند
دستورات ATA
را از
سیستمعامل
میزبان
دریافت کند.
از ارسال
دستور SCSI INQUIRY
صرفنظر
کرده و بسته
به نوع
دستگاه،
دستور ATA IDENTIFY DEVICE
(برای
دستگاههای
غیربستهای)
یا ATA IDENTIFY PACKET DEVICE را
به کار
میبرد.
علاوه بر
این، برای
نمایش پاسخ
در قالب
هگزادسیمال
(با طول ۵۱۲
بایت یا ۲۵۶
کلمه)،
گزینه --long یا
--verbose را اضافه
کنید.
DEVICE باید یک دستگاه بلوکی باشد (نه یک دستگاه عبورمستقیم مانند /dev/sg3) و مستقیماً متصل باشد (نه از طریق زیرساخت SAS). اگر DEVICE از طریق زیرساخت SAS متصل است نباید از این گزینه استفاده شود؛ در این حالت این ابزار با استفاده از لایه ترجمه SCSI به ATA (موسوم به SAT) گزارش خواهد داد. - -B, --block=0|1
- این گزینه نحوه باز شدن توصیفگر فایل مربوط به DEVICE را کنترل میکند. اگر این آرگومان ۰ باشد، باز کردن به صورت غیرمسدودکننده (non-blocking) خواهد بود. اگر آرگومان ۱ باشد، باز کردن مسدودکننده (blocking) خواهد بود. در یونیکس، باز کردن غیرمسدودکننده با فلگ O_NONBLOCK و باز کردن مسدودکننده با نبود این فلگ مشخص میشود. مقدار پیشفرض بستگی به سیستمعامل و نوع گره DEVICE دارد. برای دستگاههای عبورمستقیم لینوکس (مانند درایورهای sg و bsg) مقدار پیشفرض ۰ است.
- -c, --cmddt
- بیت دادههای پشتیبانی دستور یا Command Support Data (CmdDt) را تنظیم میکند (پیشفرض صفر یا پاکشده است). در ترکیب با گزینه --page=PG استفاده میشود که در آن PG کد عملیات (opcode) دستور SCSI مورد نظر را تعیین میکند. هنگامی که دو بار استفاده شود (مانند '-cc')، این ابزار با پیمایش روی تمام ۲۵۶ کد عملیات (از ۰ تا ۲۵۵) فهرستی ایجاد کرده و فقط خطوط مربوط به دستورات یافتشده را در خروجی چاپ میکند. بیت CmdDt اکنون منسوخ شده و دستور REPORT SUPPORTED OPERATION CODES جایگزین آن گردیده است؛ ابزار sg_opcodes(8) را ببینید.
- -d, --descriptors
- توصیفکنندههای نسخه (version descriptors) موجود در پاسخ استاندارد INQUIRY را رمزگشایی و چاپ میکند. حداکثر ۸ مورد از آنها وجود دارد. توصیفکنندههای نسخه مشخص میکنند که DEVICE با کدام نسخههای استانداردها و/یا پیشنویسها مطابقت دارد. اجزای معمول یک INQUIRY استاندارد چاپ شده (معمولاً از ۳۶ بایت نخست پاسخ) و به دنبال آن توصیفکنندههای نسخه در صورت وجود آورده میشوند.
- -e
- توضیحات مربوط به --vpd را در ادامه ببینید.
- -f, --force
- به عنوان یک
بررسی صحت
اولیه،
عملکرد
عادی هنگام
دریافت
صفحات VPD غیر
از صفحه 0x0
(صفحه «Supported VPD
pages»)، دریافت
اولیه صفحه
0x0 است و فقط
در صورتی که
صفحه
درخواستی
یکی از
صفحات
پشتیبانیشده
باشد،
دریافت
صفحه
درخواستی
ادامه
مییابد.
هنگامی که این گزینه داده شود، بررسی صفحه VPD 0x0 پیش از دسترسی به صفحه VPD درخواستی نادیده گرفته میشود. از آنجا که بررسی اولیه صفحه VPD 0x0 در برخی دستگاههای USB خاص باعث خرابی و کرش کردن میشود، با احتیاط استفاده کنید. - -u, --export
- اطلاعات
بهدستآمده
از دستگاه
را چاپ
میکند.
خروجی
میتواند
با انتخاب
یک صفحه VPD از
طریق PG (با
--page=PG) تغییر
یابد. اگر
صفحه
شناسایی
دستگاه (VPD 0x83)
داده شود،
خروجی به
شکل
«SCSI_IDENT_<assoc>_<type>=<ident>»
در stdout چاپ
میشود. اگر
صفحه شماره
سریال
دستگاه (VPD 0x80)
داده شود،
خروجی به
شکل «SCSI_SERIAL=<ident>»
چاپ میشود.
سایر صفحات
VPD پشتیبانی
نمیشوند.
اگر هیچ
صفحه VPD
تعیین
نشود،
خروجی به
صورت
«SCSI_VENDOR=<vendor>»،
«SCSI_MODEL=<model>» و
«SCSI_REVISION=<rev>»
استخراجشده
از inquiry
استاندارد
چاپ میشود.
این گزینه
میتواند
برای
ابزارهایی
مانند udev(7) در
لینوکس
مفید باشد.
این گزینه بر گزینههای JSON اولویت دارد و در صورت استفاده همزمان، گزینههای JSON نادیده گرفته خواهند شد. - -E, -x, --extended
- صفحه extended INQUIRY VPD به شماره [0x86] را چاپ میکند. اثری مشابه استفاده از گزینه --page=ei دارد.
- -h, --help
- پیام راهنمای نحوه استفاده را چاپ کرده و خارج میشود. در صورت استفاده دو بار، پس از پیام راهنما، فهرستی از اختصارات مجاز برای گزینه --page=PG نمایش داده میشود.
- -H, --hex
- به جای رمزگشایی پاسخ استاندارد INQUIRY، یک صفحه VPD یا دادههای پشتیبانی دستور، پاسخ را در قالب هگزادسیمال به stdout میفرستد. پیامهای خطا و هشدارها معمولاً به stderr فرستاده میشوند. در صورت استفاده دو بار به همراه صفحه ATA Information VPD به شماره [0x89]، ابتدای پاسخ را رمزگشایی کرده و سپس پاسخ ATA IDENTIFY (PACKET) DEVICE را در قالب بایتهای هگزادسیمال (نه کلمات ۱۶ بیتی) نمایش میدهد. در صورت استفاده سه بار همراه با صفحه ATA Information VPD به شماره [0x89] یا گزینه --ata، این ابزار پاسخ ATA IDENTIFY (PACKET) DEVICE را در قالب کلمات هگزادسیمال مناسب برای ورودی به دستور 'hdparm --Istdin' چاپ میکند. یادداشت زیر را ببینید.
- برای تولید خروجی مناسب جهت ذخیره در فایلی که بعداً با گزینه --inhex=FN قابل استفاده باشد، از گزینه '-HHHH' استفاده کنید (مانند 'sg_inq -p di -HHHH /dev/sg3 > dev_id.hex').
- -i, --id
- صفحه device identification VPD به شماره [0x83] را چاپ میکند. اثری مشابه استفاده از گزینه --page=di دارد.
- -I, --inhex=FN
- انتظار میرود FN نام فایلی (یا '-' برای stdin) باشد که حاوی دادههای هگزادسیمال ASCII یا باینری نشاندهنده یک پاسخ INQUIRY (از جمله صفحات VPD) است. سپس این ابزار پاسخ را رمزگشایی میکند. بهتر است گزینه --page=PG نیز ارائه شود، در غیر این صورت این ابزار تلاش میکند حدس بزند پاسخ با کدام صفحه VPD (یا INQUIRY استاندارد) مرتبط است. دادههای هگزادسیمال باید به صورت ۱ یا ۲ رقم بیانگر هر بایت باشند که با فاصله یا کاما از یکدیگر جدا شدهاند. هر چیزی از علامت هش (#) تا انتهای خط نادیده گرفته میشود. اگر گزینه --raw نیز داده شده باشد، FN به عنوان باینری در نظر گرفته میشود.
- -j[=JO], --json[=JO]
- خروجی به
جای متن
ساده در
قالب JSON
ارائه
میشود.
توجه داشته
باشید که
آرگومانهای
فرم کوتاه و
بلند
خودشان
اختیاری
هستند و در
صورت وجود
باید با "="
آغاز شوند و
هیچ
فاصلهای
در اطراف "="
مجاز نیست.
اگر گزینه --export نیز داده شده باشد، این گزینه نادیده گرفته میشود.
صفحه راهنمای sg3_utils_json را ببینید یا از '?' برای JO استفاده کنید تا خلاصهای دریافت نمایید. - -J, --js-file=JFN
- خروجی در
قالب JSON
تولید شده و
به فایلی با
نام JFN
ارسال
میشود. اگر
آن فایل
وجود داشته
باشد،
محتوای
قبلی آن پاک
میشود (truncated).
به طور
پیشفرض،
خروجی JSON به stdout
فرستاده
میشود.
هنگامی که این گزینه ارائه شود، گزینه --json[=JO] به طور ضمنی فعال است و نیازی به ذکر آن نیست. ممکن است همچنان برای تنظیم پارامتر JO به مقادیر غیرپیشفرض نیاز به ذکر گزینه --json[=JO] باشد.
اگر گزینه --export نیز داده شده باشد، این گزینه نادیده گرفته میشود. - -l, --len=LEN
- عدد LEN فیلد
«طول
تخصیص» (allocation length)
در cdb دستور INQUIRY
است. این،
طول
(حداکثر)
پاسخی است
که توسط
دستگاه
بازگردانده
میشود.
مقدار
پیشفرض LEN
صفر است که
بدین صورت
تفسیر
میشود:
درخواست
نخست برای
۳۶ بایت است
و در صورت
لزوم، اگر
فیلد «additional length»
در پاسخ
نشان دهد
بیش از ۳۶
بایت موجود
است، یک INQUIRY
دیگر اجرا
میشود.
اگر LEN بزرگتر از ۰ باشد، تنها یک دستور INQUIRY اجرا میشود. این بدان معناست که شماره سریال (بهدستآمده از صفحه Serial Number VPD به شماره 0x80) دریافت نشده و بنابراین چاپ نمیشود. بخش «نکات (NOTES)» را در ادامه درباره «INQUIRYهای ۳۶ بایتی» ببینید. - -L, --long
- این گزینه سبب میشود اطلاعات بیشتری از دستور Identify ارسالشده به یک DEVICE از نوع NVMe رمزگشایی شود.
- -m, --maxlen=LEN
- این گزینه عملکردی مشابه گزینه --len=LEN در بالا دارد. این گزینه برای سازگاری با ابزارهای sg_vpd، sg_modes و sg_logs اضافه شده است.
- -O, --old
- تغییر به گزینههای سبک قدیمیتر. لطفاً به عنوان اولین گزینه در خط فرمان استفاده شود.
- -o, --only
- تلاشی برای دریافت اضافی صفحه سریال نامبر VPD (0x80) جهت غنیسازی خروجی INQUIRY استاندارد انجام ندهد. بنابراین با درج این گزینه و بدون گزینههای دیگر، این ابزار یک دستور SCSI استاندارد INQUIRY ارسال کرده و پاسخ آن را رمزگشایی میکند. هیچ دستور SCSI دیگری به DEVICE ارسال نخواهد شد. بدون این گزینه، یک دستور SCSI اضافی ارسال میشود: یک SCSI INQUIRY (غیراستاندارد) برای دریافت صفحه Serial Number VPD. با این حال، صفحه Serial Number VPD اجباری نیست (در حالی که صفحه Device Identification اجباری است اما میلیاردها فلشمموری USB آن را نادیده میگیرند) و ممکن است هشدارهای خطای مزاحم ایجاد کند. در بیشتر موارد اگر گزینه --maxlen=LEN داده شده باشد و LEN بزرگتر از ۰ باشد، نیازی به این گزینه نیست.
- برای دستگاههای NVMe تنها عملیات Identify controller انجام میشود، حتی اگر DEVICE شامل یک شناسه فضای نام (namespace) باشد. برای مثال در FreeBSD اگر نام دستگاه /dev/nvme0ns1 باشد، دستور Identify controller به /dev/nvme0 ارسال میشود و چیزی به "ns1" (فضای نام اول) آن ارسال نخواهد شد.
- -p, --page=PG
- آرگومان PG میتواند یک عدد یا یک نام اختصاری برای یک صفحه VPD باشد. برای برشمردن اختصارات موجود برای صفحات VPD از '-hh' یا یک اختصار نامعتبر (مانند '--page=xxx') استفاده کنید. هنگامی که گزینه --cmddt ارائه شود (یک بار)، PG به عنوان شماره کد عملیات (opcode) تفسیر میشود (بنابراین اختصارات صفحه VPD در اینجا کاربردی ندارند).
- اگر PG عددی
منفی باشد،
یک INQUIRY
استاندارد
انجام
میشود. این
حالت
میتواند
برای
بازنویسی
برخی
منطقهای
حدسزدن
مرتبط با
گزینه --inhex=FN
استفاده
شود.
اگر PG در صفحه VPD «صفحات VPD پشتیبانیشده» (0x0) یافت نشود، خطای EDOM برگردانده میشود. برای نادیده گرفتن این بررسی از گزینه --force استفاده کنید.
- -q, --quiet
- کاهش میزان رمزگشایی و پیامهای خروجی خطا.
- -r, --raw
- در نبود
گزینه --inhex=FN،
پاسخ به
صورت
باینری در
خروجی چاپ
میشود.
هنگام
استفاده از
این گزینه،
خروجی باید
با
لولهکشی (pipe)
به یک فایل
یا ابزاری
دیگر
فرستاده
شود.
دادههای
باینری به stdout
و هرگونه
پیام خطا به
stderr فرستاده
میشوند.
اگر همراه با گزینه --inhex=FN استفاده شود، محتویات FN به عنوان باینری در نظر گرفته میشود. - -Q, --sinq_inraw=RFN
- در اینجا RFN
نام فایلی
حاوی
دادههای
باینری
پاسخ INQUIRY
استاندارد
است که با DEVICE
یا FN
مطابقت
دارد.
لینوکس این
پاسخ INQUIRY
استاندارد
را در
فایلسیستم
کاذب sysfs خود
قرار
میدهد. یک
مکان معمول
/sys/class/scsi_device/<hctl>/device/inquiry
است که در
آن <hctl> یک
چندتایی
چهاربخشی
عددی است که
با دونقطه
جدا شده
است. این
چندتایی،
دستگاه را
از هر
دستگاه
دیگر موجود
در سیستم
متمایز
میکند.
لینوکس
همچنین
برخی
پاسخهای
صفحات VPD را
به صورت
باینری در
همان
دایرکتوری
با
نامهایی
مانند "vpd_pg83"
قرار
میدهد که
دو رقم آخر
آن شماره
هگزادسیمال
صفحه VPD است
که محتوای
باینری در
آن قرار
دارد.
برخی صفحات VPD (مانند صفحه Extended Inquiry VPD) برای تفسیر فیلدهای درون خود به دانستن تنظیمات موجود در پاسخ استاندارد INQUIRY وابسته هستند. این گزینه همراه با --all، --examine یا --page=PG به این ابزار اجازه میدهد هم پاسخ استاندارد INQUIRY و هم صفحات VPD را در یک بار فراخوانی پردازش کند.
گزینه --raw هیچ تأثیری بر این گزینه ندارد. آرگومان DEVICE میتواند همراه با این گزینه ارائه شود. - -s, --vendor
- فیلدهای اختصاصی سازنده (vendor specific) در پاسخ استاندارد INQUIRY را از آفست ۳۶ تا ۵۵ در قالب ASCII چاپ میکند. در صورت استفاده دو بار (یعنی '-ss')، فیلد اختصاصی سازنده از آفست ۹۶ به بعد را نیز در قالب ASCII چاپ میکند. این کار تنها در صورتی انجام میشود که دادهها بررسیهای اولیه صحت را با موفقیت پشت سر بگذارند.
- -v, --verbose
- افزایش سطح گزارشدهی جزئیات. میتواند چندین بار استفاده شود.
- -V, --version
- چاپ رشته نسخه برنامه و سپس خروج.
- -e, --vpd
- بیت فعالسازی دادههای حیاتی محصول یا Enable Vital Product Data (EVPD) را تنظیم میکند (پیشفرض صفر یا پاکشده است). در ترکیب با گزینه --page=PG استفاده میشود که در آن PG شماره صفحه VPD مورد درخواست را مشخص میکند. اگر --page=PG داده نشود، PG به طور پیشفرض صفر در نظر گرفته میشود که همان صفحه «Supported VPD pages» است.
نکات (NOTES)
برخی دستگاهها با پیادهسازی ناقص مجموعه دستورات SCSI، هنگامی که دستوری دریافت میکنند که متوجه آن نمیشوند قفل میکنند (و برخی نیز اگر طول پاسخی غیر از آنچه انتظار دارند دریافت کنند دچار قفلشدگی میشوند). با چنین دستگاههایی باید با احتیاط رفتار کرد و از گزینه '--len=36' استفاده نمود. بدون این گزینه، این ابزار یک INQUIRY اولیه استاندارد ارسال میکند که ۳۶ بایت از دادههای پاسخ را درخواست مینماید. اگر دستگاه نشان دهد که میتوانسته دادههای بیشتری ارائه دهد، یک INQUIRY دوم برای دریافت پاسخ بلندتر ارسال میشود. آن دستور دوم ممکن است باعث قفل شدن دستگاههای دارای ایراد شود.
دستگاههای ATA یا ATAPI که از لایه ترجمه SCSI به ATA استفاده میکنند (SAT را در نشانی www.t10.org ببینید) ممکن است از صفحه SCSI ATA INFORMATION VPD پشتیبانی کنند. این صفحه در میان سایر موارد، پاسخ IDENTIFY (PACKET) DEVICE را بازمیگرداند. صفحه ATA Information VPD با '--page=ai' قابل دریافت است.
در پاسخ استاندارد INQUIRY یک فلگ 'MultiP' وجود دارد که وقتی دستگاه دارای ۲ یا چند پورت باشد تنظیم میشود. برخی سازندگان از بیت اختصاصی سازنده ('VS') پیشین برای نشان دادن اینکه کدام پورت توسط دستور INQUIRY در حال دسترسی است استفاده میکنند (0 -> پورت نسبی ۱ (پورت "a")، 1 -> پورت نسبی ۲ (پورت "b")). هنگامی که فلگ 'MultiP' تنظیم شده باشد، بیت اختصاصی سازنده پیشین درون پرانتز نشان داده میشود. دستگاههای سازگار با SPC-3 باید از صفحه device identification VPD به شماره (0x83) برای نشان دادن پورت مورد استفاده برای دسترسی و از صفحه SCSI ports VPD به شماره (0x88) برای نشان دادن تمام پورتهای موجود روی دستگاه استفاده کنند.
در سری هستههای ۲.۴ لینوکس، DEVICE باید یک دستگاه SCSI جنریک (sg) باشد. در سری ۲.۶ و بالاتر دستگاههای بلوکی (مانند دیسکها و DVDهای ATAPI) نیز میتوانند تعیین شوند. به عنوان مثال "sg_inq /dev/sda" در هستههای سری ۲.۶ کار خواهد کرد. از هسته ۲.۶.۶ به بعد سایر نامهای دستگاههای نویسهای SCSI (char) نیز میتوانند استفاده شوند (مانند "/dev/st0m").
تعداد بایتهای چاپشده توسط --hex و --raw برابر ۳۶ بایت یا عددی است که به --len=LEN (یا --maxlen=LEN) داده شده است. اگر "resid" بازگرداندهشده توسط HBA نشان دهد بایتهای کمتری از DEVICE بازگردانده شده است، آن عدد کاهش مییابد.
پارامتر DEVICE با فلگ فقطخواندنی باز میشود (برای مثال در یونیکس با فلگ O_RDONLY).
دستگاههای ATA (ATA DEVICES)
دو نوع اصلی از دستگاههای ATA وجود دارد: دستگاههای غیربستهای (مانند دیسکهای ATA) و دستگاههای بستهای (ATAPI). اکثر دستگاههای ATAPI درایوهای CD/DVD/BD هستند که در آنها انتقال داده ATAPI مجموعه MMC (یعنی یک مجموعه دستور SCSI) را حمل میکند. افزون بر این، هر دو نوع دستگاه ATA میتوانند از طریق یک انتقال «SCSI» (یا انتقالی دیگر) به رایانه میزبان متصل شوند. هنگامی که یک دیسک ATA از طریق یک انتقال SCSI (یا غیر ATA) کنترل میشود، معمولاً دو رویکرد به کار گرفته میشود: تونلزنی (مانند STP در SAS) یا شبیهسازی یک دستگاه SCSI (مثلاً با لایه ترجمه SCSI به ATA، SAT را در www.t10.org ببینید). حتی هنگامی که انتقال فیزیکی به کامپیوتر میزبان از نوع ATA باشد (بهویژه در مورد SATA)، سیستمعامل ممکن است تصمیم بگیرد یک لایه SAT در پشته درایور قرار دهد (مانند libata در لینوکس).
دستور شناسایی اصلی برای هر دستگاه SCSI یک INQUIRY است. دستور متناظر برای یک دستگاه غیربستهای ATA برابر IDENTIFY DEVICE است در حالی که برای یک دستگاه بستهای ATA برابر IDENTIFY PACKET DEVICE میباشد.
هنگامی که این ابزار برای یک دستگاه ATAPI فراخوانی شود (مثلاً یک درایو CD/DVD/BD با "sg_inq /dev/hdc")، یک دستور SCSI INQUIRY به دستگاه ارسال شده و در صورت پاسخدهی، پاسخ رمزگشایی و چاپ شده و ابزار خارج میشود. برای مشاهده پاسخ دستور ATA IDENTIFY PACKET DEVICE، گزینه --ata را اضافه کنید (مانند "sg_inq --ata /dev/hdc").
این ابزار پاسخ دستور ATA IDENTIFY (PACKET) DEVICE را رمزگشایی نمیکند؛ ابزار hdparm این کار را به خوبی انجام میدهد. گزینه '-HHH' برای استفاده با گزینه '--ata' یا '--page=ai' اضافه شده است تا فرمتی قابل قبول برای "hdparm --Istdin" تولید کند. یک مثال: 'sg_inq --ata -HHH /dev/hdc | hdparm --Istdin'. ابزار hdparm را ببینید.
دستگاههای NVME (NVME DEVICES)
در حال حاضر این دستگاهها معمولاً SSDهایی هستند که مستقیماً به یک شیار PCIe متصلاند یا از طریق رابطهای اختصاصی مانند M2 متصل شدهاند. لینوکس و FreeBSD دستگاههای ذخیرهسازی NVMe را جدا از ذخیرهسازهای SCSI در نظر میگیرند و نامهای دستگاهی مانند /dev/nvme0n1 (در لینوکس) و /dev/nvme0ns1 (در FreeBSD) دارند. گروه NVM Express سندی با عنوان "NVM Express: SCSI Translation Reference" دارد که یک «لایه ترجمه SCSI به NVMe» جزئی را تعریف میکند که اغلب با کوتهنوشت SNTL شناخته میشود.
در سیستمعاملهایی که این بسته از آنها پشتیبانی میکند، این ابزار دستگاههای ذخیرهسازی NVMe متصل به صورت مستقیم را شناسایی کرده و یک دستور Identify controller از نوع دستورات مدیریتی NVMe Admin ارسال و پاسخ آن را رمزگشایی میکند. یک کنترلر NVMe از لحاظ معماری شبیه به یک دستگاه هدف (target) در SCSI است. اگر DEVICE یک فضای نام (namespace) را مشخص کند، یک دستور Identify namespace از نوع دستورات مدیریتی NVMe Admin به آن فضای نام ارسال شده و پاسخ آن رمزگشایی میشود. فضاهای نام از عدد ۱ به صورت ترتیبی شمارهگذاری میشوند. فضاهای نام شبیه به واحدهای منطقی SCSI (یا LUNها) هستند و شناسههای آنها (nsid) را میتوان مانند SCSI LUNها در نظر گرفت. در مثالهای لینوکس و FreeBSD بالا، بخشهای "n1" و "ns1" نشاندهنده nsid 1 هستند. اگر هیچ فضای نامی در DEVICE مشخص نشده باشد، به تمام فضاهای نام یافتشده در کنترلر دستورات Identify namespace ارسال شده و پاسخها رمزگشایی میشوند.
برای دریافت جزئیات بیشتر در پاسخ، گزینه --long را به کار ببرید. برای اینکه تنها بخش Identify کنترلر رمزگشایی شود، گزینه --only را استفاده کنید.
این امکان وجود دارد که حتی اگر DEVICE به صورت یک دستگاه NVMe نشان داده شود، دارای یک لایه SNTL باشد و دستورات SCSI را بپذیرد. در این حالت برای ارسال دستور SCSI INQUIRY (و دریافت صفحات VPD آن) از ابزار sg_vpd(8) استفاده کنید.
ارتباط SG_INQ و SG_VPD (SG_INQ and SG_VPD)
هر دوی این ابزارها اشتراکات زیادی دارند، زیرا صفحات VPD با دستور SCSI INQUIRY دریافت میشوند. از آنجا که صفحات VPD بیشتری اضافه شدند (و صفحات قبلی گسترش یافتند)، موارد جدیدتر تنها با sg_vpd رمزگشایی میشدند. اخیراً همراه با اضافه شدن امکان خروجی در قالب JSON، تصمیم گرفته شد که تمام رمزگشاییهای صفحات VPD در یک فایل مبدأ به نام sg_vpd_common.c قرار گیرد که هم توسط sg_inq و هم توسط sg_vpd پیوند داده میشود.
این بدان معناست که توانمندیهای رمزگشایی صفحات VPD در هر دو ابزار sg_inq و sg_vpd یکسان خواهد بود. اقدامات پیشفرض آنها همانند گذشته باقی میماند، بدین صورت که وقتی sg_inq بدون گزینههای خط فرمان استفاده میشود، پاسخ «قالب داده استاندارد INQUIRY» (معمولاً «پاسخ استاندارد INQUIRY») را رمزگشایی میکند، در حالی که وقتی sg_vpd بدون گزینهها به کار میرود، صفحه VPD موسوم به «Supported VPD pages» را رمزگشایی میکند.
وضعیت خروج (EXIT STATUS)
وضعیت خروج sg_inq در صورت موفقیت برابر ۰ است. در غیر این صورت صفحه راهنمای sg3_utils(8) را ببینید.
گزینههای قدیمی خط فرمان (OLDER COMMAND LINE OPTIONS)
گزینههای این بخش تنها گزینههای موجود پیش از نسخه ۱.۲۳ بسته sg3_utils بودند. از آن زمان به بعد این ابزار به طور پیشفرض گزینههای جدیدتر خط فرمان را استفاده میکند که میتواند با درج --old (یا -O) به عنوان اولین گزینه بازنویسی شود. بخش «متغیرهای محیطی» را برای روشی دیگر جهت اجبار به استفاده از این گزینههای قدیمی خط فرمان ببینید.
- -36
- تنها ۳۶ بایت از دادههای پاسخ را برای یک INQUIRY درخواست میکند. علاوه بر این، حتی اگر دستگاه در پاسخ خود نشان دهد که میتواند دادههای بیشتری ارائه دهد، یک INQUIRY دوم (بلندتر) اجرا نمیشود. این یک تنظیمات بسیار محتاطانه است. معادل با '--len=36' در بخش «گزینهها» میباشد.
- -a
- صفحه ATA Information VPD به شماره [0x89] را دریافت میکند. معادل '--page=ai' در بخش «گزینهها» است. این صفحه در SAT تعریف شده است (نشانی www.t10.org را ببینید).
- -A
- فرض را بر این میگذارد که DEVICE دادهشده یک دستگاه ATA یا ATAPI است. معادل --ata در بخش «گزینهها».
- -b
- صفحه Block Limits VPD به شماره [0xb0] را رمزگشایی میکند. معادل '--page=bl' در بخش «گزینهها» است. این صفحه در SBC-2 (نشانی www.t10.org را ببینید) و بعد از آن تعریف شده است.
- -B=0|1
- معادل با --block=0|1 در بخش «گزینهها».
- -c
- بیت Command Support Data (CmdDt) را تنظیم میکند (پیشفرض صفر است). در ترکیب با گزینه -p=VPD_PG برای تعیین کد عملیات دستور SCSI جهت پرسوجو استفاده میشود. معادل --cmddt در بخش «گزینهها».
- -cl
- دادههای دستوری را برای تمام دستورات پشتیبانیشده (همراه با نام دستور) با پیمایش روی تمام ۲۵۶ کد عملیات فهرست میکند. این گزینه از بیت CmdDt استفاده میکند که اکنون منسوخ شده است. ابزار sg_opcodes(8) را ببینید. معادل با '--cmddt --cmddt' در بخش «گزینهها».
- -d
- بسته به زمینه عمل رمزگشایی را انجام میدهد. اگر گزینه -e داده شود یا هر گزینهای که مستلزم -e باشد (مانند '-i' یا '-p=80')، آنگاه این ابزار تلاش میکند صفحه VPD مشخصشده را رمزگشایی کند. در غیر این صورت، توصیفکنندههای نسخه (در صورت وجود) پس از پاسخ INQUIRY استاندارد فهرست میشوند. از نظر توصیفکنندههای نسخه، معادل --descriptors در بخش «گزینهها» است.
- -e
- بیت Vital Product Data (EVPD) را فعال (تنظیم) میکند (پیشفرض صفر است). در ترکیب با گزینه -p=VPD_PG برای تعیین صفحه VPD جهت دریافت استفاده میشود. اگر -p=VPD_PG داده نشود، صفحه VPD 0 (فهرست صفحات VPD پشتیبانیشده) فرض میشود.
- -f
- معادل --force در بخش «گزینهها».
- -h
- پاسخ INQUIRY را به جای تلاش برای رمزگشایی به صورت هگزادسیمال چاپ میکند. معادل --hex در بخش «گزینهها».
- -H
- عملکرد مشابه با -h. معادل --hex در بخش «گزینهها».
- -i
- صفحه Device Identification VPD به شماره [0x83] را رمزگشایی میکند. معادل --id در بخش «گزینهها». این صفحه از چندین «توصیفکننده تعیین» (designation descriptors) تشکیل شده است. اگر -h داده شود، هدر هر توصیفکننده رمزگشایی شده و خود شناسه به صورت هگزادسیمال چاپ میشود. برای مشاهده کل پاسخ صفحه VPD 0x83 به صورت هگزادسیمال از '-p=83 -h' استفاده کنید.
- -I=FN
- معادل با --inhex=FN در بخش «گزینهها».
- -j[=JO]
- معادل با --json[=JO] در بخش «گزینهها».
- -l=LEN
- معادل با --len=LEN در بخش «گزینهها».
- -L
- معادل با --long در بخش «گزینهها».
- -m
- صفحه Management network addresses VPD به شماره [0x85] را رمزگشایی میکند. معادل --page=mna در بخش «گزینهها».
- -M
- صفحه Mode page policy VPD به شماره [0x87] را رمزگشایی میکند. معادل --page=mpp در بخش «گزینهها».
- -N, --new
- تغییر به گزینههای سبک جدیدتر.
- -o
- معادل با --only در بخش «گزینهها».
- -p=VPD_PG
- در ترکیب با گزینه -e یا -c استفاده میشود. اگر هیچکدام داده نشوند، گزینه -e فرض میشود. هنگامی که گزینه -e نیز داده شود (یا فرض شود)، آرگومان این گزینه شماره صفحه VPD است. آرگومان به صورت هگزادسیمال تفسیر میشود و انتظار میرود در محدوده 0 تا ff باشد. تنها صفحه VPD 0 رمزگشایی میشود و صفحات VPD پشتیبانیشده و نام آنها (در صورت شناخته بودن) را فهرست میکند. برای رمزگشایی صفحه اجباری شناسایی دستگاه (0x83) از گزینه -i استفاده کنید. یک کاربرد اکنون منسوخشده زمانی است که گزینه -c داده شده باشد که در آن صورت آرگومان این گزینه به عنوان شماره کد عملیات دستور فرض میشود. استانداردهای پیشنویس اخیر SCSI این امکان را به یک دستور جداگانه منتقل کردهاند (ابزار sg_opcodes(8) را ببینید). مقدار پیشفرض ۰ است بنابراین اگر -e بدون این گزینه داده شود، صفحه VPD 0 در خروجی چاپ میشود.
- -P
- صفحه Unit Path Report VPD به شماره [0xc0] که مختص EMC است را رمزگشایی میکند. معادل --page=upr در بخش «گزینهها».
- -r
- پاسخ را به صورت باینری در stdout چاپ میکند. معادل --raw در بخش «گزینهها». میتواند دو بار استفاده شود (یعنی '-rr' (و '-HHH' اثری مشابه دارد)) و اگر همراه با گزینه -A یا -a استفاده شود، خروجی با فرمتی مشابه "cat /proc/ide/hd<x>/identify" تولید میکند به طوری که میتوان آن را به "hdparm --Istdin" هدایت کرد.
- -s
- صفحه SCSI Ports VPD به شماره [0x88] را رمزگشایی میکند. معادل --page=sp در بخش «گزینهها».
- -u
- معادل با --export در بخش «گزینهها».
- -v
- افزایش سطح گزارشدهی جزئیات. میتواند چندین بار استفاده شود.
- -V
- چاپ رشته نسخه برنامه و سپس خروج.
- -x
- صفحه Extended INQUIRY data VPD به شماره [0x86] را رمزگشایی میکند. معادل --page=ei در بخش «گزینهها».
- -?
- نمایش پیام نحوه استفاده و خروج. تمام پارامترهای دیگر نادیده گرفته میشوند.
مثالها (EXAMPLES)
مثالهای این صفحه از نامهای دستگاههای لینوکس استفاده میکنند. برای نامهای دستگاههای مناسب در سایر سیستمهای عامل پشتیبانیشده، صفحه راهنمای sg3_utils(8) را ببینید.
برای مشاهده پاسخ inquiry استاندارد، بدون گزینهها اجرا کنید:
sg_inq /dev/sda
برخی دستگاههای SCSI شامل توصیفکنندههای نسخه هستند که استانداردهای مختلف و پیشنویسهای پشتیبانیشده را نشان میدهند. آنها را میتوان با دستور زیر مشاهده کرد:
sg_inq -d /dev/sda
دستگاههای مدرن SCSI شامل صفحات دادههای حیاتی محصول (VPD) هستند که میتوان با دستور SCSI INQUIRY مشاهده نمود. برای فهرست کردن صفحات VPD پشتیبانیشده (اما نه محتویات آنها) دستور زیر را امتحان کنید:
sg_inq -e /dev/sda
در لینوکس، تصاویر باینری برخی از صفحات مهم VPD (مانند 0، 80h و 83h) در فایلهایی در سیستمفایل کاذب sysfs کش میشوند. از آنجا که صفحات VPD به ندرت محتوای خود را تغییر میدهند، رمزگشایی آن فایلها خروجی مشابهی با کاوش مستقیم دستگاه خواهد داد، با این مزیت اضافی که رمزگشایی آن فایلها به دسترسی ریشه (root) نیازی ندارد. اگر /dev/sg3 یک دیسک در آدرس 2:0:0:0 باشد، این سه فراخوانی خروجی یکسانی خواهند داشت:
sg_inq --raw --inhex=/sys/class/scsi_generic/sg3/device/vpd_pg83
sg_inq -rI /sys/class/scsi_generic/sg3/device/vpd_pg83
sg_inq -r -I /sys/class/scsi_disk/2:0:0:0/device/vpd_pg83
بدون گزینه --raw، گزینه --inhex=FN انتظار دارد محتوای آن فایلها هگزادسیمال باشد. فایل vpd_pg83 شامل پاسخ (به صورت باینری) مربوط به صفحه Device Identification VPD است که شماره صفحه آن 83h (یعنی در مبنای ۱۶) است.
برخی صفحات VPD را میتوان با ابزار sg_inq خواند، اما ابزار جدیدتری به نام sg_vpd به طور ویژه برای نمایش محتویات آنها طراحی شده است. ابزار sdparm نیز میتواند برای نمایش محتویات صفحات VPD به کار رود.
مثالهای بیشتر از sg_inq به همراه برخی خروجیهای نمونه را میتوان در صفحه وب https://sg.danny.cz/sg/sg3_utils.html یافت.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
از نسخه ۱.۲۳ بسته sg3_utils متغیر محیطی SG3_UTILS_OLD_OPTS میتواند ارائه شود. هنگام وجود آن، این ابزار انتظار گزینههای خط فرمان سبک قدیمیتر را خواهد داشت. بنابراین وجود این متغیر محیطی معادل استفاده از --old (یا -O) به عنوان اولین گزینه خط فرمان است.
نویسنده (AUTHOR)
نوشتهشده توسط Douglas Gilbert
گزارش باگها (REPORTING BUGS)
گزارش باگها را به <dgilbert at interlog dot com> ارسال کنید.
حق نشر (COPYRIGHT)
حق نشر © 2001-2026
Douglas Gilbert
این
نرمافزار
تحت مجوز GPL
نسخه ۲ یا BSD-2-Clause
توزیع
میشود. هیچ
تضمینی
وجود
ندارد؛ حتی
برای
قابلیت
فروش یا
مناسب بودن
برای یک هدف
خاص.
همچنین ببینید (SEE ALSO)
sg_opcodes(8), sg_vpd(8), sg_logs(8), sg_modes(8), sg_decode_sense(8), sdparm(8), hdparm(8), sgdiag(scsirastools)
| 2026-07-13 | sg3_utils-1.49 |