---
name: "sdd"
section: "1"
platform: "linux"
package: "sdd"
version: "1.52-13"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/sdd"
---

# sdd(1)

disk dump and restore to and from tape or file; copy and/or reblock

## NAME

sdd - disk dump and restore to and from tape or file; copy and/or reblock

## SYNOPSIS

**sdd** \[ **option**=value \] \[ **-flag** \]

## DESCRIPTION

*Sdd* copies the specified input file to a specified output file performing the requested conversions. The standard input and output are used by default. The input and output block size may be specified to take advantage of raw physical I/O.

After completion, sdd reports the number of whole records, the sum of bytes  from partial input and output blocks and the total amount in kilo bytes on input and output.

If *ibs* and *obs* differ, *sdd* is faster than *dd* due to the use of an intelligent algorithm.

## OPTIONS

- **-help**

  Print a summary of the available options.

- **if=***name*

  Input is taken from file *name;* default is *stdin.*

  If  **sdd** is installed suid root, *name* may be in remote syntax: user@host:filename as in  [**rcp**(1)](/rcp/1.md) even if  invoked by non root users. See SUID NOTES for more information.

  To make a file local although it includes a colon (:), the filename must start with: *'/'*, *'./'* or *'../'*

- **of=***name*

  Output is taken from file *name;* default is *stdout.* Note that *sdd* creates and truncates the output file by default; therefore the *oseek=#* option is useless without the *-notrunc* option except in special cases such as using magnetic tape or disk  special files.

  If  **sdd** is installed suid root, *name* may be in remote syntax: user@host:filename as in  [**rcp**(1)](/rcp/1.md) even if  invoked by non root users.

  Note that if **sdd** talks to an old  **rmt** remote tape server, it does not open a remote file with the  **O\_CREAT** open flag because this would be extremely dangerous. If the  **rmt** server on the other side is the  **rmt** server that comes with  **star** or the GNU **rmt** server, **sdd** may use the symbolic mode for the open flags. Only the symbolic open modes allow to send all possible open modes in a portable way to remote tape servers.

  It is recommended to use the  **rmt** server that comes with **star**. It is the only **rmt** server that gives platform independent compatibility with BSD, Sun and GNU **rmt** clients and it includes security features that may be set up in /etc/default/rmt.

- **-inull**

  Do not read input from file. This is similar to if=/dev/zero but much faster. *Sdd* uses a prepared cleared buffer to satisfy writes.

- **-onull**

  Do not produce any output. This is similar to **of=***/dev/null* but actually does not write to any file.

- **ibs=***#,* **obs=***#,* **bs=***#*

  Set input block size, output block size or both to # (default 512 Bytes).

- **cbs=***#*

  Set Conversion buffer size to #.

- **ivsize=***#,* **ovsize=***#*

  Set input volume size or output volume size to #. You can make copies from devices of different size by using this option. If you want to make a copy to a tape having a size of 60 MBytes you should use the option **ovsize=***60M.* If the capacity of the tape is exceeded, *sdd* wil ask for a second volume. In case *ivsize* is exceeded, if  *N\<cr\>* is typed, it is treated as an EOF condition and *sdd* writes any buffered data to output and exits. In case *ovsize* is exceeded, if *N\<cr\>* is typed, *sdd* stops and the statistics it prints show that more data were read than written.

- **count=***#*

  Transfer # of input records or until EOF.

- **iseek=***#,* **iskip=***#*

  Seek/skip the first # Bytes from input before beginning transfer.

- **oseek=***#,* **oskip=***#*

  Seek/skip the first # Bytes from output before beginning transfer.

- **seek=***#,* **skip=***#*

  Seek/skip the first # Bytes from input and output before beginning transfer.

- **ivseek=***#,* **ovseek=***#*

  Seek *#* Bytes from input/output at the beginning of each input/output volume before beginning transfer. (You can skip labels of disks and floppies with  this option.) Note that the *iseek/oseek* options still work, but only apply to the first volume. Their values are added to the values of *ivseek* and *ovseek.*

- **-notrunc**

  Do not truncate an already existing output file before beginning transfer. This enables it to copy one file into another.

- **-pg**

  Print a dot to *stderr* each time a record is written to indicate progress.

- **-time**, **-t**

  Report the total time and the transfer rate.

- **-noerror**

  Do not stop transfer on I/O errors. Error messages will appear on the screen.

- **-noerrwrite**

  Do not write blocks that are not read correctly. Seek on the output to skip the bad block. The output file must be seekable or  **-noerrwrite** will not work correctly.

- **-noseek**

  Do not *seek* after I/O errors. This implies *try=1.*

- **try=***#*

  Set retry count to *#.* Only if **-noerror** was specified. (default 2)

- **-debug**

  Turn on debugging messages. You can get knowledge about record sizes on tapes with variable record size with this option.

- **-fill**

  Pad every output record with zeros up to *obs.* If *ibs* equals *obs,* or only *bs* was specified, every record will be padded with zeros, otherwise this only applies to the last record.

- **-swab**

  Swaps bytes (except for the last byte in odd block sizes and odd transfers due to EOF).

- **-block**, **-unblock**

  Convert fixed length records to variable records and vice versa.

- **-lcase**, **-ucase**

  Map alphabetics to lower/upper case.

- **-ascii**, **-ebcdic**, **-ibm**

  Convert *EBCDIC* to *ASCII* resp. *ASCII* to *EBCDIC* resp. *ASCII* to the *IBM* variant of *EBCDIC.*

- **-help**

  Prints a short summary of the  **sdd** options and exits.

- **-version**

  Prints the  **sdd** version number string and exits.

## EXAMPLES

**sdd if=/dev/rsd0a of=/dev/nrst8 bs=2x7x17b**

Copies the disk */dev/rsd0a* to the tape */dev/nrst8* using a record size of 2\*7\*17 blocks. (this is 2 Cylinders.)

**sdd if=/dev/rsd0c of=/dev/rsd1c seek=1b bs=63k**

Copy the whole disk *sd0* to *sd1* preserving the old label on disk *sd1.*

## FILES

None.

## SEE ALSO

[dd(1)](/dd/1.md), [star(1)](/star/1.md), rmt(1), [tr(1)](/tr/1.md), [cp(1)](/cp/1.md), copy(1)

## DIAGNOSTICS

sdd: Read  f records + p bytes (total of x bytes = d.nnk).\
 sdd: Wrote f records + p bytes (total of x bytes = d.nnk).

The number of full records, the number of bytes in partial records and the total amount of data in KBytes.

With the *QUIT* signal ( usually ^\\ ) the actual state is displayed.

## NOTES

Opposed to *dd, sdd* is able to handle *-iseek -oseek -seek* as well as *-iskip -oskip -skip* regardless of the buffer size. You can make a whole physical copy of a disk without copying the label in one pass of *sdd.*

When numbers are unspecified they are taken to be bytes.

You can make them \`words' (2 bytes) if they are followed by a \`w' or \`W'.

You can make them blocks (512 bytes) if they are followed by a \`b' or \`B'.

You can make them Kbytes (1024 bytes) if they are followed by a \`k' or \`K'.

You can make them Mbytes (1024 \* 1024 bytes) if they are followed by a \`m' or \`M'.

You can make them Gbytes (1024 \* 1024 \*1024 bytes) if they are followed by a \`g' or \`G'.

A pair of numbers may be separated by \`\*' or \`x' to indicate a product.

## SUID NOTES

If  **sdd** is installed suid root,  **sdd** is able to make connections to remote files for non root users.  This is done by using the [rcmd(3)](/rcmd/3.md) interface to get a connection to a rmt(1) server.

**Sdd** resets its effective uid back to the real user id immediately after setting up the remote connection to the rmt server and before opening any other file.

## BUGS

The option **iskip=***#* and **oskip=***#* and **skip=***#* as well as **-block** and **-unblock** are not implemented.

It is confusing to allow the use of all additions together with the record counter *-count* as they are possible with **obs=***#.*
