| SG_WR_MODE(8) | SG3_UTILS | SG_WR_MODE(8) |
نام (NAME)
sg_wr_mode - نوشتن (تغییر) صفحه حالت (mode page) در دستگاه SCSI
خلاصه دستور (SYNOPSIS)
sg_wr_mode [--cfile=CF] [--contents=H,H...] [--dbd] [--force] [--help] [--len=10|6] [--mask=M,M...] [--mfile=MF] [--page=PG_H[,SPG_H]] [--raw] [--rtd] [--save] [--six] [--verbose] [--version] DEVICE
توضیحات (DESCRIPTION)
یک صفحه حالت تغییریافته را در DEVICE مینویسد. از دستور SCSI MODE SENSE (گونه ۶ یا ۱۰ بایتی) برای واکشی دادههای حالت موجود که شامل یک صفحه حالت (یا زیرصفحه) است استفاده میکند. سپس آن را با محتویات دادهشده، که ممکن است ماسک شده باشند، ترکیب کرده و صفحه حالت تغییریافته را با دستور SCSI MODE SELECT (گونه ۶ یا ۱۰ بایتی) مینویسد. این ابزار توصیفگر(های) بلوک را تغییر نمیدهد؛ اگر هر توصیفگر بلوکی توسط دستور MODE SENSE واکشی شود، همان توصیفگرهای بلوک با دستور MODE SELECT بعدی بازنویسی میشوند.
اگر گزینه --rtd مشخص شود، بیشتر گزینههای دیگر به جز --save، --len=10|6 و --six نادیده گرفته میشوند. در این حالت تنها یک دستور MODE SELECT با بیت RTD (بازگشت به مقادیر پیشفرض یا Revert To Defaults) تنظیمشده به DEVICE ارسال میشود. این بیت در بازنگری ۱۱ استاندارد SPC-5 به این دستور افزوده شد، بنابراین ممکن است دستگاههای قدیمیتر از آن پشتیبانی نکنند. صفحه Extended Inquiry VPD دارای بیت RTD_SUP است که نشان میدهد آیا DEVICE از بیت RTD در دستورات MODE SELECT (گونههای ۶ و ۱۰ بایتی) پشتیبانی میکند یا خیر. هنگامی که گزینه --rtd داده شود، بقیه این بخش را میتوان نادیده گرفت.
اگر گزینه محتویات (contents) مشخص نشود، مؤلفههای مختلف (یعنی سرآیند، توصیفگر(های) بلوک و صفحه حالت) مقادیر «فعلی» (current) صفحه حالت موجود چاپ میشوند. در این حالت صفحه حالت روی دستگاه تغییر نمیکند.
اگر محتویات مشخص شده باشد و ماسک مشخص نشده باشد، محتویات باید در جنبههای مختلف با صفحه حالت موجود مطابقت داشته باشد، مگر اینکه گزینه --force داده شده باشد. این موارد شامل طول، کد صفحه حالت و در صورت کاربرد، کد زیرصفحه است. اگر همه چیز درست باشد، رشته محتویات به عنوان صفحه حالت جدید روی DEVICE نوشته میشود.
اگر هر دو رشته محتویات و ماسک مشخص شده باشند، تنها موقعیتهای بیتی در محتویات که متناظر با بیتهای ۱ (تنظیمشده) در ماسک هستند اعمال میشوند، در حالی که صفحه حالت موجود موقعیتهای بیتی متناظر با بیتهای ۰ (پاکشده) را تامین میکند. هنگامی که ماسک مشخص شود، ماسک و/یا محتویات ممکن است کوتاهتر از صفحه حالت موجود باشند. اگر ماسک کوتاهتر از محتویات باشد، بایتهای باقیمانده از محتویات گرفته میشوند. اگر محتویات کوتاهتر از صفحه حالت موجود باشد، بایتهای باقیمانده از صفحه حالت موجود گرفته میشوند (یعنی دستنخورده باقی میمانند).
گزینه force اجازه میدهد رشته محتویات بدون هیچگونه بررسی قبلی روی صفحه حالت موجود، به عنوان صفحه حالت جدید نوشته شود. این گزینه معمولاً فقط برای صفحات حالت خاص سازنده (vendor specific) نیاز است. دادههای حالت موجود به جز توصیفگرهای بلوک که در صورت نیاز میتوان آنها را با گزینه --dbd سرکوب کرد، نادیده گرفته میشوند.
تغییر فیلدهای منفرد در یک صفحه حالت احتمالاً با استفاده از ابزار sdparm آسانتر انجام میشود. فیلدها را میتوان با نام اختصاری یا با یک توصیفگر عددی مشخص کرد.
گزینهها (OPTIONS)
آرگومانهای گزینههای طولانی برای گزینههای کوتاه نیز الزامی هستند.
- -C, --cfile=CF
- که در آن CF نام فایلی است که حاوی صفحه حالت است. برای اطلاعات بیشتر بخش "HEX, BINARY AND JSON FORMATS" را در صفحه راهنمای sg3_utils ببینید. اگر گزینه --raw نیز داده شود، محتویات CF به عنوان باینری در نظر گرفته میشود.
- -c, --contents=H,H...
- که در آن H,H... رشتهای از اعداد هگزادسیمال جدا شده با کاما است که هر یک از آنها باید به مقدار یک بایت تبدیل شود (یعنی بین 0 تا ff فراگیر). رشتهای از اعداد هگز جدا شده با یک فاصله (تک فاصله) نیز مجاز است، اما این فهرست باید درون نقلقول قرار گیرد. این محتویات جدید صفحه حالت است که قرار است روی DEVICE نوشته شود و احتمالاً توسط رشته ماسک فیلتر شده است.
- -c, --contents=-
- رشته محتویات را از ورودی استاندارد (stdin) میخواند. گزینه --cfile=CF در بالا را ببینید.
- -d, --dbd
- غیرفعال کردن توصیفگرهای بلوک (فلگ DBD در cdb). برخی از انواع دستگاهها توصیفگرهای بلوک را در دادههای حالت بازگردانده شده توسط دستور MODE SENSE قرار میدهند. اگر چنین باشد، همان توصیفگرهای بلوک توسط دستور MODE SELECT نوشته میشوند. این گزینه به دستور MODE SENSE دستور میدهد که هیچ توصیفگر بلوکی را بازنگرداند. این میتوانست یک مقدار پیشفرض معقول برای این ابزار باشد، با این حال همه دستگاههای SCSI از بیت DBD در cdb پشتیبانی نمیکنند.
- -f, --force
- اجبار میکند که رشته محتویات به عنوان صفحه حالت جدید در نظر گرفته شود، یا دستکم بررسیهایی روی صفحه حالت موجود انجام ندهد. توجه داشته باشید که ممکن است DEVICE همچنان محتویات جدید صفحه حالت را رد کند. نمیتواند همراه با گزینه --mask=M,M... استفاده شود.
- -h, --help
- نمایش پیام راهنما و خروج.
- -l, --len=10 | 6
- طول دستورات SCSI (دستورات cdb) ارسالشده به DEVICE. پیشفرض 10 است، بنابراین دستورات ۱۰ بایتی MODE SENSE و MODE SELECT صادر میشوند. برخی دستگاههای قدیمی از گونههای ۱۰ بایتی پشتیبانی نمیکنند، از این رو این گزینه فراهم شده است.
- -m, --mask=M,M...
- که در آن M,M... رشتهای از اعداد هگزادسیمال جدا شده با کاما است که هر یک از آنها باید به مقدار یک بایت تبدیل شود (یعنی بین 0 تا ff فراگیر). رشتهای از اعداد هگز جدا شده با یک فاصله (تک فاصله) نیز مجاز است، اما این فهرست باید درون نقلقول قرار گیرد. ماسک (بیت به بیت) مشخص میکند که صفحه حالت جدید از محتویات گرفته شود (بیت ماسک ۱ باشد) یا از صفحه حالت موجود (بیت ماسک ۰ باشد). اگر رشته ماسک کوتاهتر از رشته محتویات باشد، بایتهای باقیمانده از رشته محتویات گرفته میشوند. اگر رشته محتویات کوتاهتر از صفحه حالت موجود باشد، بایتهای باقیمانده از صفحه حالت موجود گرفته میشوند (یعنی دستنخورده باقی میمانند).
- -M, --mfile=MF
- که در آن MF نام فایلی حاوی ماسک صفحه حالت است. برای اطلاعات بیشتر بخش "HEX, BINARY AND JSON FORMATS" را در صفحه راهنمای sg3_utils ببینید. اگر گزینه --raw نیز داده شود، محتویات MF به عنوان باینری در نظر گرفته میشود.
- -p, --page=PG_H
- که در آن PG_H مقدار کد صفحه برای واکشی و تغییر است. کد صفحه به صورت هگزادسیمال است و باید بین 0 تا 3e فراگیر باشد. توجه کنید که کد صفحه 3f برای واکشی تمام صفحات حالت غیرمجاز است.
- -p, --page=PG_H,SPG_H
- که در آن PG_H مقدار کد صفحه و SPG_H مقدار کد زیرصفحه برای واکشی و تغییر است. هر دو مقدار به صورت هگزادسیمال هستند. کد زیرصفحه باید بین 0 تا fe فراگیر باشد. توجه کنید که کد زیرصفحه ff برای واکشی تمام زیرصفحات حالت (برای یک صفحه حالت مشخص، یا تمام صفحات حالت در مورد 3f,ff) غیرمجاز است.
- -r, --raw
- هنگامی که این گزینه داده شود، فایلی که با گزینه --cfile=CF مشخص شده است به عنوان باینری در نظر گرفته میشود (پیشفرض این است که به عنوان هگزادسیمال ASCII در نظر گرفته شود).
- -R, --rtd
- هنگامی که این گزینه داده شود، بیشتر اقدامات دیگر نادیده گرفته میشوند و یک دستور MODE SELECT (گونه ۶ یا ۱۰ بایتی) با بیت تنظیمشده RTD به DEVICE ارسال میشود. این کار باعث میشود تمام مقادیر جاری (و مقادیر ذخیرهشده، در صورتی که گزینه --save نیز داده شده باشد) در تمام صفحات حالت به مقادیر پیشفرض خود بازگردانده شوند.
- -s, --save
- هنگامی که MODE
SELECT با موفقیت
انجام شود،
صفحه حالت
«ذخیرهشده»
(saved) را تغییر
میدهد. به
طور
پیشفرض
(یعنی زمانی
که از --save
استفاده
نمیشود) با
موفقیتآمیز
بودن MODE SELECT
تنها
مقادیر
«فعلی» (current)
صفحه حالت
تغییر
میکنند. در
این حالت
صفحه حالت
جدید تا
زمانی که
دستگاه
بازنشانی
شود (مانند
قطع و وصل
برق) پابرجا
خواهد ماند.
هنگامی که
دستگاه
راهاندازی
مجدد
میشود،
مقادیر
«ذخیرهشده»
برای صفحه
حالت
بازگردانده
میشوند.
بنابراین
برای دائمی
کردن
تغییرات از
گزینه --save
استفاده
کنید.
هنگامی که همراه با گزینه --rtd استفاده شود، هم مقادیر فعلی و هم مقادیر ذخیرهشده در هر صفحه حالت به مقادیر پیشفرض خود بازمیگردند. در صورت نبود گزینه --save تنها مقادیر فعلی در هر صفحه حالت به مقادیر پیشفرض خود بازگردانده میشوند. - -6, --six
- این گزینه باعث میشود که گونههای ۶ بایتی دستورات MODE SENSE و MODE SELECT استفاده شوند. حالت پیشفرض استفاده از گزینههای ۱۰ بایتی است. این گزینه معادل استفاده از گزینه --len=6 است.
- -v, --verbose
- افزایش سطح پرگویی (یعنی خروجی اشکالزدایی).
- -V, --version
- چاپ رشته نسخه و سپس خروج.
نکات (NOTES)
این ابزار بررسی نمیکند که آیا رشته محتویات در حال تلاش برای تغییر بخشهایی از صفحه حالت است که قابل تغییر هستند یا خیر. دستگاه باید این بررسی را انجام دهد و اگر بخشی قابل تغییر نباشد باید پیام «Invalid field in parameter list» را گزارش دهد.
برخی از صفحات حالت قابل ذخیرهسازی نیستند. در این صورت، تلاش برای استفاده از گزینه --save باید باعث شود خطایی از دستگاه گزارش شود: «Illegal field in cdb».
دستگاه ملزم است قبل از پذیرش صفحه حالت جدید، بررسیهای مختلفی را انجام دهد. اگر این بررسیها ناموفق باشند، صفحه حالت تغییر نمیکند و خطای «parameter list length error» یا «invalid field in parameter list» توسط دستگاه در دادههای حس (sense data) بازگردانده میشود.
روش توصیهشده برای تغییر یک صفحه حالت این است که آن را با MODE SENSE بخوانید، بخشی از آن را تغییر دهید و سپس با یک دستور MODE SELECT مجدداً روی دستگاه بنویسید. به عنوان مثال، خواندن یک صفحه حالت موجود میتواند با دستور 'sg_modes -p=1a -r /dev/sdb > mp_1a.txt' (صفحه حالت وضعیت توان) انجام شود. سپس میتوان فایل mp_1a.txt را ویرایش کرد و از آن به عنوان رشته محتویات این ابزار استفاده نمود (مانند 'sg_wr_mode-p1a-s-c-/dev/sdb<mp_1a.txt').
دو فیلد میان آنچه از دستگاه با MODE SENSE خوانده میشود و آنچه با MODE SELECT روی دستگاه نوشته میشود تفاوت دارند: طول دادههای حالت در دستور MODE SELECT رزرو شده است (یعنی صفر است)، در حالی که بیت PS (بیت ۷ از بایت ۰ (زیر)صفحه) در هر (زیر)صفحه حالت در دستور MODE SELECT رزرو شده (صفر) است. بیت PS مشخصشده در رشته محتویات صفر میشود مگر اینکه گزینه --force انتخاب شده باشد.
مثالها (EXAMPLES)
این ابزار میتواند همراه با ابزار sg_modes استفاده شود. برای بازگرداندن مقادیر پیشفرض صفحه حالت (یعنی مقادیر صفحه حالتی که توسط سازنده دستگاه انتخاب شدهاند) به عنوان مقادیر صفحه حالت جاری و ذخیرهشده، میتوان از توالی دستورات زیر استفاده کرد:
$ sg_modes --control=2 --page=1a -r /dev/sda > t $ sg_wr_mode --page=1a --contents=- --save /dev/sda < t
مثال بعدی استفاده از ماسک برای تغییر «شمارنده وضعیت بیکاری» (idle condition counter) در صفحه حالت «وضعیت توان» (power condition با کد 0x1a) از مقدار 0x28 به 0x37 است. توجه داشته باشید که این تغییر ذخیره نمیشود، بنابراین شمارنده وضعیت بیکاری پس از چرخه روشن/خاموش شدن بعدی به 0x28 بازخواهد گشت. خروجی sg_modes تلخیص شده است.
$ sg_modes --page=1a /dev/hdc >> Power condition (mmc), page_control: current 00 1a 0a 00 03 00 00 00 28 00 00 01 2c
$ sg_wr_mode -p 1a -c 0,0,0,0,0,0,0,37 -m 0,0,0,0,0,0,0,ff /dev/hdc
$ sg_modes -p 1a /dev/hdc >> Power condition (mmc), page_control: current 00 1a 0a 00 03 00 00 00 37 00 00 01 2c
فایلهای inhex/wr_mode_cont.hex و wr_mode_mask.hex را در بسته کد منبع برای نمونهای از استفاده از این ابزار با گزینههای --cfile=CF و --mfile=MF ببینید.
وضعیت خروج (EXIT STATUS)
وضعیت خروج sg_wr_mode در صورت موفقیت 0 است. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید.
نویسندگان (AUTHORS)
نوشته شده توسط Douglas Gilbert.
گزارش باگها (REPORTING BUGS)
گزارش باگها به <dgilbert at interlog dot com>.
حق نشر (COPYRIGHT)
حق نشر © 2004-2023
Douglas Gilbert
این
نرمافزار
تحت مجوز BSD-2-Clause
توزیع
میشود. هیچ
ضمانتی
وجود
ندارد؛ حتی
برای
قابلیت
فروش یا
تناسب با یک
هدف خاص.
همچنین ببینید (SEE ALSO)
sdparm(sdparm), sg_modes(sg3_utils), sginfo(sg3_utils)
| September 2023 | sg3_utils-1.49 |