| SG_LUNS(8) | SG3_UTILS | SG_LUNS(8) |
نام (NAME)
sg_luns - ارسال دستور SCSI REPORT LUNS یا رمزگشایی LUN دادهشده
خلاصه دستور (SYNOPSIS)
sg_luns [--decode] [--help] [--hex] [--inhex=FN] [--inner-hex] [--json[=JO]] [--js-file=JFN] [--linux] [--lu_cong] [--maxlen=LEN] [--quiet] [--raw] [--readonly] [--select=SR] [--sinq_inraw=RFN] [--verbose] [--version] DEVICE
sg_luns --test=ALUN [--decode] [--hex] [--inner-hex] [--lu_cong] [--verbose]
توضیحات (DESCRIPTION)
در حالت اول نشان دادهشده در بخش «خلاصه دستور»، این ابزار دستور SCSI REPORT LUNS را به DEVICE ارسال کرده و پاسخ را نمایش میدهد. پاسخ باید فهرستی از LUNها («سیاهه یا موجودی LUN») برای پیوند I_T مرتبط با DEVICE باشد. به طور کلی این شامل تمامی LUNهایی است که در دستگاه هدفِ دریافتکننده دستور REPORT LUNS مشترک هستند. این دستور در استانداردهای SCSI مربوط به SPC-3 و SPC-4 تعریف شده و پشتیبانی از آن اجباری است. جدیدترین پیشنویس آن SPC-6 ویرایش ۱ است.
هنگامی که گزینه --test=ALUN مشخص شود (حالت دوم در بخش «خلاصه دستور»)، مقدار ALUN همانطور که در استانداردهای گوناگون مدل معماری SCSI (یا SAM) و پیشنویسهای اخیر (مانند SAM-6 ویرایش ۲، بخش ۴.۷) شرح داده شده، رمزگشایی میشود.
در ادامه هر جا لازم باشد، حالت اول نشان دادهشده در «خلاصه دستور» تحت عنوان «حالت دستگاه» (device mode) و حالت دوم «حالت آزمایشی» (test mode) نامیده میشود.
گزینهها (OPTIONS)
آرگومانهای گزینههای بلند برای گزینههای کوتاه نیز اجباری هستند.
- -d, --decode
- رمزگشایی
LUNها به
اجزای
تشکیلدهنده
آنها،
همانگونه
که در بخش LUN
در
استانداردهای
SAM-3، SAM-4 و SAM-5 شرح
داده شده
است.
[حالت آزمایشی] مقدار ALUN صرفنظر از اینکه این گزینه مشخص شود یا خیر، رمزگشایی میشود. اگر این گزینه یک بار مشخص شود، مقدار ALUN در قالب ترجیحی T10 (که شامل ۸ جفت رقم هگزادسیمال با فاصله میان هر جفت است) چاپ میشود. اگر دو بار مشخص شود، مقدار ALUN در قالب جایگزین T10 متشکل از چهار بخش چهارتایی از ارقام هگزادسیمال چاپ میشود که هر بخش با یک - جدا شده است (مانند C101-0000-0000-0000). - -h, --help
- نمایش پیام راهنمای استفاده و سپس خروج.
- -H, --hex
- [حالت
دستگاه] اگر
یک بار مشخص
شود، این
ابزار پاسخ
SCSI (یعنی بافر
data-out) به دستور REPORT
LUNS را در قالب
هگزادسیمال
ASCII نمایش
داده و خارج
میشود. اگر
دو بار مشخص
شود، باعث
میشود
گزینه --decode
فیلدهای
سازنده را
به جای
دهدهی در
قالب
هگزادسیمال
چاپ کند.
توجه داشته
باشید که
این رفتار
(نحوه
پردازش '-HH')
با توضیحات
موجود در
sg3_utils(8) متفاوت
است. گزینه
--inner-hex
عملکردی
مشابه '-HH'
دارد. اگر
این گزینه
سه بار (یا
بیشتر) مشخص
شود، خروجی
هگزادسیمال
برای ذخیره
در فایل و
استفاده
بعدی در
اجرای sg_luns به
همراه
گزینه --inhex=FN
مناسب
خواهد بود.
[حالت آزمایشی] اگر این گزینه مشخص شود، فیلدهای سازنده رمزگشاییشده از ALUN در قالب هگزادسیمال چاپ میشوند.
اگر این گزینه سه بار یا بیشتر داده شود، بایتهای هگزادسیمال ASCII (حداکثر ۱۶ بایت در هر خط) بدون آدرس یا نمایه آغازین در خروجی چاپ میشوند. این خروجی برای ذخیره در یک فایل و اجرای بعدی این ابزار جهت رمزگشایی با گزینه --inhex=FN مناسب است. اگر این گزینه چهار بار استفاده شود، یک خط توضیح (که با «#» آغاز میشود) پیش از مقادیر هگزادسیمال اضافه میگردد که مشخص میکند خروجی توسط چه ابزاری تولید شده است. فایلی که شامل چنین خطوط توضیحی باشد همچنان توسط گزینه --inhex=FN قابل پردازش و خواندن خواهد بود. - -i, --inhex=FN
- مقدار FN باید نام یک فایل (یا «-» برای ورودی استاندارد stdin) باشد که حاوی دادههای هگزادسیمال ASCII یا باینری نشاندهنده پاسخ REPORT LUNS است. این ابزار سپس آن پاسخ را رمزگشایی میکند. برای اطلاعات بیشتر به بخش «HEX, BINARY AND JSON FORMATS» در صفحه راهنمای sg3_utils مراجعه کنید. اگر گزینه --raw نیز مشخص شده باشد، با FN به عنوان یک فایل باینری رفتار میشود.
- -I, --inner-hex
- همراه با گزینه --decode استفاده میشود تا مقادیر رمزگشاییشده در قالب هگزادسیمال نمایش داده شوند. رفتار پیشفرض نمایش مقادیر رمزگشاییشده در قالب دهدهی است. این گزینه عملکردی مشابه '-HH' دارد، اما هدف استفاده از آن با این گزینه واضحتر است.
- -j[=JO], --json[=JO]
- خروجی به
جای متن
ساده در
قالب JSON
ارائه
میشود.
توجه داشته
باشید که
آرگومانهای
فرم کوتاه و
بلند خود
اختیاری
هستند و در
صورت وجود
با «=» آغاز
میشوند و
هیچ فاصله
خالی در
اطراف آن
«=» مجاز
نیست.
برای کسب اطلاعات بیشتر صفحه راهنمای sg3_utils_json را ببینید یا از «?» برای JO استفاده کنید تا خلاصه آن را دریافت نمایید. - -J, --js-file=JFN
- خروجی در
قالب JSON
تولید شده و
به فایلی به
نام JFN
ارسال
میشود. اگر
آن فایل
وجود داشته
باشد،
محتوای
پیشین آن
بازنویسی
میشود. به
طور
پیشفرض،
خروجی JSON به
خروجی
استاندارد
(stdout) ارسال
میشود.
هنگامی که این گزینه مشخص شود، گزینه --json[=JO] به طور ضمنی فعال شده و نیازی به ذکر آن نیست. با این حال ممکن است همچنان برای تنظیم پارامتر JO روی مقادیر غیر پیشفرض، به گزینه --json[=JO] نیاز باشد. - -l, --linux
- این گزینه فقط در لینوکس موجود است. پس از نمایش T10 هر LUN شصت و چهار بیتی (در قالب ۱۶ رقم هگزادسیمال)، در صورت تعیین این گزینه، در سمت راست درون براکت مقدار عدد صحیح LUN لینوکس در قالب دهدهی چاپ میشود. اگر گزینه --hex نیز دو بار داده شود (مانند -HH)، عدد صحیح LUN لینوکس در قالب هگزادسیمال نمایش داده میشود.
- -L, --lu_cong
- این گزینه
فقط همراه
با --decode در نظر
گرفته
میشود. اگر
یک بار مشخص
شود، فهرست
LUNها به
گونهای
رمزگشایی
میشود که
گویی بیت LU_CONG
در پاسخ INQUIRY
متناظر با
هر LU فعال (set)
بوده است.
اگر دو بار
مشخص شود،
فهرست LUNها
به گونهای
رمزگشایی
میشود که
گویی بیت LU_CONG
در پاسخ INQUIRY
متناظر با
هر LU پاک (clear)
بوده است.
هنگامی که
این گزینه
داده نشود و
--decode داده شده
باشد، یک
دستور INQUIRY به
DEVICE ارسال
شده و مقدار
بیت LU_CONG آن
برای
رمزگشایی
فهرست LUNها
به کار
گرفته
میشود.
[حالت آزمایشی] رمزگشایی ALUN به گونهای که گویی بیت LU_CONG در پاسخ استاندارد INQUIRY متناظر با آن فعال است؛ به بیان دیگر با ALUN مانند یک LUN مجتمع (conglomerate LUN) رفتار میکند. اگر داده نشود (یا دو بار داده شود)، ALUN به گونهای رمزگشایی میشود که گویی بیت LU_CONG پاک است. - -m, --maxlen=LEN
- که در آن LEN طول (حداکثر) پاسخ بر حسب بایت است و در فیلد «allocation length» مربوط به cdb قرار میگیرد. اگر داده نشود (یا مقدار LEN صفر باشد)، از مقدار ۸۱۹۲ استفاده میشود. حداکثر مقدار مجاز برای LEN برابر با ۱۰۴۸۵۷۶ است.
- -q, --quiet
- تنها نمایش هگزادسیمال ASCII مربوط به هر LUN گزارششده، یک مورد در هر خط چاپ میشود. بدون گزینه --quiet، اطلاعات هدر قبل از فهرست LUNها چاپ میشود.
- -r, --raw
- چاپ پاسخ SCSI (یعنی بافر data-out) به صورت باینری (در خروجی استاندارد stdout).
- -R, --readonly
- باز کردن DEVICE به صورت فقطخواندنی (مانند فلگ O_RDONLY در یونیکس). حالت پیشفرض باز کردن آن به صورت خواندنی-نوشتنی است.
- -s, --select=SR
- مقدار SR در
فیلد SELECT REPORT
دستور SCSI REPORT LUNS
قرار
میگیرد.
مقدار
پیشفرض 0
است. مقادیر
هگزادسیمال
میتوانند
با پیشوند
«0x» یا
پسوند «h»
مشخص شوند.
برای
اطلاعات
دقیق به
دستور REPORT LUNS در SPC
مراجعه
کنید
(جدیدترین
مورد SPC-4
ویرایش ۳۷
در بخش ۶.۳۳
است). به
بیان ساده،
برای پیوند
I_T مرتبط با
DEVICE، معانی
مقادیر SR
که تا به
امروز برای
SPC-4 تعریف
شدهاند
عبارتند از:
0 : اکثر LUNها به استثنای شمارههای واحد منطقی شناختهشده (well known) 1 : شمارههای واحد منطقی شناختهشده 2 : تمامی LUNهای قابل دسترسی برای این پیوند I_T 0x10 : تنها LUNهای مدیریتی در دسترس 0x11 : LUNهای مدیریتی به علاوه LUNهای غیرمجتمع (به SPC-4 مراجعه کنید) 0x12 : اگر DEVICE یک LU مدیریتی باشد، LUN آن را به همراه LUNهای تابع آن گزارش میکند
برای مقادیر SR برابر با 0x10 و 0x11، دستگاه DEVICE باید یا LUN 0 باشد یا واحد منطقی شناختهشده REPORT LUNS. مقادیر میان 0xf8 و 0xff (شامل هر دو) وابسته به سازنده (vendor specific) هستند و سایر مقادیر رزرو شدهاند. این ابزار هر مقداری بین 0 تا 255 (0xff) را برای SR میپذیرد. - -Q, --sinq_inraw=RFN
- که در آن RFN
نام فایلی
حاوی
دادههای
پاسخ
باینری
استاندارد
INQUIRY است که با
DEVICE یا FN
مطابقت
دارد.
لینوکس این
پاسخ
استاندارد
INQUIRY را در
شبهسیستمفایل
sysfs خود قرار
میدهد. یک
مسیر معمول
در /sys/class/scsi_device/<hctl>/device/inquiry
است که در
آن <hctl> یک
چندتایی
عددی
چهاربخشی
است که با
دونقطه از
هم جدا
شدهاند.
این
چندتایی
دستگاه را
از هر
دستگاه
دیگر در
سیستم
متمایز
میکند.
در حال حاضر با تعیین این گزینه، فیلد LU_CONG از پاسخ استاندارد INQUIRY خوانده میشود. گزینه --raw هیچ تأثیری بر این گزینه ندارد. آرگومان DEVICE میتواند همراه با این گزینه ارائه شود. - -t, --test=ALUN
- فرض میشود
که ALUN یک عدد
هگزادسیمال
در قالب ASCII hex
یا حرف 'L' به
همراه یک
عدد دهدهی
است (به
توضیحات
زیر مراجعه
کنید). عدد
هگزادسیمال
میتواند
تا ۶۴ بیت
باشد (یعنی
۱۶ رقم
هگزادسیمال)
و اگر کمتر
از ۱۶ رقم
هگزادسیمال
داده شود،
از سمت راست
با صفر پر (pad)
میشود
(برای مثال
--test=0122003a
نشاندهنده
T10 LUN به صورت: 01 22 00 3a 00
00 00 00 است). ALUN
میتواند
دارای
پیشوند '0x' یا
'0X' باشد (برای
مثال در
مورد قبل
میتوانست
به صورت --test=0x0122003a
نوشته شود).
ALUN همچنین
میتواند
با فاصله،
تب یا یک
کاراکتر '-'
بین هر بایت
(یا سایر
گروهبندیها
مانند c101-0000-0000-0000)
مشخص شود.
با این حال
در صورت
استفاده از
فاصله یا تب
به عنوان
جداکننده،
ALUN باید
درون
علامتهای
نقلقول
تکی یا
دوتایی
قرار گیرد.
در حالتی که 'L' در ابتدا بیاید، عدد دهدهی پس از آن (یا هگزادسیمال اگر با '0x' شروع شود) به عنوان LUN با «کلمات معکوسشده» (word flipped) در لینوکس در نظر گرفته میشود که به نمایش LUN در استاندارد T10 تبدیل و چاپ میشود. در هر دو حالت، عدد به عنوان یک LUN تفسیر شده و به گونهای رمزگشایی میشود که گویی گزینه --decode داده شده است. همچنین هنگامی که ALUN یک عدد هگزادسیمال باشد میتواند دارای پسوند 'L' باشد که در این صورت مقدار معادل LUN لینوکسی «word flipped» در خروجی چاپ میشود. LUN در تمام موارد رمزگشایی میگردد.
عملکرد هنگام استفاده به همراه --decode در ذیل همان گزینه توضیح داده شده است. - -v, --verbose
- افزایش سطح پرگویی (یعنی خروجی اشکالزدایی).
- -V, --version
- چاپ رشته نسخه و سپس خروج.
نکات (NOTES)
دستور SCSI REPORT LUNS برای شناسایی واحد منطقی (LU) اهمیت دارد. پس از کشف دستگاه هدف (معمولاً از طریق یک سازوکار ویژه پروتکل انتقال) و پس از ارسال دستور INQUIRY (جهت تعیین تنظیمات LU_CONG)، یک دستور REPORT LUNS باید یا به LUN 0 (که روش آدرسدهی دستگاه جانبی با bus_id=0 و target/lun=0 است) ارسال شود یا به LUN شناختهشده REPORT LUNS (یعنی 0xc101000000000000). استاندارد SAM-5 الزامی کرده است که یکی از این دو با سیاهه LUNهای موجود در این دستگاه هدف پاسخ دهد.
در حالت آزمایشی، اگر گزینه --hex یک بار داده شود، در خروجی رمزگشاییشده برخی از فیلدهای سازنده با صفر در ابتدا (leading zeros) در قالب هگزادسیمال چاپ میشوند. صفرهای ابتدایی برای نشان دادن اندازه فیلد سازنده هستند. به عنوان مثال: در روش آدرسدهی دستگاه جانبی (مجموعاً ۱۶ بیت)، شناسه گذرگاه (bus ID) دارای عرض ۶ بیت و فیلد target/LUN دارای عرض ۸ بیت است؛ بنابراین هر دو با دو رقم هگزادسیمال نمایش داده میشوند (مانند bus_id=0x02, target=0x3a).
مثالها (EXAMPLES)
معمولاً تا زمانی که برنامههای فضای کاربری اجرا شوند، LUهای SCSI شناسایی شدهاند. در لینوکس، ابزار lsscsi واحدهای منطقی را که در حال حاضر موجود هستند فهرست میکند. شناسه LUN یک دستگاه (LU) چهارمین عنصر در چندتایی ابتدای هر خط است. در زیر میبینیم که یک هدف (یا «پیوند I_T»: "6:0:0") دارای دو LUN است: 1 و 49409. اگر 49409 به قالب T10 LUN تبدیل شود، برابر با 0xc101000000000000 خواهد بود که همان LUN شناختهشده REPORT LUNS است.
# lsscsi -g [6:0:0:1] disk Linux scsi_debug 0004 /dev/sdb /dev/sg1 [6:0:0:2] disk Linux scsi_debug 0004 /dev/sdc /dev/sg2 [6:0:0:49409]wlun Linux scsi_debug 0004 - /dev/sg3
میتوانیم یک دستور REPORT LUNS (با مقدار SR برابر 0x0، 0x1 یا 0x2) به هر یک از این گرههای دستگاه فایلی ارسال کرده و نتیجه یکسانی بگیریم. در زیر از /dev/sg1 استفاده میکنیم:
# sg_luns /dev/sg1
Lun list length = 16 which implies 2 lun entries
Report luns [select_report=0x0]:
0001000000000000
0002000000000000
این خروجی کمی شلوغ است، بنابراین با استفاده از --quiet موارد اضافی را حذف میکنیم:
# sg_luns -q /dev/sg1 0001000000000000 0002000000000000
اکنون آن LUN را به اجزای سازنده آن رمزگشایی میکنیم:
# sg_luns -d -q /dev/sg1
0001000000000000
Peripheral device addressing: lun=1
0002000000000000
Peripheral device addressing: lun=2
اکنون از --select=1 استفاده میکنیم تا ببینیم آیا LUN شناختهشدهای وجود دارد یا خیر:
# sg_luns -q -s 1 /dev/sg1 c101000000000000
بنابراین در مجموع چند LUN داریم (مرتبط با پیوند I_T فعلی):
# sg_luns -q -s 2 /dev/sg1 0001000000000000 0002000000000000 c101000000000000
# sg_luns -q -s 2 -d /dev/sg1
0001000000000000
Peripheral device addressing: lun=1
0002000000000000
Peripheral device addressing: lun=1
c101000000000000
REPORT LUNS well known logical unit
مثال زیر از گزینه --linux استفاده میکند و در سایر سیستمهای عامل در دسترس نیست. عدد اضافه درون براکت، نسخه لینوکسی T10 LUN است که در ابتدای خط نشان داده شده است.
# sg_luns -q -s 2 -l /dev/sg1 0001000000000000 [1] 0002000000000000 [2] c101000000000000 [49409]
اکنون از گزینه --test= برای رمزگشایی LUNهای واردشده در خط فرمان استفاده میکنیم (به جای ارسال دستور REPORT LUNS و پردازش پاسخ):
# sg_luns --test=0002000000000000 Decoded LUN: Peripheral device addressing: lun=2
# sg_luns --test="c1 01" Decoded LUN: REPORT LUNS well known logical unit
# sg_luns -t 0x023a004b -H
Decoded LUN:
Peripheral device addressing: bus_id=0x02, target=0x3a
>>Second level addressing:
Peripheral device addressing: lun=0x4b
مثال بعدی مختص لینوکس است که در آن بررسی میکنیم LUN لینوکسی 49409 در دنیای T10 به چه مقداری تبدیل میشود:
# sg_luns --test=L49409 64 bit LUN in T10 preferred (hex) format: c1 01 00 00 00 00 00 00 Decoded LUN: REPORT LUNS well known logical unit
و نگاشت بین نمایشهای T10 و LUN لینوکس میتواند به روش معکوس نیز انجام شود:
# sg_luns -t c101L Linux 'word flipped' integer LUN representation: 49409 Decoded LUN: REPORT LUNS well known logical unit
وضعیت خروج (EXIT STATUS)
وضعیت خروج sg_luns در صورت اجرای موفق 0 است. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید.
نویسندگان (AUTHORS)
نوشتهشده توسط Douglas Gilbert.
گزارش باگها (REPORTING BUGS)
گزارش باگها به <dgilbert at interlog dot com>.
حق نشر (COPYRIGHT)
کپیرایت
© 2004-2023 Douglas Gilbert
این
نرمافزار
تحت مجوز BSD-2-Clause
توزیع
میشود. هیچ
ضمانتی
وجود
ندارد؛ حتی
برای
قابلیت
تجاری یا
تناسب با یک
هدف خاص.
همچنین ببینید (SEE ALSO)
sg_inq(8),sg3_utils(8)
| June 2023 | sg3_utils-1.48 |