SG_DD(8) SG3_UTILS SG_DD(8) (NAME) sg_dd - SCSI (SYNOPSIS) sg_dd [bs=BS] [conv=CONV] [count=COUNT] [ibs=BS] [if=IFILE] [iflag=FLAGS] [obs=BS] [of=OFILE] [oflag=FLAGS] [seek=SEEK] [skip=SKIP] [--help] [--verbose] [--version] [blk_sgio={0|1}] [bpt=BPT] [cdbsz={6|10|12|16}] [cdl=CDL] [coe={0|1|2|3}] [coe_limit=CL] [dio={0|1}] [grpnum=GN] [odir={0|1}] [of2=OFILE2] [retries=RETR] [sync={0|1}] [time={0|1}[,TO]] [verbose=VERB] [--dry-run] [--nocopy] [--progress] [--verify] (DESCRIPTION) . <<>> SCSI ( sg) (raw) ioctl SG_IO ( 2.6 ). dd(1) . <<>> dd(1) . . . --verify SCSI WRITE SCSI VERIFY . VERIFY MISCOMPARE . --verify OFILE sg oflag=sgio . --verify cmp(1) . sg3_utils . <> sg_dd . ddpt . ddpt . NVMe : << NVME>> . (OPTIONS) blk_sgio={0|1} 0 ( /dev/sda) ( read(2) write(2) / ). 1 ioctl SG_IO SCSI / . 2.6 . ATAPI ( cd/dvd) SCSI ATA ( USB ). ( /dev/sda3) ( ). 0 . 'sgio' . bpt=BPT / BPT ( ). . bs=512 (KiB) ( ). cd/dvd bpt . blk_sgio=1 ( sg /sys/block//queue/max_sectors_kb ). bs=BS BS ( SCSI ). dd(1) BS . cdrom ( ). / BS * BPT . cdbsz={6|10|12|16} READ / WRITE SCSI sg ( 'iflag=sgio' / 'oflag=sgio' ). SCSI ( BPT () SCSI ). cdl=CDL . CDL . IFILE OFILE ( pass-through ). IFILE OFILE . 0 7 0 . READ WRITE ( READ(32) WRITE(32) WRITE SCATTERED ). cdbsz CDL 0 cdbsz . Command duration limit A B Command duration limit T2A T2B . sdparm . coe={0|1|2|3} ('coe' continue on error) 1 . sg 'sgio' . sg_dd . 0 . 'coe' . coe_limit=CL CL ( "coe>0") . IFILE ioctl SG_IO . 0 . << >> . conv=sparse <<>> . count=COUNT COUNT IFILE OFILE. ( IFILE OFILE) sg SCSI READ CAPACITY ( ) . . skip=SKIP seek=SEEK count ( ) count . COUNT . COUNT ( count=-1 ) . dio={0|1} 0 / () sg . 1 / / . / /sys/module/sg/parameters/allow_dio 0 ( / ). 'iflag=dio' 'oflag=dio' . grpnum=GN << >> (0 0x3f) SCSI READ WRITE ( READ(6) WRITE(6)) . GN . 0 . IFILE ( SCSI READ) OFILE ( SCSI WRITE) . fcntl(F_SET_FILE_RW_HINT) . OFILE oflag=direct F_SET_FILE_RW_HINT ( fcntl(F_SET_RW_HINT) ). ibs=BS BS 'bs=' . if=IFILE IFILE (stdin). IFILE '-' . IFILE SKIP . iflag=FLAGS FLAGS . IFILE IFILE . obs=BS BS 'bs=' . odir={0|1} ( /dev/sda) O_DIRECT . . 0 ( O_DIRECT ). sg . blk_sgio : O_DIRECT SCSI ioctl SG_IO . of=OFILE OFILE (stdout). OFILE '-' . OFILE /dev/null . OFILE '.' () /dev/null ( ). OFILE (truncate) OFILE 'oflag=append' SEEK . of2=OFILE2 OFILE2. ( ). OFILE2 fifo ( ) . OFILE2 . OFILE2 fifo ( ) ( 'md5sum OFILE2') . oflag=FLAGS FLAGS . OFILE OFILE /dev/null '.' () . retries=RETR . RETR READ WRITE SCSI RETR . . seek=SEEK SEEK bs OFILE. 0 ( ). skip=SKIP SKIP bs IFILE. 0 ( ). sync={0|1} 1 SYNCHRONIZE CACHE OFILE . OFILE sg 'blk_sgio=1' . time={0|1}[,TO] 1 ( stderr) . 0 () . TO SCSI READ WRITE VERIFY . . verbose=VERB VERB stderr . . 1 . 2 (cdb) SCSI ( READ WRITE) . . 3 4 SCSI ( read() write() ) . SCSI ( sg) 'blk_sgio=1' . -d, --dry-run . IFILE OFILE . . -h, --help . -n, --nocopy OFILE stdout . ( --verify) OFILE . --nc . IFILE '--of=/dev/null' . '--of=/dev/null' . -p, --progress . "completed" . . 'time=1' . -v, --verbose verbose=1 . ( "-vv") verbose=2 . -x, --verify ( cmp(1) ) . "oflag=sparse" . of=OFILE OFILE sg "oflag=sgio" . SCSI VERIFY BYTCHK 1 . VERIFY WRITE . VERIFY(6) . oflag=coe . -V, --version . (CONVERSIONS) "conv=" . . sg_dd dd ( ASCII EBCDIC) . sg_dd . nocreat "oflag=nocreat" : OFILE . noerror "iflag=coe" . "coe" . OFILE . notrunc dd OFILE . null . sparse FreeBSD "conv=sparse" sg_dd . "sparse" <<>> . sync sg_dd . dd ( ) "conv=noerror,sync" "iflag=coe" sg_dd . (FLAGS) : 00 iflag= if=IFILE . . "if=/dev/zero" ( ) . 'iflag=00,ff' ( big endian) . skip=SKIP . sgp_dd --chkaddr . append O_APPEND OFILE . . seek=SEEK . SEEK SEEK . ('append') ( ) . coe (continue on error). sg 'sgio' . 'iflag=coe oflag=coe' 'coe=1' . ( 'iflag=coe,coe') 'coe=2' . (blank check) . . (miscompare) VERIFY ( --verify ) 'oflag=coe' . 'coe' ( 'coe=2') SCSI READ LONG . READ LONG CORRCT 'coe' . SCSI ( AWRE ARRE / sdparm ). sg_dd . stderr . 'conv=noerror,sync' dd(1) . READ LONG . dio sg / . / / . / /sys/module/sg/parameters/allow_dio 0 ( / ). direct O_DIRECT IFILE / OFILE . / . . sg . 'iflag=sgio' / 'oflag=sgio' : O_DIRECT SCSI ioctl SG_IO . dpo DPO ( disable page out) READ WRITE SCSI . cdb READ WRITE . ( ) . / . dsync O_SYNC IFILE / OFILE . 'd' 'sync=0|1' ( ) . excl O_EXCL IFILE / OFILE . ff iflag= if=IFILE . . 0xff ( ) . 'iflag=00,ff' ( big endian) . skip=SKIP . flock ( IFILE / OFILE) (advisory exclusive lock) flock() . flock "FLOCK_EX | FLOCK_NB" << >> (temporarily unavailable) . . fua FUA ( force unit access) READ / WRITE SCSI . sg 'sgio' . SCSI READ WRITE FUA . nocache posix_fadvise() . nocreat oflag=FLAGS . OFILE . OFILE . () OFILE ( ). OFILE ( '/dev/sdc') . 'dev/sdc' ( USB) '/dev/sdc' . null . pt sgio . ddpt . random iflag= if=IFILE . . . getrandom(2) (seed) mrand48(3) . ent(1) . . . sgio read() write() ioctl SG_IO . ioctl SG_IO SCSI READ WRITE . sg ioctl SG_IO . 'blk_sgio=1' . sparse BS * BPT . . oflag . (seekable) ( stdout) . /dev/null . OFILE . OFILE oflag=sparse . md5sum sha1sum oflag=sparse . OFILE ( SCSI FORMAT). (RETIRED OPTIONS) : append=0 | 1 'oflag=append' . ( ) . 'append' . fua=0 | 1 | 2 | 3 (force unit access). 3 fua IFILE OFILE 2 fua IFILE 1 fua OFILE 0 () fua . 'fua' . (NOTES) ( /dev/sda /dev/hda) IFILE . '-iflag=direct' 'iflag=sgio' 'blk_sgio=1' / . '-iflag=direct' ( SCSI ATA ). 'iflag=sgio' 'blk_sgio=1' ioctl SG_IO SCSI ( SCSI ATA). OFILE . ( SKIP) . "NUMERIC ARGUMENTS" sg3_utils(8) . COUNT SKIP SEEK ( ) . . : SCSI DMA sg ( ). <</ >> 'dio' <</ >> DMA . <</ >> sg . 'echo 1 > /sys/module/sg/parameters/allow_dio' . stderr dd stdout . . READ LONG <<>> 'coe=2' ( 'coe=3') . . sg_dd (bind) . raw(8) . sg SCSI sg_map . fdisk(8) [ "-ul" ]. sg ( blk_sgio=1 ) SCSI READ WRITE ( SBC) CD/DVD/HD-DVD/BD . (tape) sg_dd . ( 0xffff [ 0xffffffff]) sg SCSI READ(16) WRITE(16) . () 'blk_sgio=1' . : sg_dd if=/dev/sdb2 blk_sgio=1 of=t bs=512 NVME (NVME SUPPORT) NVMe . ("char") NVME : /dev/nvme /dev/ngn ( 0) NVMe ( 1) . /proc/devices "nvme-generic" . NVMe : /dev/nvmen[p] ( 1). NVMe sg_dd / ( read(2) write(2)). SCSI/NVMe "sgio" "pt" ( iflag=pt if=/dev/nvme0n1). SCSI NVMe ( iflag=pt if=/dev/nvme0n1p2) (pass-through) . SCSI NVMe ( ) . "p2" if=/dev/nvme0n1p2 . READ WRITE NVMe "NVM" NVMe . /dev/nvme0 (administrative) . /dev/ngn ("char") NVMe . read(2) write(2) SCSI/NVMe . << SCSI/NVME>> SCSI libsgutils NVMe . SCSI NVMe ( SNTL) NVMe NVMe . (EXAMPLES) dd : sg_dd if=/dev/sg0 of=t bs=512 count=1MB /dev/sg0 ( ) t . /dev/sda /dev/sg0 : dd if=/dev/sda iflag=direct of=t bs=512 count=1000000 dd bs count . 'iflag=direct' . ATA: raw /dev/raw/raw1 /dev/hda sg_dd if=/dev/raw/raw1 of=t bs=512 count=1MB SCSI ATA: raw /dev/raw/raw2 /dev/hda3 sg_dd if=/dev/sg0 skip=10123456 of=/dev/raw/raw2 bs=512 SCSI skip ( ) SCSI . count . /dev/hda3 ATA /dev/hda . /dev/sg0 /dev/hda ( ). ( ) : sg_dd if=/dev/sg0 of=/dev/null bs=512 count=2m time=1 : "time to transfer data was 18.779506 secs, 57.18 MB/sec". "MB/sec" . 'of2=' md5sum : mkfifo fif md5sum fif & sg_dd if=/dev/sg3 iflag=coe of=sg3.img oflag=sparse of2=fif bs=512 /dev/sg3 ( ) ( sparse) sg3.img . md5sum . (SIGNALS) dd : SIGINT SIGQUIT SIGPIPE + . SIGUSR1 . stderr . (EXIT STATUS) sg_dd 0 . sg3_utils(8) . 'coe' 'retries' SCSI . flock . (AUTHORS) Douglas Gilbert Peter Allworth. (REPORTING BUGS) . (COPYRIGHT) (C) 2000-2026 Douglas Gilbert GPL . . (SEE ALSO) cmp(1) sg_dd https://sg.danny.cz/sg/sg_dd.html . POSIX sgp_dd sg3_utils . sgm_dd / (memory mapped IO) sg . lmbench lmdd . dt https://www.scsifaq.org/RMiller_Tools/index.html . SCSI sdparm(sdparm) . sg_verify(sg3_utils) . : raw(8), dd(1), ddrescue(GNU), ddpt sg3_utils-1.49 April 2026 SG_DD(8)