.TH SG_SAT_READ_GPLOG "8" "ژانویه 2023" "sg3_utils\-1.48" SG3_UTILS .SH "نام (NAME)" sg_sat_read_gplog \- استفاده از دستور ATA READ LOG EXT یا SMART READ LOG از طریق لایه ترجمه SCSI به ATA (SAT) .SH "خلاصه دستور (SYNOPSIS)" .B sg_sat_read_gplog [\fI\-\-address=LA_L\fR] [\fI\-\-ck_cond\fR] [\fI\-\-count=CO\fR] [\fI\-\-dma\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR] [\fI\-\-len=CMD_LEN\fR] [\fI\-\-log=LA_L\fR] [\fI\-\-page=PN\fR] [\fI\-\-ppt=PPT\fR] [\fI\-\-readonly\fR] [\fI\-\-smart\fR] [\fI\-\-verbose\fR] [\fI\-\-version\fR] \fIDEVICE\fR .SH "توضیحات (DESCRIPTION)" .\" Add any additional description here این ابزار یک دستور ATA READ LOG EXT،‏ ATA READ LOG DMA EXT، یا ATA SMART READ LOG را به \fIDEVICE\fR ارسال می‌کند. حالت پیش‌فرض، ارسال یکی از دو دستور اول برای خواندن برگه(های) «لاگ همه‌منظوره» (general purpose log) است. تنها دستگاه‌های (S)ATA (مانند دیسک‌ها) و نه دستگاه‌های ATAPI (مانند گرداننده‌های DVD) از برگه‌های لاگ همه‌منظوره پشتیبانی می‌کنند. دستور READ LOG (DMA) EXT به جای ارسال مستقیم به دستگاه، از طریق یک لایه انتقال SCSI فرستاده می‌شود که فرض می‌شود شامل یک لایه ترجمه SCSI به ATA (SAT) با سرنام SATL باشد. لایه SATL ممکن است در یک درایور سیستم‌عامل، در سفت‌افزار آداپتور گذرگاه میزبان (HBA) یا در یک محفظه (enclosure) خارجی قرار داشته باشد. .PP این ابزار در حال حاضر تلاشی برای رمزگشایی پاسخ دریافتی از دیسک ATA نمی‌کند، بلکه پاسخ را به صورت هگزادسیمال اسکی (ASCII hexadecimal) گروه‌بندی‌شده در بایت‌های ۸ بیتی یا کلمات ۱۶ بیتی نمایش می‌دهد. بر اساس قراردادهای ATA، این کلمات به صورت کم‌ارزش‌ترین بایت در ابتدا (little endian) رمزگشایی می‌شوند (توجه داشته باشید که دستورات SCSI از نمایش باارزش‌ترین بایت در ابتدا یا big endian استفاده می‌کنند). آدرس لاگ 0، شماره برگه 0 برگه لاگ «فهرست راهنما» (directory) است و در صورتی که گزینه \fI\-\-hex\fR داده نشود، رمزگشایی می‌شود. در آینده ممکن است این ابزار تلاش کند تا برگه‌های لاگ دیگر را نیز رمزگشایی کند. شاید سایر ابزارهای ATA بتوانند با دریافت خروجی هگزادسیمال این ابزار، این برگه‌های لاگ را رمزگشایی کنند. .PP دریافت تمام برگه‌های لاگ به نظر ساده می‌آید: خواندن برگه لاگ فهرست راهنما و سپس دسترسی به آن دسته از آدرس‌های لاگ که بیش از صفر شماره برگه مرتبط دارند. متأسفانه قضیه به این سادگی نیست. برخی از آدرس‌های لاگ (به‌طور مشخص 0xe1 یا «انتقال داده SCT») پیش از واکشی برگه لاگ در آن آدرس لاگ، نیازمند اجرای یک دستور SCT هستند. سایر آدرس‌های لاگ ممکن است مشکل‌ساز باشند (برای مثال، پیشنهاد شده است که از «لاگ‌های مختص سازنده دستگاه» 0xa0:0xdf اجتناب شود)، بنابراین شاید بهتر باشد از آن‌ها نیز صرف‌نظر شود. به همین دلیل گزینه‌های \fI\-\-address=LA_L\fR و \fI\-\-log=LA_L\fR طوری طراحی شده‌اند که فهرستی از محدوده‌ها را دریافت کنند. .PP استاندارد SAT\-4 (پیش‌نویس قبلی SAT ANSI INCITS 491\-201r7: فایل sat4r06.pdf در www.t10.org) سه دستور SCSI به نام «ATA PASS\-THROUGH» تعریف می‌کند: یکی با استفاده از یک cdb دوازده (12) بایتی، دیگری با استفاده از cdb شانزده (16) بایتی، و سومی با یک cdb سی و دو (32) بایتی. این ابزار به طور پیش‌فرض از نگارش cdb شانزده بایتی استفاده می‌کند. .SH "گزینه‌ها (OPTIONS)" آرگومان‌های گزینه‌های طولانی برای گزینه‌های کوتاه نیز الزامی هستند. .TP \fB\-a\fR, \fB\-\-address\fR=\fILA_L\fR که در آن \fILA_L\fR یک «آدرس لاگ» منفرد، محدوده‌ای از آدرس‌های لاگ، یا فهرستی از (محدوده‌های) آدرس‌های لاگ است. یک آدرس لاگ عددی بین 0 تا 255 (0xff) است که در آن آدرس لاگ 0، شماره برگه 0، یک فهرست راهنما است. محدوده آدرس‌های لاگ به فرم "lo:hi" است که در آن آدرس لاگ "hi" باید بزرگ‌تر یا مساوی "lo" باشد. فهرست آدرس لاگ، یک فهرست جداشده با کاما از آدرس‌های لاگ یا محدوده‌های آدرس لاگ است. .br هر آدرس لاگ حداکثر شامل 256 (لاگ SMART) یا 65536 (لاگ همه‌منظوره) شماره برگه است که از شماره برگه 0 آغاز می‌شود. تعداد شماره برگه‌های موجود برای هر آدرس لاگ در برگه فهرست راهنمای لاگ مشخص شده است. .br خلاصه نحو \fILA_L\fR: lo:hi,lo2:hi2,lo3:hi3 ... .TP \fB\-C\fR, \fB\-\-ck_cond\fR بیت CK_COND را در cdb دستور ATA PASS\-THROUGH SCSI تنظیم می‌کند. مقدار پیش‌فرض پاک (یعنی 0) است. در صورت تنظیم بودن، SATL باید صرف‌نظر از موفقیت یا شکست دستور ATA، یک بافر sense شامل یک توصیف‌گر نتیجه ATA (ATA Result descriptor) تولید کند. هنگامی که پاک باشد، SATL تنها در صورتی باید یک بافر sense شامل توصیف‌گر نتیجه ATA تولید کند که دستور ATA با شکست مواجه شده باشد. .TP \fB\-c\fR, \fB\-\-count\fR=\fICO\fR عدد \fICO\fR در فیلد "count" دستور ATA READ LOG EXT قرار می‌گیرد. این مقدار تعداد برگه‌های داده لاگ ۵۱۲ بایتی را مشخص می‌کند که باید از آدرس لاگ تعیین‌شده خوانده شوند. آدرس برگه مشخص‌شده، از شماره برگه ارائه‌شده شروع به خواندن می‌کند. آخرین شماره برگه خوانده‌شده (در صورت وجود) برابر با (\fIPN\fR + \fICO\fR \- 1) خواهد بود. .br حداکثر مقدار \fICO\fR برای برگه‌های لاگ همه‌منظوره 0xffff (65,535) و برای برگه‌های لاگ SMART برابر 0xff (255) است. .br به طور معمول اگر مقدار داده‌شده \fI\-\-page=\fRPN (پیش‌فرض 0) به علاوه \fICO\fR از تعداد نشان‌داده‌شده در فهرست راهنمای لاگ (آدرس لاگ 0) برای آدرس لاگ تعیین‌شده بیشتر شود، خطا گزارش می‌شود. .br توجه داشته باشید که \fICO\fR فقط برای آدرس لاگ فعلی اعمال می‌شود؛ به عبارت دیگر هیچ چرخشی (wrap around) به ابتدای آدرس لاگ بعدی وجود ندارد. .TP \fB\-d\fR, \fB\-\-dma\fR به جای دستور ATA READ LOG EXT از دستور ATA READ LOG DMA EXT استفاده می‌کند. برخی از دستگاه‌ها برای بازگرداندن داده‌های معتبر لاگ به این دستور نیاز دارند. .TP \fB\-h\fR, \fB\-\-help\fR پیام راهنمای استفاده که خلاصه‌ای از گزینه‌های خط فرمان است را نمایش داده و خارج می‌شود. در صورت ارائه \fIDEVICE\fR آن را نادیده می‌گیرد. .TP \fB\-H\fR, \fB\-\-hex\fR اگر یک بار مشخص شود، پاسخ به صورت بایت‌های هگزادسیمال اسکی نمایش داده می‌شود. اگر دو بار مشخص شود، پاسخ طبق قراردادهای ATA (یعنی little endian) در قالب کلمات ۱۶ بیتی گروه‌بندی می‌شود؛ این حالت خروجی پیش‌فرض است (یعنی هنگامی که این گزینه مشخص نشده باشد). در صورت تکرار سه باره (یعنی '\-HHH')، خروجی به صورت هگزادسیمال گروه‌بندی‌شده در کلمات ۱۶ بیتی (بدون آفست در ابتدا و نویسه‌های اسکی در انتهای هر خط) در قالبی ارائه می‌شود که برای پردازش توسط 'hdparm \-\-Istdin' قابل قبول است. .PP اگر این گزینه چهار بار فراخوانی شود (مانند '\-HHHH')، برگه‌های لاگ به صورت بایت‌های هگز، بدون آدرس در آغاز هر خط، خارج می‌شوند. این کار رمزگشایی هگز را برای رایانه‌ها (و نه انسان‌ها) آسان‌تر می‌کند. اگر این گزینه پنج بار فراخوانی شود، یک خط توضیح که با نویسه '#' آغاز می‌شود پیش از هر برگه لاگ ۵۱۲ بایتی چاپ می‌شود. این توضیح برگه لاگ پس از خود را شرح می‌دهد. .TP \fB\-l\fR, \fB\-\-len\fR=\fICMD_LEN\fR که در آن \fICMD_LEN\fR طول دستور (cdb) برای دستور SCSI ATA PASS\-THROUGH است که برای تونل کردن دستورات ATA استفاده می‌شود. سه مقدار مجاز است: 12، 16 و 32 (بایت طول). نگارش ۱۲ بایتی بیشترین محدودیت‌ها را دارد (به عنوان مثال، فیلد 'count' آن تک‌بایتی است) اما سیستم‌های قدیمی‌تر ممکن است اجازه اجرای دستورات ۱۶ یا ۳۲ بایتی را ندهند. .TP \fB\-L\fR, \fB\-\-log\fR=\fILA_L\fR گزینه \fI\-\-address=LA_L\fR را ببینید. .TP \fB\-p\fR, \fB\-\-page\fR=\fIPN\fR عدد \fIPN\fR شماره برگه (درون آدرس لاگ) است و در بیت‌های 32:16 از فیلد "lba" دستور ATA READ LOG (DMA) EXT قرار می‌گیرد. مقدار پیش‌فرض قرار داده‌شده در فیلد "lba" برابر 0 است. .br حداکثر مقدار \fIPN\fR برای برگه‌های لاگ همه‌منظوره 0xffff (65,535) و برای برگه‌های لاگ SMART برابر 0xff (255) است. در حالت دوم، \fIPN\fR باید 0 و \fICO\fR برابر 255 باشد. .PP هنگامی که چندین آدرس لاگ مشخص شده باشد (از طریق آرگومان \fILA_L\fR)، با این گزینه به گونه متفاوتی رفتار می‌شود. در حالت چند آدرس لاگ، اگر \fIPN\fR بزرگ‌تر از 0 باشد، به عنوان حد بالای تعداد شماره برگه‌هایی عمل می‌کند که برای هر آدرس لاگ خروجی داده خواهند شد. تعداد واقعی برگه‌های لاگ ۵۱۲ بایتی خروجی، به تعداد شماره برگه‌های نشان‌داده‌شده در برگه لاگ فهرست راهنما برای آدرس لاگ فعلی نیز بستگی دارد. .TP \fB\-P\fR, \fB\-\-ppt\fR=\fIPPT\fR که در آن \fIPPT\fR تعداد برگه‌هایی است که در هر بار فراخوانی دستور ATA READ LOG EXT یا ATA READ LOG DMA EXT باید از \fIDEVICE\fR منتقل شوند. مقدار پیش‌فرض 128 (یا 64 کیبی‌بایت) است که به این دلیل انتخاب شده است که بیشتر سیستم‌عامل‌ها برای اندازه انتقال داده به و از یک دستگاه در یک دستور واحد حد بالایی دارند. وقتی تعداد برگه‌های لاگ ارائه‌شده با گزینه \fI\-\-count=CO\fR زیاد باشد، ممکن است از آنچه سیستم‌عامل در یک بار اجرای دستور مجاز می‌داند فراتر رود؛ از این رو به این گزینه نیاز است. .TP \fB\-l\fR, \fB\-\-len\fR={32|16|12} طول cdb در SCSI است که برای دستورات ATA PASS\-THROUGH استفاده می‌شود. آرگومان می‌تواند 32، 16 یا 12 باشد. مقدار پیش‌فرض 16 است. برخی از لایه‌های انتقال SCSI نمی‌توانند دستورات SCSI طولانی‌تر از ۱۲ بایت را منتقل کنند. .TP \fB\-r\fR, \fB\-\-readonly\fR باعث می‌شود \fIDEVICE\fR با پرچم فقط‌خواندنی (O_RDONLY در یونیکس) باز شود. رفتار پیش‌فرض، باز کردن \fIDEVICE\fR با پرچم خواندن\-نوشتن (O_RDWR در یونیکس) است. در برخی موارد، در صورتی که \fIDEVICE\fR با پرچم خواندن\-نوشتن باز شده باشد، اقدامات سیستم‌عامل هنگام close() اثر دستورات مدیریت توان ارسالی به دیسک‌های ATA را خنثی می‌کند (برای مثال ممکن است سیستم‌عامل تصور کند که باید داده‌ای را روی دیسک تخلیه یا flush کند). .TP \fB\-s\fR, \fB\-\-smart\fR در مجموعه ویژگی‌های ATA SMART، برگه‌های لاگ «SMART» از مدت‌ها پیش وجود داشته‌اند و سابقه آن‌ها به پیش از افزوده‌شدن بعدی برگه‌های لاگ «همه‌منظوره» بازمی‌گردد. بنابراین این ابزار به سادگی می‌تواند برای خواندن برگه‌های لاگ «SMART» به جای برگه‌های لاگ همه‌منظوره گسترش یابد. این دقیقاً همان کاری است که این گزینه انجام می‌دهد. .br دستور ATA SMART READ LOG فیلد شماره برگه ندارد، همه دریافت‌ها از شماره برگه 0 آغاز می‌شوند. همچنین تعداد شماره برگه‌ها (در آدرس لاگ آن) به یک بایت محدود است (بنابراین 255). برگه فهرست راهنمای لاگ همه‌منظوره و برگه فهرست راهنمای لاگ SMART دارای قالب یکسانی هستند (با در نظر گرفتن محدودیت تک‌بایتی برای تعداد شماره برگه‌ها در هر آدرس لاگ SMART). .TP \fB\-v\fR, \fB\-\-verbose\fR سطح پرگویی را افزایش می‌دهد. .TP \fB\-V\fR, \fB\-\-version\fR رشته نسخه را چاپ می‌کند. .SH "نکات (NOTES)" پیش از هسته لینوکس 2.6.29، ذخیره‌سازهای انبوه USB داده‌های حسگری (sense data) را به ۱۸ بایت محدود می‌کردند که باعث می‌شد گزینه \fB\-\-ck_cond\fR نتایج عجیبی (کوتاه‌شده) ارائه دهد. .PP تفاوت‌های جزئی در رفتار برنامه بین حالتی که یک آدرس لاگ منفرد واکشی می‌شود و حالتی که چندین برگه لاگ واکشی می‌شوند وجود دارد. در حالت آدرس لاگ منفرد، آدرس لاگ، شماره برگه و تعداد در فیلدهای مربوطه در دستور ATA READ LOG EXT یا ATA SMART READ LOG قرار می‌گیرند. هنگامی که چندین آدرس لاگ داده می‌شود، ابتدا برگه لاگ «فهرست راهنما» (log_address=0, page_number=0) بارگذاری می‌شود. سپس تنها آدرس‌های لاگی که فهرست راهنما نشان می‌دهد بیش از صفر شماره برگه لاگ دارند، واکشی می‌شوند. تعداد شماره برگه‌های لاگ مورد دسترسی، در صورتی که \fIPN\fR بزرگ‌تر از صفر باشد، ممکن است توسط گزینه \fI\-\-page=PN\fR بیشتر محدود شود. .SH "مثال‌ها (EXAMPLES)" در ابتدا این مثالی است برای اجتناب از آدرس‌های لاگ مشکل‌ساز که در بخش توضیحات در بالا به آن‌ها اشاره شد: .PP sg_sat_read_gplog \-a 0:0xb,0xd:0x9f,0xe0,0xe2:255 /dev/sdc .PP دستور بالا از شکل کوتاه گزینه \fI\-\-address=LA_L\fR با فهرستی استفاده می‌کند که از آدرس‌های لاگ 0xc،‏ 0xa0 تا 0xdf و 0xe1 اجتناب می‌کند. خروجی شامل تمام آدرس‌های لاگ (به جز موارد استثناشده) خواهد بود که فهرست راهنما نشان می‌دهد بیش از 0 شماره برگه دارند. .br فراخوانی زیر از دستور SMART READ LOG به جای دستور READ LOG EXT استفاده می‌کند: .PP sg_sat_read_gplog \-\-smart \-a 0:0xb,0xd:0x9f,0xe0,0xe2:255 /dev/sdc .SH "وضعیت خروج (EXIT STATUS)" وضعیت خروج sg_sat_read_gplog در صورت موفقیت 0 است. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید. .SH "نویسنده (AUTHOR)" نوشته‌شده توسط Hannes Reinecke و Douglas Gilbert .SH "گزارش باگ‌ها (REPORTING BUGS)" گزارش باگ‌ها به . .SH "حق نشر (COPYRIGHT)" حق نشر \(co 2014\-2023 Hannes Reinecke, SUSE Linux GmbH .br این نرم‌افزار تحت مجوز BSD\-2\-Clause توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا مناسب بودن برای یک هدف خاص. .SH "همچنین ببینید (SEE ALSO)" .B sg_sat_identify(sg3_utils), sg_inq(sg3_utils), sdparm(sdparm), .B hdparm(hdparm), smartctl(smartmontools)