Provided by: dcfldd_1.9.2-1_amd64 bug

NAME

       dcfldd - enhanced version of dd for forensics and security

SYNOPSIS

       dcfldd [OPTION]...

DESCRIPTION

       Copy a file, converting and formatting according to the options.

       dcfldd  was  initially  developed  at Department of Defense Computer Forensics Lab (DCFL).
       This tool is based on the dd program with the following additional features:

       •  Hashing on-the-fly: dcfldd can hash the input data as it is being transferred,  helping
          to ensure data integrity.

       •  Status  output:  dcfldd  can  update the user of its progress in terms of the amount of
          data transferred and how much longer operation will take.

       •  Flexible disk wipes: dcfldd can be used to wipe disks quickly and with a known  pattern
          if desired.

       •  Image/wipe  verify: dcfldd can verify that a target drive is a bit-for-bit match of the
          specified input file or pattern.

       •  Multiple outputs: dcfldd can output to multiple files or disks at the same time.

       •  Split output: dcfldd can split output to multiple files with more configurability  than
          the split command.

       •  Piped  output and logs: dcfldd can send all its log data and output to commands as well
          as files natively.

       •  When dd uses a default block size (bs, ibs, obs) of 512 bytes, dcfldd uses 32768  bytes
          (32 KiB) which is HUGELY more efficient.

       •  The following options are present in dcfldd but not in dd: ALGORITHMlog:, errlog, hash,
          hashconv, hashformat, hashlog, hashlog:, hashwindow, limit,  of:,  pattern,  sizeprobe,
          split,    splitformat,   statusinterval,   textpattern,   totalhashformat,   verifylog,
          verifylog:, vf.

       dcfldd supports the following letters to specify amount of data: k for kilo, M for Mega, G
       for  Giga,  T  for  Tera,  P for Peta, E for Exa, Z for Zetta and Y for Yotta. E.g. 10M is
       equal to 10 MiB. See the BLOCKS AND BYTES section to get other possibilities.

OPTIONS

       bs=BYTES
              Force ibs=BYTES and obs=BYTES. Default value is 32768 (32KiB). See BLOCKS AND BYTES
              section.  Warning:  the  block  size  will  be  created  in RAM. Make sure you have
              sufficient amount of free memory.

       cbs=BYTES
              Convert BYTES bytes at a time. (see BLOCKS AND BYTES section)

       conv=KEYWORDS
              Convert the file as per the comma separated keyword list.

       count=BLOCKS
              Copy only BLOCKS input blocks. (see BLOCKS AND BYTES section)

       limit=BYTES
              Similar to count but using BYTES instead of BLOCKS. (see BLOCKS AND BYTES section)

       ibs=BYTES
              Read BYTES bytes at a time. (see BLOCKS AND BYTES section)

       if=FILE
              Read from FILE instead of stdin. (see BLOCKS AND BYTES section)

       obs=BYTES
              Write BYTES bytes at a time. (see BLOCKS AND BYTES section)

       of=FILE
              Write to FILE instead of stdout. NOTE: of=FILE may be used several times  to  write
              output to multiple files simultaneously.

       of:=COMMAND
              Exec and write output to process COMMAND.

       seek=BLOCKS
              Skip BLOCKS obs-sized blocks at start of output. (see BLOCKS AND BYTES section)

       skip=BLOCKS
              Skip BLOCKS ibs-sized blocks at start of input. (see BLOCKS AND BYTES section)

       pattern=HEX
              Use the specified binary pattern as input. You can use a byte only.

       textpattern=TEXT
              Use repeating TEXT as input. You can use a character only.

       errlog=FILE
              Send error messages to FILE as well as stderr.

       hash=NAME
              Do  hash  calculation  in parallel with the disk reading. Either md5, sha1, sha256,
              sha384 or sha512 can  be  used.  Default  algorithm  is  md5.  To  select  multiple
              algorithms to run simultaneously enter the names in a comma separated list.

       hashlog=FILE
              Send  hash  output  to  FILE  instead  of  stderr.  If  you are using multiple hash
              algorithms  you  can  send  each  to  a  separate   file   using   the   convention
              ALGORITHMlog=FILE, for example md5log=FILE1, sha1log=FILE2, etc.

       hashwindow=BYTES
              Perform  a hash on every BYTES amount of data. The partial results will be shown in
              screen. The default hash is md5 but you can use hash= option to choose other.

       hashlog:=COMMAND
              Exec and write hashlog to process COMMAND.

       ALGORITHMlog:=COMMAND
              Also works in the same fashion of hashlog:=COMMAND.

       hashconv=[before|after]
              Perform the hashing before or after the conversions.

       hashformat=FORMAT
              Display each hashwindow according  to  FORMAT  the  hash  format  mini-language  is
              described below.

       totalhashformat=FORMAT
              Display  the  total hash value according to FORMAT the hash format mini-language is
              described below.

       status=[on|off]
              Display a continual status message on stderr. Default state is "on".

       statusinterval=N
              Update the status message every N blocks. Default value is 256.

       sizeprobe=[if|of|BYTES]
              Determine the size of the input or output file or an amount of BYTES for  use  with
              status  messages. This option gives you a percentage indicator around the sizeprobe
              value. WARNING: do not use this option against a tape device. (see BLOCKS AND BYTES
              section)

       split=BYTES
              Write  every  BYTES  amount  of  data  to a new file. This operation applies to any
              of=FILE that follows (split= must  be  put  before  of=).  (see  BLOCKS  AND  BYTES
              section)

       splitformat=[TEXT|MAC|WIN]
              The  file extension format for split operation. You may use "a" for letters and "n"
              for numbers. If you use annn, an extension started as a000 will  be  appended;  the
              last  possible extension for this format will be z999.  splitformat=an will provide
              a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3... If nothing  is  specified
              the  default  format  is "nnn". NOTE: the split and splitformat options take effect
              only for output files (option of=) specified AFTER  these  options  appear  in  the
              command line (e.g. split=50M splitformat=annn of=/tmp/test.iso).  Likewise, you may
              specify it several times for different output files within the same  command  line.
              You  may  use  as many digits in any combination you would like. E.g. "anaannnaana"
              would be valid, but a quite insane (see BLOCKS AND BYTES section).  Other  possible
              approach  is  MAC.  If  "MAC"  is  used,  a  suffix dmg and several dmgpart will be
              appended. In other words, it will generate a partial disk image file, used  by  the
              Mac  OS X operating system. dmgpart files are usually provided with a corresponding
              dmg file, which is the master file for the split archive.  If dmg is opened in  Mac
              OS  X,  all  dmgpart  will  be  read  too.  The  last  option  is  WIN,  which will
              automatically output file naming of foo.001, foo.002, ..., foo.999, foo.1000, ....

       vf=FILE
              Verify that FILE matches the specified input.

       verifylog=FILE
              Send verify results to FILE instead of stderr.

       verifylog:=COMMAND
              Exec and write verify results to process COMMAND.

       diffwr=[on|off]
              Only write to output if destination block content differs. This  operation  applies
              to any of=FILE that follows (diffwr= must be put before any of=).

       --help Display a help page and exit.

       --version
              Output version information and exit.

BLOCKS AND BYTES

       BLOCKS and BYTES may be followed by the following multiplicative suffixes: xM M, c 1, w 2,
       b 512, kD 1000, k 1024, MD 1,000,000, M 1,048,576, GD 1,000,000,000, G 1,073,741,824,  and
       so on for T, P, E, Z, Y.

KEYWORDS

       Each KEYWORD may be:

       ascii  From EBCDIC to ASCII.

       ebcdic From ASCII to EBCDIC.

       ibm    From ASCII to alternated EBCDIC.

       block  Pad newline-terminated records with spaces to cbs-size.

       unblock
              Replace trailing spaces in cbs-size records with newline.

       lcase  Change upper case to lower case.

       notrunc
              Do not truncate the output file.

       ucase  Change lower case to upper case.

       swab   Swap every pair of input bytes.

       noerror
              Continue after read errors.

       sync   Pad  every  input block with NULs to ibs-size. When used with block or unblock, pad
              with spaces rather than NULs.

FORMAT

       The structure of FORMAT may contain any valid text and  special  variables.  The  built-in
       variables are the following format: #variable_name#. To pass FORMAT strings to the program
       from a command line, it may be

       necessary to surround your FORMAT strings with "quotes."
              The built-in variables are listed below:

       window_start
              The beginning byte offset of the hashwindow.

       window_end
              The ending byte offset of the hashwindow.

       block_start
              The beginning block (by input blocksize) of the window.

       block_end
              The ending block (by input blocksize) of the hash window.

       hash   The hash value.

       algorithm
              The name of the hash algorithm.

       For example, the default FORMAT for hashformat and totalhashformat are:

           hashformat="#window_start# - #window_end#: #hash#" totalhashformat="Total (#algorithm#): #hash#"

       The FORMAT structure accepts the following escape codes:

       \n     Newline

       \t     Tab

       \r     Carriage return

       \      Insert the '\' character

       ##     Insert the '#' character as text, not a variable

EXAMPLES

       Each following line will create a 100 MiB file containing zeros:

           $ dcfldd if=/dev/zero of=test bs=1M count=100
           $ dcfldd if=/dev/zero of=test bs=100M count=1
           $ dcfldd if=/dev/zero of=test bs=50M count=2
           $ dcfldd if=/dev/zero of=test limit=100M

       To create a copy (forensics image) from a  disk  called  /dev/sdb  inside  a  file,  using
       input/output blocks of 4096 bytes (4 KiB) instead of 32 KiB (default):

           $ dcfldd if=/dev/sdb bs=4096 of=sdb.img

       As  the  last  example, plus calculating MD5 and SHA256 hashes, putting the results inside
       sdb.md5 and sdb.sha256. It is very useful for forensics works because the hashes  will  be
       processed in real time, avoiding a waste of time to make something as 'dd + md5 + sha256'.
       Considering that I/O disk is  very  slow  and  RAM  is  very  fast,  the  hashes  will  be
       calculated,  bit  per  bit  in memory, when the next portion of the disk is read. When all
       disk was read, all hashes are now ready.

           $ dcfldd if=/dev/sdb bs=4096 hash=md5,sha256 md5log=sdb.md5 sha256log=sdb.sha256 of=sdb.img

       To validate the image file against the original source:

           $ dcfldd if=/dev/sdb vf=sdb.img

       Splitting the image in 500 MiB slices, using the default bs  value  (32  KiB).  Note  that
       split= must be put before of= to work:

           $ dcfldd if=/dev/sdb split=500M of=sdb.img

       At the last example, using from a0000 up to z9999 as suffix for each split file:

           $ dcfldd if=/dev/sdb split=500M splitformat=annnn of=sdb.img

       Now,  dcfldd  will  work  byte  per byte (bs=1) and will hop 1056087439 bytes. After this,
       dcfldd will collect 200000 bytes and write the results to a file called airplane.jpg.

           $ dcfldd if=/dev/sda3 bs=1 skip=1056087439 count=200000 of=airplane.jpg

       In the last example, the same result could be obtained using "limit" instead  of  "count".
       The  main  difference is that count uses 200000*bs and limit uses 200000 bytes (regardless
       of the value declared in bs option):

           $ dcfldd if=/dev/sda3 bs=1 skip=1056087439 limit=200000 of=airplane.jpg

       To write something inside a file, you can use seek. Suppose you want to  write  a  message
       from  a file called message.txt inside a file called target.iso, hopping 200000 bytes from
       start of file:

           $ dcfldd if=message.txt bs=1 seek=200000 of=target.iso

       dcfldd also can send a result to be processed by an external command:

           $ dcfldd if=text.txt  of:="cat | sort -u"

       To convert a file from ASCII to EBCDIC:

           $ dcfldd if=text.asc conv=ebcdic of=text.ebcdic

       To convert a file from EBCDIC to ASCII:

           $ dcfldd if=text.ebcdic conv=ascii of=text.asc

SEE ALSO

       dd(1)

REPORTING BUGS

       Report bugs at https://github.com/resurrecting-open-source-projects/dcfldd/issues

AUTHORS

       dcfldd was originally written  by  Nicholas  Harbour.  Currently  is  maintained  by  some
       volunteers.

       GNU dd was written by Paul Rubin, David MacKenzie and Stuart Kemp.

       This  manpage  was  written  by dd authors, Nicholas Harbour, Joao Eriberto Mota Filho and
       others.