.TH SGM_DD "8" "April 2026" "sg3_utils\-1.49" SG3_UTILS .SH "نام (NAME)" sgm_dd \- کپی داده به و از پرونده‌ها و دستگاه‌ها، به‌ویژه دستگاه‌های SCSI .SH "خلاصه دستور (SYNOPSIS)" .B sgm_dd [\fIbs=BS\fR] [\fIcount=COUNT\fR] [\fIibs=BS\fR] [\fIif=IFILE\fR] [\fIiflag=FLAGS\fR] [\fIobs=BS\fR] [\fIof=OFILE\fR] [\fIoflag=FLAGS\fR] [\fIseek=SEEK\fR] [\fIskip=SKIP\fR] [\fI\-\-help\fR] [\fI\-\-version\fR] .PP [\fIbpt=BPT\fR] [\fIcdbsz=\fR6|10|12|16] [\fIdio=\fR0|1] [\fIsync=\fR0|1] [\fItime=\fR0|1] [\fIverbose=VERB\fR] [\fI\-\-dry\-run\fR] [\fI\-\-nocopy\fR] [\fI\-\-progress\fR] [\fI\-\-verbose\fR] .SH "توضیحات (DESCRIPTION)" .\" Add any additional description here کپی داده‌ها به و از هر پرونده‌ای. ویژه «پرونده‌هایی» که دستگاه‌های عمومی SCSI لینوکس (sg) و دستگاه‌های خام هستند. از انتقال‌های نگاشت حافظه (memory mapped) روی دستگاه‌های sg استفاده می‌کند. دارای نحو و معنایی مشابه با .B dd(1) است اما هیچ تبدیلی انجام نمی‌دهد. .PP تنها زمانی انتقال‌های نگاشت حافظه را انجام می‌دهد که \fIIFILE\fR یا \fIOFILE\fR دستگاه‌های عمومی SCSI (sg) باشند. .PP اگر هر دو \fIIFILE\fR و \fIOFILE\fR دستگاه‌های sg باشند، انتقال‌های نگاشت حافظه روی \fIIFILE\fR انجام می‌شوند. اگر هیچ فلگ دیگری مشخص نشود، عملیات IO غیرمستقیم روی \fIOFILE\fR انجام می‌شود. اگر 'oflag=dio' داده شود، عملیات IO مستقیم روی \fIOFILE\fR آزمایش می‌شود. اگر IO مستقیم در دسترس نباشد، این ابزار به IO غیرمستقیم بازمی‌گردد و این موضوع را در پایان کپی گزارش می‌کند. .PP گروه اول در خلاصه دستور بالا عملوندهای «استاندارد» .B dd(1) در یونیکس هستند. گروه دوم گزینه‌های اضافی افزوده‌شده توسط این ابزار می‌باشند. هر دو گروه در زیر تعریف شده‌اند. .SH "گزینه‌ها (OPTIONS)" .TP \fBbpt\fR=\fIBPT\fR هر تراکنش ورودی/خروجی با استفاده از \fIBPT\fR بلوک انجام می‌شود (یا در نزدیکی انتهای کپی کمتر). مقدار پیش‌فرض برای اندازه‌های بلوک کمتر از ۲۰۴۸ بایت برابر ۱۲۸ است، در غیر این صورت مقدار پیش‌فرض ۳۲ است. بنابراین برای bs=512 خواندن‌ها و نوشتن‌ها به‌طور پیش‌فرض هرکدام ۶۴ کیبی‌بایت داده را منتقل می‌کنند (در صورت نزدیک بودن به انتهای انتقال یا محدودیت‌های حافظه کمتر). هنگام دسترسی به درایوهای cd/dvd، اندازه بلوک معمولاً ۲۰۴۸ بایت است و bpt به‌طور پیش‌فرض ۳۲ است که باز هم به معنای انتقال‌های ۶۴ کیبی‌بایتی است. .TP \fBbs\fR=\fIBS\fR که در آن \fIBS\fR .B باید اندازه بلوک دستگاه فیزیکی باشد. توجه داشته باشید که این با .B dd(1) که اجازه می‌دهد \fIBS\fR یک ضریب صحیح باشد متفاوت است. پیش‌فرض 512 است که معمولاً برای دیسک‌ها درست است اما برای cdromها (که معمولاً دارای بلوک‌های 2048 بایتی هستند) نادرست است. برای این ابزار، حداکثر اندازه هر عملیات IO منفرد برابر \fIBS\fR * \fIBPT\fR بایت است. .TP \fBcdbsz\fR=6 | 10 | 12 | 16 اندازه دستورات SCSI READ و/یا WRITE صادرشده روی نام‌های دستگاه sg. مقدار پیش‌فرض بلوک‌های دستوری SCSI ده بایتی است (مگر اینکه محاسبات نشان دهد که ممکن است از شماره بلوک ۴ بایتی فراتر رود، که در این صورت به‌طور پیش‌فرض دستورات SCSI شانزده بایتی خواهد بود). .TP \fBcount\fR=\fICOUNT\fR کپی \fICOUNT\fR بلوک از \fIIFILE\fR به \fIOFILE\fR. پیش‌فرض حداقل تعداد بلوک‌هایی (میان \fIIFILE\fR و \fIOFILE\fR) است که دستگاه‌های sg از دستورات SCSI READ CAPACITY گزارش می‌دهند یا دستگاه‌های بلوکی (یا پارتیشن‌های آن‌ها) گزارش می‌کنند. پرونده‌های معمولی برای اندازه‌شان بررسی نمی‌شوند. اگر \fIskip=SKIP\fR یا \fIseek=SEEK\fR داده شود و تعداد مشتق شود (یعنی به‌طور صریح داده نشود)، آنگاه تعداد مشتق‌شده کاهش می‌یابد تا کپی از دستگاه فراتر نرود. اگر نام پرونده یک پارتیشن دستگاه بلوکی باشد و \fICOUNT\fR داده نشود، اندازه پارتیشن به‌جای اندازه کل دستگاه استفاده می‌شود. اگر \fICOUNT\fR داده نشود و نتوان آن را مشتق کرد، پیام خطایی صادر شده و هیچ کپی انجام نمی‌شود. .TP \fBdio\fR=0 | 1 اجازه انتخاب IO مستقیم در سمت نوشتن (یعنی روی \fIOFILE\fR) را می‌دهد. فقط زمانی مجاز است که سمت خواندن (یعنی \fIIFILE\fR) یک دستگاه sg باشد. وقتی ۱ باشد ممکن است یک کپی «بدون کپی» رخ دهد (یعنی انتقال با mmap در خواندن به فضای کاربر و IO مستقیم از آنجا در نوشتن، که به طور بالقوه دو DMA و بدون کپی داده از سوی پردازنده است). پیش‌فرض ۰ است. اقدام مشابه با 'dio=1' از طریق 'oflag=dio' نیز در دسترس است. .TP \fBibs\fR=\fIBS\fR در صورت ارائه باید برابر با \fIBS\fR داده‌شده به گزینه 'bs=' باشد. .TP \fBif\fR=\fIIFILE\fR خواندن از \fIIFILE\fR به‌جای stdin. اگر \fIIFILE\fR برابر '\-' باشد از stdin خوانده می‌شود. خواندن از ابتدای \fIIFILE\fR شروع می‌شود مگر اینکه \fISKIP\fR داده شده باشد. .TP \fBiflag\fR=\fIFLAGS\fR که در آن \fIFLAGS\fR فهرستی جداشده با کاما از یک یا چند فلگ است که در زیر تشریح شده‌اند. این فلگ‌ها با \fIIFILE\fR مرتبط هستند و زمانی که \fIIFILE\fR برابر stdin باشد نادیده گرفته می‌شوند. .TP \fBobs\fR=\fIBS\fR در صورت ارائه باید برابر با \fIBS\fR داده‌شده به گزینه 'bs=' باشد. .TP \fBof\fR=\fIOFILE\fR نوشتن در \fIOFILE\fR به‌جای stdout. اگر \fIOFILE\fR برابر '\-' باشد در stdout می‌نویسد. اگر \fIOFILE\fR برابر ‎/dev/null‎ باشد، هیچ نوشتن واقعی انجام نمی‌شود. اگر \fIOFILE\fR برابر '.' (نقطه) باشد به همان شیوه ‎/dev/null‎ با آن رفتار می‌شود (این یک نماد اختصاری است). اگر \fIOFILE\fR وجود داشته باشد، کوتاه نمی‌شود؛ از ابتدای \fIOFILE\fR بازنویسی می‌شود مگر اینکه 'oflag=append' یا \fISEEK\fR داده شده باشد. .TP \fBoflag\fR=\fIFLAGS\fR که در آن \fIFLAGS\fR فهرستی جداشده با کاما از یک یا چند فلگ است که در زیر مشخص شده‌اند. این فلگ‌ها با \fIOFILE\fR مرتبط هستند و زمانی که \fIOFILE\fR برابر ‎/dev/null‎، '.' (نقطه) یا stdout باشد نادیده گرفته می‌شوند. .TP \fBseek\fR=\fISEEK\fR شروع نوشتن از \fISEEK\fR بلوک به اندازه bs از ابتدای \fIOFILE\fR. پیش‌فرض بلوک ۰ است (یعنی ابتدای پرونده). .TP \fBskip\fR=\fISKIP\fR شروع خواندن از \fISKIP\fR بلوک به اندازه bs از ابتدای \fIIFILE\fR. پیش‌فرض بلوک ۰ است (یعنی ابتدای پرونده). .TP \fBsync\fR=0 | 1 هنگامی که ۱ باشد، دستور SYNCHRONIZE CACHE را در پایان انتقال روی \fIOFILE\fR اجرا می‌کند. تنها زمانی فعال است که \fIOFILE\fR نام پرونده یک دستگاه sg باشد. .TP \fBtime\fR=0 | 1 هنگامی که ۱ باشد، زمان انتقال را اندازه گرفته و محاسبه توان عملیاتی را انجام می‌دهد و نتایج را در پایان (در stderr) خروجی می‌دهد. وقتی ۰ (پیش‌فرض) باشد زمان‌بندی را انجام نمی‌دهد. .TP \fBverbose\fR=\fIVERB\fR با افزایش \fIVERB\fR مقدار خروجی اشکال‌زدایی ارسالی به stderr نیز افزایش می‌یابد. مقدار پیش‌فرض صفر است که حداقل مقدار خروجی اشکال‌زدایی را به همراه دارد. مقدار ۱ اطلاعات اضافی غیرتکراری را گزارش می‌دهد. مقدار ۲ cdbها و پاسخ‌ها را برای دستورات SCSI غیرتکراری (یعنی به غیر از READ و WRITE) گزارش می‌کند. پردازش خطا تکراری محسوب نمی‌شود. مقادیر ۳ و ۴ خروجی برای تمام دستورات SCSI (و فراخوانی‌های read() و write() یونیکس) تولید می‌کنند، بنابراین می‌تواند حجم خروجی بسیار بالایی داشته باشد. .TP \fB\-d\fR, \fB\-\-dry\-run\fR تمام تجزیه و آماده‌سازی خط فرمان را انجام می‌دهد اما از کپی یا خواندن واقعی صرف‌نظر می‌کند. این آماده‌سازی ممکن است شامل باز کردن \fIIFILE\fR یا \fIOFILE\fR برای تعیین طول آن‌ها باشد. این گزینه می‌تواند برای آزمایش نحو فراخوانی‌های پیچیده خط فرمان پیش از اجرای آن‌ها مفید باشد. .TP \fB\-h\fR, \fB\-\-help\fR نمایش پیام راهنما و خروج. .TP \fB\-n\fR, \fB\-\-nocopy\fR این گزینه باعث می‌شود ابزار در زمانی که در غیر این صورت اقدام به نوشتن در \fIOFILE\fR یا stdout می‌کرد، خارج شود. نوع گزینه بلند را می‌توان به \fI\-\-nc\fR خلاصه کرد. روش صریح برای دستور دادن به این ابزار جهت خواندن فقط \fIIFILE\fR استفاده از ‎'\-\-of=/dev/null'‎ در فراخوانی است. این گزینه ممکن است به عنوان ایمنی مضاعف در مواردی تلقی شود که ‎'\-\-of=/dev/null'‎ داده نشده یا اشتباه نوشته شده است. .TP \fB\-p\fR, \fB\-\-progress\fR این گزینه باعث می‌شود گزارش پیشرفت هر دو دقیقه یک‌بار تا پایان کپی خروجی داده شود. پس از اتمام کپی، سطری با عنوان «completed» چاپ می‌شود تا گزارش نهایی از گزارش‌های پیشرفت پیشین متمایز گردد. با دو بار استفاده، گزارش پیشرفت هر یک دقیقه است و با سه بار استفاده هر ۳۰ ثانیه خواهد بود. .br در صورت ارائه این گزینه، گزینه 'time=1' به‌طور ضمنی تنظیم می‌شود. .TP \fB\-v\fR, \fB\-\-verbose\fR یک بار استفاده از آن معادل \fIverbose=1\fR است. دو بار استفاده (مانند ‎"\-vv"‎) معادل \fIverbose=2\fR است و الی آخر. .TP \fB\-V\fR, \fB\-\-version\fR نمایش اطلاعات شماره نگارش و خروج. .SH "فلگ‌ها (FLAGS)" در اینجا فهرستی از فلگ‌ها و معانی آن‌ها آمده است: .TP append باعث می‌شود فلگ O_APPEND به باز کردن \fIOFILE\fR اضافه شود. برای پرونده‌های معمولی، این امر منجر به ضمیمه شدن داده‌ها به انتهای داده‌های موجود خواهد شد. نمی‌توان همراه با گزینه \fIseek=SEEK\fR استفاده کرد زیرا با هم تداخل دارند. عمل پیش‌فرض این ابزار بازنویسی هرگونه داده موجود از ابتدای پرونده است، یا اگر \fISEEK\fR داده شود، از بلوک \fISEEK\fR شروع به نوشتن می‌کند. توجه داشته باشید که تلاش برای ضمیمه کردن به یک پرونده دستگاه (مثلاً یک دیسک) معمولاً نادیده گرفته شده یا ممکن است باعث گزارش خطا شود. .TP dio فقط با oflag فعال است (یعنی 'oflag=dio'). عملکرد آن در توضیحات گزینه 'dio=1' در بالا شرح داده شده است. .TP direct باعث می‌شود فلگ O_DIRECT به باز کردن \fIIFILE\fR و/یا \fIOFILE\fR اضافه شود. این فلگ نیازمند مقداری تراز حافظه روی IO است. از این رو بافرهای حافظه کاربر با اندازه صفحه تراز می‌شوند. روی پرونده‌های sg، عادی یا خام تاثیری ندارد. .TP dpo تنظیم بیت DPO (غیرفعال کردن صفحه به بیرون) در دستورات SCSI READ و WRITE. برای گونه‌های cdb شش بایتی READ و WRITE پشتیبانی نمی‌شود. نشان می‌دهد که داده‌ها احتمالاً نیازی به ماندن در حافظه نهان دستگاه (مانند دیسک) ندارند. ممکن است کپی رسانه را تسریع کرده و/یا باعث شود کپی رسانه تاثیر کمتری بر سایر کاربران دستگاه داشته باشد. .TP dsync باعث می‌شود فلگ O_SYNC به باز کردن \fIIFILE\fR و/یا \fIOFILE\fR اضافه شود. پیشوند "d" برای کاهش ابهام با گزینه 'sync=0|1' که عملکرد دیگری دارد (یعنی همگام‌سازی با رسانه در انتهای انتقال) اضافه شده است. .TP excl باعث می‌شود فلگ O_EXCL به باز کردن \fIIFILE\fR و/یا \fIOFILE\fR اضافه شود. .TP fua باعث می‌شود بیت FUA (اجبار به دسترسی واحد) در دستورات SCSI READ و/یا WRITE تنظیم شود. این فقط روی دستگاه‌های sg تاثیر دارد. گونه‌های ۶ بایتی دستورات SCSI READ و WRITE از بیت FUA پشتیبانی نمی‌کنند. فقط برای نام پرونده‌های دستگاه sg فعال است. .TP null هیچ اثری ندارد، صرفاً یک نگه‌دارنده مکان است. .SH "گزینه‌های منسوخ‌شده (RETIRED OPTIONS)" در اینجا برخی از گزینه‌های منسوخ‌شده که همچنان وجود دارند آورده شده است: .TP fua=0 | 1 | 2 | 3 بیت اجبار به دسترسی واحد. در صورت ۳ بودن، fua روی هر دو \fIIFILE\fR و \fIOFILE\fR تنظیم می‌شود؛ در صورت ۲ بودن، fua روی \fIIFILE\fR تنظیم می‌شود؛ در صورت ۱ بودن، fua روی \fIOFILE\fR تنظیم می‌شود؛ در صورت ۰ بودن (پیش‌فرض)، fua روی هر دو پاک است. فلگ 'fua' را ببینید. .SH "نکات (NOTES)" یک دستگاه خام پیش از استفاده از sgm_dd باید به یک دستگاه بلوکی مقید شود. برای اطلاعات بیشتر درباره مقید کردن دستگاه‌های خام، .B raw(8) را ببینید. برای اطمینان، نگاشت دستگاه sg به دستگاه‌های بلوکی SCSI باید پیش از استفاده با ابزار lsscsi بررسی شود. .PP اطلاعات پارتیشن دستگاه خام اغلب با .B fdisk(8) یافت می‌شود [آرگومان «\-ul» در این زمینه مفید است]. .PP آرگومان‌های عددی گوناگون (مانند \fISKIP\fR) ممکن است شامل پسوندهای ضریب‌دار باشند یا در مبنای شانزده ارائه شوند. بخش «NUMERIC ARGUMENTS» در صفحه راهنمای sg3_utils(8) را ببینید. .PP پارامترهای count، skip و seek می‌توانند مقادیر ۶۴ بیتی بپذیرند (یعنی اعداد بسیار بزرگ). سایر مقادیر محدود به مقداری هستند که در یک عدد علامت‌دار ۳۲ بیتی جا شود. .PP داده‌ها معمولاً در یک فرآیند ۲ مرحله‌ای به فضای کاربر می‌رسند: ابتدا آداپتور SCSI از طریق DMA داده‌ها را در بافرهای هسته قرار می‌دهد و سپس درایور sg این داده‌ها را در حافظه کاربر کپی می‌کند (عملیات نوشتن این توالی را معکوس می‌کند). با انتقال‌های نگاشت حافظه، یک بافر هسته که توسط sg رزرو شده است در فضای کاربر نگاشت می‌شود (فراخوانی سیستمی .B mmap(2) را ببینید). وقتی این کار انجام شد، کپی دوم (اضافی) از بافرهای هسته به فضای کاربر لازم نیست. از این رو انتقال سریع‌تر است و به بار پردازشی کمتری از سوی CPU نیاز دارد. .PP تمام خروجی‌های اطلاعاتی، هشدار و خطا به stderr ارسال می‌شوند تا پرونده خروجی dd بتواند stdout باشد و تمیز بماند. اگر گزینه‌ای داده نشود، پیام راهنما خروجی داده شده و کار دیگری انجام نمی‌شود. .PP برای دستگاه‌های sg، این ابزار دستورات SCSI READ و WRITE (SBC) صادر می‌کند که برای دیسک‌ها و خواندن از درایوهای CD/DVD/BD مناسب است. این دستورات برای دستگاه‌های نوار مغناطیسی فرمت درستی ندارند، بنابراین sgm_dd نباید روی دستگاه‌های نوار استفاده شود. .PP این ابزار در صورت مواجهه با هر خطایی، کپی را متوقف می‌کند. برای منطق پیشرفته‌تر «کپی در صورت خطا» ابزار .B sg_dd (و فلگ 'coe' آن) را ببینید. .SH "مثال‌ها (EXAMPLES)" مثال‌های ارائه‌شده در صفحه راهنمای .B sg_dd(8) را ببینید. .SH "سیگنال‌ها (SIGNALS)" رسیدگی به سیگنال‌ها از dd گرفته شده است: SIGINT، SIGQUIT و SIGPIPE تعداد بلوک‌های باقی‌مانده برای انتقال و تعداد رکوردهای ورودی + خروجی را گزارش می‌دهند؛ سپس رفتار پیش‌فرض خود را انجام می‌دهند. SIGUSR1 باعث خروجی داده شدن همان اطلاعات می‌شود اما کپی ادامه می‌یابد. تمام خروجی‌های ناشی از سیگنال‌ها به stderr فرستاده می‌شوند. .SH "وضعیت خروج (EXIT STATUS)" وضعیت خروج sgm_dd در صورت موفقیت 0 است. در غیر این صورت صفحه راهنمای sg3_utils(8) را ببینید. از آنجا که این ابزار در سطحی بالاتر از دستورات منفرد کار می‌کند، و فلگ‌های 'coe' و 'retries' وجود دارند، شکست دستورات SCSI منفرد لزوماً باعث خروج فرآیند نمی‌شود. .SH "نویسندگان (AUTHORS)" نوشته شده توسط Douglas Gilbert و Peter Allworth. .SH "گزارش باگ‌ها (REPORTING BUGS)" گزارش باگ‌ها به . .SH "حق نشر (COPYRIGHT)" حق نشر \(co 2000\-2026 Douglas Gilbert .br این نرم‌افزار تحت مجوز GPL نگارش ۲ توزیع می‌شود. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب برای یک هدف خاص. .SH "همچنین ببینید (SEE ALSO)" ساده‌ترین گونه این ابزار .B sg_dd نامیده می‌شود. نسخه ریسه‌های POSIX از این ابزار با نام .B sgp_dd در بسته sg3_utils قرار دارد. بسته lmbench شامل .B lmdd است که آن نیز جالب توجه است. .B dd(1), ddpt(ddpt), raw(8)