Linux – dd コマンドについて詳しく解説

概要

本記事では、指定されたフォーマットでファイルやデータの変換およびコピーを行う dd コマンドについて解説します。

dd コマンド

dd コマンドは、指定されたフォーマットでファイルやデータの変換およびコピーを行うためのユーティリティです。 このコマンドは、ディスクイメージの作成やバックアップ、ディスクのコピー、データの変換などに使用されます。

注意点

of に指定するデバイスファイルやパスには十分な注意が必要です。 of にある既存のデータは上書きされてしまうため、誤って指定するとデータの損失を引き起こす可能性があります。 実行前にコマンドを慎重に確認してください。

基本構文

dd コマンドの基本構文は以下の通りです:

dd if=<input file> of=<output file> [options]
Bash
  • if は入力ファイル (input file) を指定します。標準入力を使用する場合は省略できます。
  • of は出力ファイル (output file) を指定します。標準出力を使用する場合は省略できます。

使用例

ディスク全体のバックアップ

ディスク全体をバックアップする例です。 以下のコマンドは、/dev/sda ディスク全体を backup.img ファイルにバックアップします。

dd if=/dev/sda of=backup.img bs=4M
Bash

ディスクイメージの復元

バックアップしたディスクイメージを元のディスクに復元する例です。 以下のコマンドは、backup.img/dev/sda に復元します。

dd if=backup.img of=/dev/sda bs=4M
Bash

ブート可能な USB ドライブの作成

ISO イメージファイルからブート可能な USB ドライブを作成する例です。 以下のコマンドは、linux.iso/dev/sdb に書き込みます。

dd if=linux.iso of=/dev/sdb bs=4M
Bash

データの変換

テキストファイルの内容を大文字に変換して新しいファイルに出力する例です。

dd if=input.txt of=output.txt conv=ucase
Bash

オプション

入出力に関するオプション

オプション 説明
bs=BYTES 一度に読み書きするバイト数を指定します (デフォルト: 512 バイト)。ibsobs を上書きします。
ibs=BYTES 一度に読み込むバイト数を指定します (デフォルト: 512 バイト)
obs=BYTES 一度に書き込むバイト数を指定します (デフォルト: 512 バイト)
cbs=BYTES 変換時に一度に処理するバイト数を指定します。
conv=CONVS CONVS に従ってファイルを変換します。
iflag=FLAGS FLAGS に従って読み込みを行います。
oflag=FLAGS FLAGS に従って書き込みを行います。
if=FILE 標準入力の代わりに FILE から読み込みます。
of=FILE 標準出力の代わりに FILE へ書き込みます。
count=N 入力ブロックの数を N ブロックだけコピーします。
skip=N 入力の先頭から N ブロックをスキップします。
seek=N 出力の先頭から N ブロックをスキップします。
status=LEVEL 標準エラー出力に表示する情報のレベルを指定します。
none: エラーメッセージ以外を抑制します。
noxfer: 最終的な転送統計を抑制します。
progress: 定期的に転送統計を表示します。

ブロックサイズの指定方法

読み込み、書き込み、変換処理はブロック単位で行います。 ブロックのサイズはデフォルトは 512 バイトですが、bs=BYTES, ibs=BYTES, obs=BYTES, cbs=BYTES 引数で変更できます。

指定する際の接頭辞は以下のようになります:

接尾辞 バイト数
c 1
w 2
b 2^9=512
K 2^10
M, xM 2^20
G 2^30
T 2^40
P 2^50
E 2^60
Z 2^70
Y 2^80
kB 10^3
MB 10^6
GB 10^9

変換ルールに関する指定方法

conv=CONVS に指定できる変換方法を以下に示します。 複数指定する場合は、カンマで区切ります。

記号 説明
ascii EBCDIC から ASCII へ変換します。
ebcdic ASCII から EBCDIC へ変換します。
ibm ASCII から代替 EBCDIC へ変換します。
block 改行区切りの入力データが cbs サイズを超過する場合は切り捨て、不足する場合は空白で埋めます。
unblock 改行区切りの入力データを cbs サイズの固定長とみなし、末尾の空白は改行で変換します。
lcase 大文字を小文字に変換します。
ucase 小文字を大文字に変換します。
sparse NUL 文字はスキップする。
swab 入力バイトの ペアをすべて入れ替えます。
sync 入力ブロックを ibs サイズになるよう 0 で埋めます。
excl 出力ファイルが既に存在する場合は失敗します。
nocreat 出力ファイルを作成しません。
notrunc 出力ファイルを切り詰めません。
noerror 読み取りエラーが発生しても続行します。
fdatasync 終了前に出力ファイルデータをファイルに書き込みます。
fsync 終了前に出力ファイルデータおよびメタデータをファイルに書き込みます。

フラグに関する指定方法

iflag=FLAGS, oflag=FLAGS に指定できる読み込み、書き込みに関するフラグ以下に示します。 複数指定する場合は、カンマで区切ります。

記号 説明 オプション
direct データに対して直接 I/O を使用します。 iflag, oflag
dsync データに対して同期 I/O を使用します。 iflag, oflag
sync データ、メタデータに対して同期 I/O を使用します。 iflag, oflag
nonblock 非同期 I/O を使用します。 iflag, oflag
directory ディレクトリでない場合は失敗します。 iflag, oflag
append 追加モード (conv=notrunc 推奨)。 oflag
fullblock 完全な入力ブロックを蓄積します。 iflag
noatime アクセス時間を更新しません。 iflag, oflag
nocache キャッシュの削除を要求します。 oflag
noctty ファイルから制御端末を割り当てません。 iflag, oflag
nofollow シンボリックリンクを解決しません。 iflag, oflag
count_bytes count=N をブロック数ではなく、バイト数として扱います。 iflag
skip_bytes skip=N をブロック数ではなく、バイト数として扱います。 iflag
seek_bytes seek=N をブロック数ではなく、バイト数として扱います。 iflag

コメント

コメントする