SG_SAT_DATETIME(8) SG3_UTILS SG_SAT_DATETIME(8)

sg_sat_datetime - گزارش یا تنظیم تاریخ و ساعت روی یک دستگاه ATA

sg_sat_datetime [--dma] [--elapsed] [--format] [--help] [--hex] [--milliseconds=MS] [--readonly] [--seconds=SECS] [--srep] [--verbose] [--version] DEVICE

یک دستور SET DATE & TIME EXT یا READ LOG [DMA] EXT را به DEVICE مبتنی بر ATA ارسال می‌کند تا تاریخ و ساعت را تنظیم کند یا آن را از آدرس لاگ آمار دستگاه (04h)، برگه آمار عمومی (01h) بخواند. این دستورات در استاندارد مجموعه دستورات ATA (ACS-5) یافت می‌شوند. دستورات ATA با استفاده از دستورات SCSI موسوم به ATA PASS-THROUGH ارسال می‌شوند.

اگر هر یک از گزینه‌های --milliseconds=MS یا --seconds=SECS داده شود (و امکان مشخص کردن هر دو با هم وجود ندارد)، آنگاه دستور SET DATE & TIME ارسال می‌شود. در غیر این صورت، دستور READ LOG EXT، یا در صورت استفاده از گزینه --dma ، دستور READ LOG DMA EXT به دستگاه فرستاده می‌شود.

تاریخ و ساعت ارسالی و دریافتی از DEVICE عموماً به عنوان تعداد میلی‌ثانیه‌ها از مبدا زمانی (epoch) تاریخ 1970-01-01 00:00:00 UTC در نظر گرفته شده و در یک عدد صحیح بی‌علامت ۴۸ بیتی نگهداری می‌شود. همین مبدا زمانی توسط ماشین‌های یونیکس نیز استفاده می‌شود، اما آن‌ها معمولاً تعداد ثانیه‌ها از آن مبدا زمانی را نگهداری می‌کنند. دستور date یونیکس و به ویژه فرمت "+%s" آن در تبدیل به و از برچسب‌های زمانی و اشکال خواناتر برای انسان مفید است. بخش مثال‌ها (EXAMPLES) در زیر را ببینید. اگر تاریخ و ساعت پس از بازنشانی ناشی از روشن شدن (power-on reset) تنظیم نشده باشد، این مقدار معادل ساعات روشن بودن دستگاه بر حسب میلی‌ثانیه خواهد بود.

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

از READ LOG DMA EXT برای خواندن مقدار تاریخ و ساعت از دستگاه استفاده می‌کند. در صورت تنظیم تاریخ و ساعت نادیده گرفته می‌شود.
فرض می‌کند تاریخ و ساعت حاصل از READ LOG [DMA] EXT یک زمان سپری‌شده از رویدادی مانند چرخه برق (power cycle) یا بازنشانی سخت‌افزاری (hard reset) است و خروجی را به صورت '<n> days hh:mm:ss.xxx' فرمت‌بندی می‌کند؛ که در آن hh نشان‌دهنده ساعت (۰ تا ۲۳ شامل خودشان)؛ mm نشان‌دهنده دقیقه (۰ تا ۵۹ شامل خودشان)؛ ss نشان‌دهنده ثانیه (۰ تا ۵۹ شامل خودشان) و xxx نشان‌دهنده میلی‌ثانیه (۰۰۰ تا ۹۹۹ شامل خودشان) است. اگر تعداد روزها ۰ باشد، عبارت '0 days' در خروجی چاپ نمی‌شود مگر اینکه این گزینه دو یا چند بار تکرار شود.
این گزینه به ویژه در صورتی مفید است که تاریخ و ساعت تنظیم نشده باشد. طبق ACS-5، در صورت عدم تنظیم، تاریخ و ساعت با مقدار ساعات روشن بودن دستگاه بر حسب میلی‌ثانیه مقداردهی اولیه می‌شود.
تاریخ و ساعت را با قالب‌بندی لوکال (locale) پیش‌فرض سیستم در خروجی نمایش می‌دهد.
پیام راهنمای استفاده را نمایش داده و خارج می‌شود.
تاریخ و ساعت را در مبنای ۱۶ اسکی (ASCII hexadecimal) خروجی می‌دهد.
که در آن MS تعداد میلی‌ثانیه‌ها از تاریخ 1970-01-01 00:00:00 UTC است که باید با دستور ATA SET DATE & TIME EXT روی DEVICE تنظیم شود.
دستگاه DEVICE را به صورت فقط‌خواندنی (read-only) باز می‌کند. اقدام پیش‌فرض، باز کردن DEVICE به صورت خواندنی-نوشتنی (read-write) است.
که در آن SECS تعداد ثانیه‌ها از تاریخ 1970-01-01 00:00:00 UTC است که باید با دستور ATA SET DATE & TIME روی DEVICE تنظیم شود. SECS پیش از استفاده در دستور ATA SET DATE & TIME در ۱۰۰۰ ضرب می‌شود.
تعداد ثانیه‌ها از تاریخ 1970-01-01 00:00:00 UTC را گزارش می‌دهد. این کار با تقسیم مقدار بازگردانده‌شده توسط دستور ATA READ LOG [DMA] EXT بر ۱۰۰۰ انجام می‌شود.
میزان پرگویی را افزایش می‌دهد (یعنی خروجی اشکال‌زدایی).
رشته نسخه را چاپ کرده و سپس خارج می‌شود.

وضعیت خروج sg_sat_datetime در صورت موفقیت ۰ است. در غیر این صورت، به صفحه راهنمای sg3_utils(8) مراجعه کنید.

دستگاه DEVICE باید بلافاصله پس از تنظیم تاریخ و ساعت شروع به انباشت زمان کند. یعنی اگر تاریخ و ساعت را تنظیم و سپس دریافت کنید، مقادیر بازگردانده‌شده احتمالاً افزایش یافته‌اند.

استاندارد ACS-5 هیچ تدبیری برای ذخیره‌سازی تاریخ و ساعت ایمن در برابر قطع برق (power-safe) پیش‌بینی نکرده است. مگر اینکه دستگاه دارای قابلیت ایمن در برابر قطع برق ویژه سازنده باشد، پس از بازنشانی ناشی از روشن شدن، طبق ACS-5، تاریخ و ساعت باید برابر با ساعات روشن بودن دستگاه باشد که بر حسب میلی‌ثانیه (یا ثانیه در صورت استفاده از گزینه --srep) برگردانده می‌شود.

در ماشین‌های یونیکس (مانند لینوکس، FreeBSD و سولاریس) دستور date هنگام کار با برچسب‌های زمانی سودمند است.

جهت دریافت برچسب زمانی از یک DEVICE و نمایش آن به شکلی خوانا برای انسان، می‌توان از نمونه زیر استفاده کرد:

   # sg_sat_datetime -S /dev/sg2
1681156506
   # date --date=@1681156506
Mon Apr 10 02:55:06 PM CDT 2023
   # date -R --date="@1681156506"
Mon, 10 Apr 2023 14:55:06 -0500

دو دستور اخیر date شکل‌های متفاوتی از همان تاریخ را نشان می‌دهند (یعنی ۱۶۸۱۱۵۶۵۰۶ ثانیه از تاریخ 1970-01-01 00:00:00 UTC). دستورات sg_sat_datetime و date را می‌توان با استفاده از backquote ترکیب کرد:

   # date -R --date=@`sg_sat_datetime -S /dev/sg2`
Mon, 10 Apr 2023 14:55:06 -0500

همچنین می‌توان از گزینه --format برای فرمت‌بندی تاریخ و ساعت با استفاده از لوکال پیش‌فرض بهره برد.

   # sg_sat_datetime --format /dev/sg2
Mon Apr 10 15:02:54 2023

جهت تنظیم تاریخ و ساعت روی DEVICE به زمان فعلی (تقریباً)، می‌توان نمونه زیر را به کار برد:

   # date +%s
1681157099
# sg_sat_datetime --seconds=1681157099 /dev/sg0

این دو خط فرمان را می‌توان با استفاده از backquote در یک دستور ادغام کرد:

# sg_sat_datetime --seconds=`date +%s` /dev/sg0

نوشته‌شده توسط Jeremy Bauer و Daniel Woeste با استفاده گسترده از sg_timestamp و sg_sat_read_gplog اثر Douglas Gilbert.

گزارش اشکالات به <dgilbert at interlog dot com>.

حق نشر © 2023 متعلق به Jeremy Bauer و Daniel Woeste از شرکت Western Digital Corporation است.
این نرم‌افزار تحت مجوز FreeBSD توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا مناسب بودن برای یک هدف خاص.

sdparm(sdparm), sg_logs(sg3_utils), sg_timestamp(sg3_utils), sg_sat_read_gplog(sg3_utils)

مه 2023 sg3_utils-1.48