/usr/share/doc/sg3-utils/examples
NameSizeModeActions
archive/-0755rm
forwarded_sense.txt2960644editdlrm
Makefile31560644editdlrm
Makefile.freebsd20230644editdlrm
nvme_dev_self_test.hex8060644editdlrm
nvme_identify_ctl.hex11980644editdlrm
nvme_read_ctl.hex18320644editdlrm
nvme_write_ctl.hex18460644editdlrm
README7760644editdlrm
reassign_addr.txt4650644editdlrm
ref_sense.txt3050644editdlrm
scsi_inquiry.c41850644editdlrm
sdiag_sas_p0_cjtpat.txt4050644editdlrm
sdiag_sas_p0_prbs9.txt4070644editdlrm
sdiag_sas_p1_cjtpat.txt4640644editdlrm
sdiag_sas_p1_idle.txt5600644editdlrm
sdiag_sas_p1_prbs15.txt4080644editdlrm
sdiag_sas_p1_stop.txt3590644editdlrm
sgq_dd.c386790644editdlrm
sg_compare_and_write.txt24830644editdlrm
sg_excl.c61280644editdlrm
sg_persist_tst.sh36240755editdlrm
sg_sat_chk_power.c91640644editdlrm
sg_sat_smart_rd_data.c65560644editdlrm
sg_simple1.c60060644editdlrm
sg_simple2.c67440644editdlrm
sg_simple3.c66120644editdlrm
sg_simple4.c74240644editdlrm
sg_simple5.c76490644editdlrm
sg_simple16.c34940644editdlrm
sg_unmap_example.txt15710644editdlrm
sg__sat_identify.c77330644editdlrm
sg__sat_phy_event.c123040644editdlrm
sg__sat_set_features.c99340644editdlrm
transport_ids.txt11240644editdlrm
Edit: /usr/share/doc/sg3-utils/examples/sg_compare_and_write.txt (2483B)
# sg_compare_and_write.txt # This file provides a usage example of sg_compare_and_write. # sg_compare_and_write accepts a buffer containing 2 logical instances: # - the verify instance: used to match the current content of the LBA range # - the write instance: used to write to the LBA if the verify succeeds # # In case of failure to verify the data, the command will return with check # condition with the sense code set to MISCOMPARE DURING VERIFY OPERATION. # # The following example shows initialization, successful and unsuccessful # compare and write using sg3_utils. I am using caw_buf_zero2one and # caw_buf_one2zero as shown below. $ hexdump /tmp/caw_buf_zero2one 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000200 1111 1111 1111 1111 1111 1111 1111 1111 * 0000400 $ hexdump /tmp/caw_buf_one2zero 0000000 1111 1111 1111 1111 1111 1111 1111 1111 * 0000200 0000 0000 0000 0000 0000 0000 0000 0000 * 0000400 $ sg_map -i -x /dev/sg0 0 0 0 0 0 /dev/sda ATA ST3320613AS CC2H /dev/sg1 3 0 0 0 5 /dev/scd0 HL-DT-ST DVD-RAM GH22NS30 1.01 /dev/sg2 5 0 0 0 0 /dev/sdb KMNRIO K2 0000 /dev/sg3 5 0 0 1 0 /dev/sdc KMNRIO K2 0000 # First I zero out the volume to make sure that the first compare and write # will succeed $ sg_write_same --16 -i /dev/zero -n 0x200000 -x 512 /dev/sdc $ dd if=/dev/sdc bs=512 count=1 skip=100 2>/dev/null | hexdump 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000200 $ ./sg_compare_and_write --in=/tmp/caw_buf_zero2one --lba=100 --xferlen=1024 /dev/sdc # contents of LBA 100 are a block of ones $ dd if=/dev/sdc bs=512 count=1 skip=100 2>/dev/null | hexdump 0000000 1111 1111 1111 1111 1111 1111 1111 1111 * 0000200 # We repeat the same compare and write command (zero2one input buffer). # compare and write fails since the verify failed (compared the zero block to # the actual 1 block in LBA 100 $ ./sg_compare_and_write --in=/tmp/caw_buf_zero2one --lba=100 --xferlen=1024 /dev/sdc COMPARE AND WRITE: Fixed format, current; Sense key: Miscompare Additional sense: Miscompare during verify operation sg_compare_and_write: SCSI COMPARE AND WRITE failed # Now we use the second buffer (one2zero) $ ./sg_compare_and_write --in=/tmp/caw_buf_one2zero --lba=100 --xferlen=1024 /dev/sdc # operation succeeded, contents of LBA 100 are back to zero $ dd if=/dev/sdc bs=512 count=1 skip=100 2>/dev/null | hexdump 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000200