SG_UNMAP(8) SG3_UTILS SG_UNMAP(8)

sg_unmap - ارسال دستور SCSI UNMAP (شناخته‌شده به عنوان 'trim' در مشخصات ATA)

sg_unmap [--all=ST,RN[,LA]] [--anchor] [--dry-run] [--force] [--grpnum=GN] [--help] [--in=FILE] [--lba=LBA,LBA...] [--num=NUM,NUM...] [--timeout=TO] [--verbose] [--version] DEVICE

ارسال یک دستور SCSI UNMAP به DEVICE برای لغو نگاشت (unmap) یک یا چند بلوک منطقی. این دستور در نسخه ۱۸ از استاندارد SBC-3 تحت عنوان کلی «تأمین بلوک منطقی» (logical block provisioning) معرفی شد. بلوک‌های منطقی همچنین می‌توانند با دستور SCSI WRITE SAME لغو نگاشت شوند؛ ابزار sg_write_same را ببینید. قابلیت unmap ارتباط نزدیکی با دستور ATA DATA SET MANAGEMENT با بیت فعال‌شده "Trim" دارد.

بلوک‌های منطقی مورد نظر برای لغو نگاشت را می‌توان به یکی از سه روش در این ابزار مشخص کرد. یک روش ارائه LBAهای شروع با گزینه --lba= و تعداد متناظر برای لغو نگاشت با گزینه --num= است. روش دیگر قرار دادن جفت‌های LBA شروع و تعداد در یک فایل است که نام آن با گزینه --in= مشخص می‌شود. در روشی دیگر می‌توان بخش بزرگی از دیسک یا کل آن (SSD) را با گزینه --all=ST,RN[,LA] لغو نگاشت کرد. تمام مقادیر ده‌دهی فرض می‌شوند مگر این‌که پیشوند "0x" (یا "0X") داشته باشند یا پسوند "h" (یا "H") داشته باشند که در این صورت هگزادسیمال تفسیر می‌شوند. ضرایب پسوندی روی مقادیر ده‌دهی مجاز هستند (مانند '--num=1m').

هنگامی که گزینه --lba= داده شود، گزینه --num= نیز باید حتماً داده شود. اگر یکی فهرستی جداشده با کاما به عنوان آرگومان داشته باشد، دیگری باید دقیقاً همان تعداد عنصر در فهرست خود داشته باشد. آرگومان‌ها می‌توانند از یک فاصله به عنوان جداکننده استفاده کنند اما باید درون علامت نقل‌قول قرار گیرند یا اسکیپ شوند تا توسط شل اشتباه تفسیر نشوند.

با گزینه --in=FILE باید تعداد زوجی از مقادیر یافت شود که به صورت جفت تفسیر می‌شوند: مقدار اول در هر جفت LBA شروع است و مقدار دوم تعداد بلوک‌های قابل لغو نگاشت از آن LBA است. هر چیزی از نویسه "#" در یک خط و پس از آن نادیده گرفته می‌شود، همان‌طور که خطوط خالی نادیده گرفته می‌شوند. مقادیر می‌توانند با کاما، فاصله و تب جدا شوند یا در خطوط جداگانه ظاهر شوند. هر خط نباید بیش از ۱۰۲۳ بایت طول داشته باشد.

از آن‌جا که با این ابزار حجم زیادی از داده‌ها ممکن است از بین برود، یک دوره «آرامش و احتیاط» ۱۵ ثانیه‌ای قبل از ارسال هرگونه دستور UNMAP در نظر گرفته شده است. در طول این دوره به کاربر یادآوری می‌شود چه اتفاقی خواهد افتاد و روی کدام دستگاه اعمال می‌شود، تا کاربر بتواند با کلیدهای control-C (یا هر روش دیگر) قبل از انجام هرگونه عملیات، ابزار را متوقف کند. این دوره انتظار را می‌توان با گزینه --force دور زد.

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

که در آن ST آدرس LBA شروع، RN تعداد تکرار که حداکثر تعداد بلوک‌ها در هر دستور SCSI UNMAP است، و LA، در صورت ارائه، آخرین LBA برای لغو نگاشت است. اگر LA ارائه نشود، آخرین LBA روی DEVICE استفاده می‌شود. این مقدار از طریق دستور SCSI READ CAPACITY به دست می‌آید.
بیت 'Anchor' را در دستور فعال می‌کند (معرفی‌شده در sbc3r22).
تمام مراحل آماده‌سازی را انجام می‌دهد، از جمله باز کردن DEVICE و ارسال دستور 'استاندارد' SCSI INQUIRY (و اختیاری READ CAPACITY)، اما قبل از اجرای هرگونه دستور SCSI UNMAP خارج می‌شود.
دوره هشدار ۱۵ ثانیه‌ای را که پیش از ارسال هرگونه دستور UNMAP رخ می‌دهد، دور می‌زند.
فیلد 'Group number' را روی GN تنظیم می‌کند. مقدار پیش‌فرض صفر است. GN باید عددی بین ۰ تا ۶۳ باشد.
پیام راهنمای استفاده را چاپ کرده و خارج می‌شود.
که در آن FILE نام فایلی شامل جفت‌های مقادیر است. عضو اول هر جفت LBA شروع و عضو دوم جفت تعداد بلوک‌های منطقی برای لغو نگاشت از آن LBA شروع (شامل خود آن) است. مقادیر ده‌دهی تفسیر می‌شوند مگر خلاف آن مشخص شود. این گزینه نمی‌تواند همراه با گزینه --lba= استفاده شود.
که در آن LBA,LBA... رشته‌ای از مقادیر جداشده با کاما (یا فاصله) است که به عنوان آدرس‌های بلوک منطقی شروع تفسیر می‌شوند. هر عدد ده‌دهی تفسیر می‌شود مگر این‌که پیشوند '0x' یا '0X' داشته باشد (یا پسوند 'h' یا 'H' داشته باشد). آرگومانی که شامل هرگونه نویسه فاصله باشد باید داخل نقل‌قول قرار گیرد (یا اسکیپ شود). هنگامی که این گزینه مشخص شود، گزینه --num= نیز باید مشخص گردد و باید تعداد عناصر یکسانی در آرگومان‌های خود داشته باشند.
که در آن NUM,NUM... رشته‌ای از مقادیر جداشده با کاما (یا فاصله) است که به عنوان تعداد بلوک‌های منطقی برای لغو نگاشت تفسیر می‌شوند. هر عدد ده‌دهی تفسیر می‌شود مگر این‌که دارای پیشوند '0x' یا '0X' باشد (یا پسوند 'h' یا 'H' داشته باشد). توجه داشته باشید که مقدار ۰ بلوک قابل قبول است. آرگومانی که شامل هرگونه جداکننده فاصله باشد باید داخل نقل‌قول قرار گیرد (یا اسکیپ شود). وقتی این گزینه داده می‌شود، گزینه --lba= نیز باید ارائه شود و باید تعداد عناصر یکسانی در آرگومان‌های خود داشته باشند.
که در آن TO مقدار مهلت زمانی (به ثانیه) برای دستور UNMAP است. مقدار پیش‌فرض ۶۰ ثانیه است.
سطح جزئیات خروجی (پیام‌های اشکال‌زدایی) را افزایش می‌دهد.
رشته نسخه را چاپ کرده و خارج می‌شود.

برخی محدودیت‌ها: یک LBA می‌تواند تا ۶۴ بیت باشد، و یک NUM تا ۳۲ بیت (تحمیل‌شده توسط ساختار داده‌های پارامتر دستور SCSI UNMAP). مقدار NUM بیشتر توسط فیلد MAXIMUM UNMAP LBA COUNT در صفحه BLOCK LIMITS VPD (کد 0xb0) محدود می‌شود. حداکثر تعداد جفت‌های LBA,NUM توسط این ابزار به ۱۲۸ محدود شده است و ممکن است توسط فیلد MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT در صفحه BLOCK LIMITS VPD بیشتر محدود گردد.

از آن‌جا که مشخص نیست اجرای دستور UNMAP چقدر طول می‌کشد، یک گزینه --timeout= فراهم شده است. مهلت زمانی پیش‌فرض ۶۰ ثانیه است. اگر قرار است تمام بلوک‌های منطقی یک واحد منطقی (مانند درایو دیسک) لغو نگاشت شوند، دستور SCSI FORMAT UNIT (ابزار sg_format را ببینید) می‌تواند به عنوان جایگزین در نظر گرفته شود.

پشتیبانی از تأمین بلوک منطقی توسط بیت LBPME در پاسخ دستور SCSI READ CAPACITY (16) نشان داده می‌شود (ابزار sg_readcap را ببینید).

در نسخه ۲۵ از استاندارد SBC-3 بیت‌های LBPU و ANC_SUP به صفحه Logical Block Provisioning VPD اضافه شدند. وقتی LBPU فعال باشد، نشان می‌دهد که دستگاه از دستور UNMAP پشتیبانی می‌کند. هنگامی که بیت ANC_SUP فعال باشد نشان می‌دهد که دستگاه از LBAهای تثبیت‌شده (anchored) پشتیبانی می‌کند.

دستور SCSI UNMAP در رابطه با صف‌بندی دستورات عملکرد درستی دارد. اما معادل ATA آن: دستور DATA SET MANAGEMENT با بیت فعال "Trim" با صف‌بندی SATA موسوم به NCQ به خوبی تعامل نمی‌کند. برای حل این مشکل، کمیته T13 دستور جدیدی به نام SFQ DATA SET MANAGEMENT معرفی کرده است که آن هم یک بیت Trim دارد.

در پوشه examples بسته sg3_utils فایلی به نام sg_unmap_example.txt وجود دارد که قالب پذیرفته‌شده توسط گزینه --in= را نشان می‌دهد.

برای لغو نگاشت تمامی بلوک‌ها از LBA 0x2000 (شامل خود آن) تا انتهای دستگاه (مثلاً دیسک یا SSD)، در حالی که به هر دستور SCSI UNMAP تعداد ۱۰۲۴ بلوک برای لغو نگاشت داده می‌شود:

sg_unmap --all=0x2000,1k /dev/sg2

گزینه --force را برای دور زدن ۱۵ ثانیه هشدار اضافه کنید. بنابراین --force برای فایل‌های دسته‌ای (اسکریپت‌ها) مناسب است.

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

نوشته‌شده توسط Douglas Gilbert.

گزارش باگ‌ها به <dgilbert at interlog dot com>.

حق نشر © 2009-2018 Douglas Gilbert
این نرم‌افزار تحت مجوز BSD-2-Clause توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب با یک هدف خاص.

sg_format,sg_get_lba_status,sg_readcap,sg_vpd,sg_write_same(sg3_utils)

مارس 2018 sg3_utils-1.43