.TH "COMPARE AND WRITE" "8" "April 2021" "sg3_utils\-1.47" SG3_UTILS .SH "نام (NAME)" sg_compare_and_write \- ارسال دستور SCSI COMPARE AND WRITE .SH "خلاصه دستور (SYNOPSIS)" .B sg_compare_and_write [\fI\-\-dpo\fR] [\fI\-\-fua\fR] [\fI\-\-fua_nv\fR] [\fI\-\-grpnum=GN\fR] [\fI\-\-help\fR] \fI\-\-in=IF\fR [\fI\-\-inw=WF\fR] \fI\-\-lba=LBA\fR [\fI\-\-num=NUM\fR] [\fI\-\-quiet\fR] [\fI\-\-timeout=TO\fR] [\fI\-\-verbose\fR] [\fI\-\-version\fR] [\fI\-\-wrprotect=WP\fR] [\fI\-\-xferlen=LEN\fR] \fIDEVICE\fR .SH "توضیحات (DESCRIPTION)" .\" Add any additional description here دستور SCSI COMPARE AND WRITE را به \fIDEVICE\fR ارسال می‌کند. این ابزار بافر مقایسه و بافر نوشتن را از یک یا دو پرونده واکشی می‌کند. اگر گزینه \fI\-\-inw=WF\fR داده شود، بافر مقایسه از پرونده مشخص‌شده با \fI\-\-in=IF\fR واکشی شده در حالی که بافر نوشتن از پرونده مشخص‌شده با \fI\-\-inw=WF\fR واکشی می‌شود. اگر گزینه \fI\-\-inw=WF\fR داده نشود، بافرهای الحاق‌شده مقایسه و نوشتن از پرونده مشخص‌شده با گزینه \fI\-\-in=IF\fR واکشی می‌شوند. .PP انتظار می‌رود این بافرها هرکدام حاوی \fINUM\fR بلوک داده باشند. مقایسه در آدرس بلوک منطقی \fILBA\fR روی \fIDEVICE\fR آغاز می‌شود و اگر مقایسه شکست بخورد (یعنی بافر مقایسه ارائه‌شده با داده‌های موجود در \fILBA\fR روی \fIDEVICE\fR برابر نباشد)، دستور COMPARE AND WRITE با کلید سنس MISCOMPARE به پایان می‌رسد. در این حالت این ابزار کار خود را پایان داده و وضعیت خروج 14 (که مقدار کلید سنس MISCOMPARE است) را تنظیم می‌کند. .PP اگر مقایسه موفقیت‌آمیز باشد، بافر نوشتن ارائه‌شده از آدرس \fILBA\fR به مدت \fINUM\fR بلوک روی \fIDEVICE\fR ذخیره می‌شود. .PP تعداد بایت‌های واقعی انتقال‌یافته در بافر خروجی داده (data\-out) در دستور COMPARE AND WRITE ممکن است لازم باشد توسط کاربر با گزینه \fI\-\-xferlen=LEN\fR مشخص شود. مقدار پیش‌فرض \fILEN\fR برابر (2 * \fINUM\fR * 512) است که برای مقدار پیش‌فرض \fINUM\fR برابر ۱، معادل 1024 می‌باشد. اگر اندازه بلوک غیر از 512 باشد، کاربر باید از گزینه \fI\-\-xferlen=LEN\fR استفاده کند. اگر اطلاعات حفاظتی ارائه شده باشد (با مقداری از \fIWP\fR غیر از 0 که مقدار پیش‌فرض است)، آنگاه برای \fINUM\fR برابر ۱، مقدار \fILEN\fR باید 1040 باشد. توجه داشته باشید که دستور SCSI READ CAPACITY توسط این ابزار اجرا نمی‌شود (مثلاً برای یافتن اندازه بلوک). .PP تعریف T10 از دستور SCSI COMPARE AND WRITE ایجاب می‌کند که \fIDEVICE\fR مقایسه و نوشتن اختیاری را به‌صورت یک سلسله اقدامات بدون وقفه پیاده‌سازی کند. بسته به برخی تنظیمات دیگر \fIDEVICE\fR، ممکن است یک عملیات اعتبارسنجی (verify) پیش از مقایسه رخ دهد. .PP هنگامی که عدم تطابق میان بافر مقایسه و بلوک‌های خوانده‌شده از آدرس \fILBA\fR روی \fIDEVICE\fR رخ دهد، بافر سنس حاوی کلید سنس MISCOMPARE باعث ارسال چندین پیام به stderr می‌شود (از جمله آفست نخستین بایت ناسازگار). برای جلوگیری از نمایش این پیام‌ها از گزینه \fI\-\-quiet\fR استفاده کنید. با یا بدون گزینه \fI\-\-quiet\fR، وضعیت خروج روی 14 تنظیم خواهد شد. .PP این دستور در SBC\-3 تعریف شده که جدیدترین ویرایش آن 36 است. SBC\-3 و سایر اسناد SCSI را می‌توان در یافت. .SH "گزینه‌ها (OPTIONS)" آرگومان‌های گزینه‌های بلند برای گزینه‌های کوتاه نیز الزامی هستند. گزینه‌ها بر اساس نام گزینه بلند به ترتیب الفبایی مرتب شده‌اند. .TP \fB\-d\fR, \fB\-\-dpo\fR تنظیم بیت DPO در CDB دستور COMPARE AND WRITE. .TP \fB\-f\fR, \fB\-\-fua\fR تنظیم بیت FUA در CDB دستور COMPARE AND WRITE. .TP \fB\-F\fR, \fB\-\-fua_nv\fR تنظیم بیت FUA_NV در CDB دستور COMPARE AND WRITE. این بیت در SBC\-3 ویرایش 35d حذف شد و موقعیت آن با عنوان «رزرو شده» علامت‌گذاری گردید. .TP \fB\-g\fR, \fB\-\-grpnum\fR=\fIGN\fR که در آن \fIGN\fR مقداری است که در فیلد شماره گروه در CDB دستور COMPARE AND WRITE قرار می‌گیرد. مقدار \fIGN\fR باید بین 0 تا 63 باشد که 0 پیش‌فرض است. .TP \fB\-h\fR, \fB\-\-help\fR نمایش پیام راهنما و سپس خروج. .TP \fB\-i\fR, \fB\-\-in\fR=\fIIF\fR خواندن داده (باینری) از پرونده‌ای به نام \fIIF\fR. این پرونده یا شامل بافرهای ترکیبی مقایسه و نوشتن است (در صورتی که گزینه \fI\-\-inw=WF\fR داده نشده باشد) یا صرفاً بافر مقایسه (هنگامی که گزینه \fI\-\-inw=WF\fR داده شده باشد). اگر \fIIF\fR برابر '\-' باشد، از ورودی استاندارد stdin (مانند یک لوله) خوانده می‌شود. .TP \fB\-C\fR, \fB\-\-inc\fR=\fIIF\fR مشابه گزینه \fB\-\-in\fR. .TP \fB\-D\fR, \fB\-\-inw\fR=\fIWF\fR خواندن داده (باینری) از پرونده‌ای به نام \fIWF\fR. این بافر نوشتن خواهد بود که نیمه دوم بافر خروجی داده ارسالی به \fIDEVICE\fR در دستور COMPARE AND WRITE را تشکیل می‌دهد. توجه داشته باشید که در صورت ارائه این گزینه، انتظار می‌رود \fI\-\-in=IF\fR شامل بافر مقایسه مربوطه باشد. .TP \fB\-l\fR, \fB\-\-lba\fR=\fILBA\fR که در آن \fILBA\fR آدرس بلوک منطقی برای شروع دستور COMPARE AND WRITE است. فرض بر مبنای ده‌دهی است مگر اینکه پیشوند '0x' یا پسوند 'h' داشته باشد. .TP \fB\-n\fR, \fB\-\-num\fR=\fINUM\fR که در آن \fINUM\fR تعداد بلوک‌هایی است که باید از آدرس \fILBA\fR خوانده شده و با بافر مقایسه شوند؛ و در صورت تطابق، تعداد \fINUM\fR بلوک است که از آدرس \fILBA\fR نوشته می‌شوند. مقدار پیش‌فرض برای \fINUM\fR برابر 1 است. .TP \fB\-q\fR, \fB\-\-quiet\fR عدم نمایش پیام‌های بافر سنس مربوط به کلید سنس MISCOMPARE که در غیر این صورت به stderr ارسال می‌شدند. وضعیت خروج همچنان روی 14 که مقدار کلید سنس نشان‌دهنده MISCOMPARE است تنظیم خواهد شد. .TP \fB\-t\fR, \fB\-\-timeout\fR=\fITO\fR که در آن \fITO\fR مقدار مهلت زمانی دستور برحسب ثانیه است. مقدار پیش‌فرض 60 ثانیه است. اگر \fINUM\fR بزرگ (یا صفر) باشد، ممکن است دستور به زمان بسیار بیشتری از 60 ثانیه برای تکمیل نیاز داشته باشد. .TP \fB\-v\fR, \fB\-\-verbose\fR افزایش درجه پرگویی (پیام‌های اشکال‌زدایی). .TP \fB\-V\fR, \fB\-\-version\fR خروجی دادن رشته نگارش و سپس خروج. .TP \fB\-w\fR, \fB\-\-wrprotect\fR=\fIWP\fR تنظیم فیلد WRPROTECT در cdb به \fIWP\fR. مقدار پیش‌فرض 0 است که نشان می‌دهد هیچ اطلاعات حفاظتی (همراه با داده‌های کاربر) توسط این ابزار ارسال نمی‌شود. .TP \fB\-x\fR, \fB\-\-xferlen\fR=\fILEN\fR که در آن \fILEN\fR طول بافر خروجی داده برحسب بایت است. مقدار پیش‌فرض آن (2 * \fINUM\fR * 512) بایت است. اگر اندازه بلوک \fIDEVICE\fR غیر از 512 بایت باشد یا \fIWP\fR غیرصفر باشد (به معنی اطلاعات حفاظتی اضافی)، این مقدار پیش‌فرض نادرست خواهد بود و کاربر باید مقدار صحیح \fILEN\fR را مشخص کند. .SH "نکات (NOTES)" آرگومان‌های عددی گوناگون (مانند \fILBA\fR) ممکن است شامل پسوندهای ضریب‌دار باشند یا در مبنای شانزده ارائه شوند. بخش «NUMERIC ARGUMENTS» در صفحه راهنمای sg3_utils(8) را ببینید. .SH "مثال‌ها (EXAMPLES)" پیش از بازنویسی دو بلوک اول هر دستگاه ذخیره‌سازی (SCSI) که انتخاب شده است، یک نسخه پشتیبان تهیه کنید. فرض می‌شود اندازه بلوک منطقی 512 بایت است. از دو بلوک اول یک نسخه (در backup01.bin) بگیرید: .PP # sg_dd if=/dev/sg1 bs=512 of=backup01.bin count=2 2+0 records in 2+0 records out .PP .B "هشدار:" اگر ‎/dev/sg1‎ مربوط به دیسکی در سیستم شما است که در حال حاضر حاوی سیستم‌های پرونده سوارشده (mounted) است، ادامه _ندهید_. در صورت امکان، تمام سیستم‌های پرونده را از روی آن دیسک پیاده (unmount) کنید. اگر این کار امکان‌پذیر نیست، از دیسک دیگری که هیچ سیستم پرونده سوارشده‌ای روی آن نیست استفاده نمایید. در لینوکس راه‌انداز scsi_debug گزینه خوبی برای آزمایش است. .PP اکنون بلوک اول را با بایت‌های 0xff پر کنید: .PP # sg_dd iflag=ff bs=512 of=/dev/sg1 count=1 1+0 records in 1+0 records out .PP و بلوک دوم را با بایت‌های 0x0: .PP # sg_dd iflag=00 bs=512 seek=1 of=/dev/sg1 count=1 1+0 records in 1+0 records out .PP اکنون این دو بلوک را در یک پرونده کپی کنید: .PP # sg_dd if=/dev/sg1 bs=512 of=ff00.bin count=2 2+0 records in 2+0 records out .PP اکنون می‌توانیم یک دستور compare and write انجام دهیم. به آن گفته شده است بلوک اول (یعنی LBA 0) را با بلوک اول پرونده داده‌شده (یعنی ff00.bin) مقایسه کند. اگر برابر باشند (هر دو باید پر از بایت‌های 0xff باشند)، از آنجا که مقایسه موفقیت‌آمیز است، بلوک دوم در ff00.bin را روی LBA 0 خواهد نوشت: .PP # sg_compare_and_write \-\-in=ff00.bin \-\-lba=0 \-\-num=1 /dev/sg1 .PP بی‌خبری خوش‌خبری است (عدم نمایش خطا نشان از موفقیت دارد). اکنون اگر دوباره آن دستور را اجرا کنیم: .PP # sg_compare_and_write \-\-in=ff00.bin \-\-lba=0 \-\-num=1 /dev/sg1 Miscompare at byte offset: 0 [0x0] sg_compare_and_write failed: Miscompare .PP این نتیجه مورد انتظار است. اولین دستور sg_compare_and_write در نهایت بایت‌های 0x0 را روی LBA 0x0 نوشت. دستور دوم sg_compare_and_write آدرس LBA 0x0 را با بایت‌های 0xff مقایسه می‌کند و بلافاصله (یعنی در آفست بایت: 0) شکست می‌خورد. اکنون 3 بایت اول ff00.bin را با 0x0 بازنویسی می‌کنیم: .PP # sg_dd bs=1 iflag=00 of=ff00.bin count=3 3+0 records in 3+0 records out .PP به عملوند 'bs=1' توجه کنید. ابزار dd (و در نتیجه sg_dd) برای انجام ویرایش‌های باینری کوچک روی یک پرونده بسیار مفید است. اکنون اگر دوباره آن دستور sg_compare_and_write را اجرا کنیم، همچنان با شکست مواجه می‌شود اما با یک تفاوت کوچک: .PP # sg_compare_and_write \-\-in=ff00.bin \-\-lba=0 \-\-num=1 /dev/sg1 Miscompare at byte offset: 3 [0x3] sg_compare_and_write failed: Miscompare .PP بنابراین بایت‌های آفست 0، 1 و 2 برابر ارزیابی شدند اما بایت آفست 3 برابر نبود. دستور SCSI COMPARE AND WRITE در نخستین بایت ناسازگار متوقف خواهد شد. .SH "وضعیت خروج (EXIT STATUS)" وضعیت خروج sg_compare_and_write در صورت موفقیت 0 است. اگر مرحله مقایسه شکست بخورد، وضعیت خروج 14 است. برای سایر مقادیر وضعیت خروج، بخش EXIT STATUS را در صفحه راهنمای sg3_utils(8) ببینید. .PP نسخه‌های پیشین این ابزار هنگام بروز MISCOMPARE وضعیت خروج 98 را تنظیم می‌کردند. .SH "نویسندگان (AUTHORS)" نوشته شده توسط Shahar Salzman. نگهداری توسط Douglas Gilbert. افزونه‌ها توسط Eric Seppanen. .SH "گزارش باگ‌ها (REPORTING BUGS)" گزارش باگ‌ها به shahar.salzman@kaminario.com یا dgilbert@interlog.com .SH "حق نشر (COPYRIGHT)" Copyright \(co 2012\-2020 Kaminario Technologies LTD .br Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: .br * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. .br * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. .br * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. .PP THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Kaminario Technologies LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .SH "همچنین ببینید (SEE ALSO)" .B sg_xcopy, sg_receive_copy_results(sg3_utils)