Linuxでddコマンドを使用する方法

ddはLinuxで最も重要なコマンドの1つで、主にハードディスクやパーティションのバックアップに使用されます。正しく利用すれば、ddはデータを1つのパーティションから別のパーティションに書き込んだり、ファイルに対してさまざまな作業を行うための強力なツールとなります。ここでは、ddコマンドを有効に活用する方法を示します。
目次
- ddの歴史
- 基本的なオペランド
- ディスクイメージの作成
- パーティションへのディスクイメージの保存
- 圧縮ディスクイメージの作成
- ブロックサイズの指定
- ハードディスクの消去
- ブータブルUSBドライブの作成
- ddを使用した特定のパーティションのクローン作成
- ddを使用したCDの内容のダンプ
- ISOダンプをCDに焼く
- よくある質問
こちらもお読みください: インストールと使用が簡単な5つのArch Linuxディストロ
ddの歴史
このコマンドは、1970年代にAT&Tベル研究所でコンピュータ科学者のケン・トンプソンによって開発されました。Unixベースのシステム向けに開発され、IBMのジョブ制御言語に見られる「DD」という文にちなんで名付けられました。このコマンドの構文は、ジョブ制御言語の文に非常に似ています。
このコマンドは、元々ASCIIをEBCDICに変換するユーティリティとして設計されました。1974年にUnixのバージョンに統合され、オペレーティングシステムの第5版がリリースされました。
ddは、Unixコミュニティでデータをハードディスク上で破壊する能力から「ディスク破壊者」と冗談で呼ばれています。
こちらもお読みください: Rcloneを使用してクラウド内のファイルを暗号化する方法
基本的なオペランド
コマンドの背景と不適切に使用した場合の破壊的な能力について少し知ったので、さまざまなLinuxディストリビューションのユーザーが利用できるすべての利点を活用する方法を学ぶ時が来ました。
まず、--helpフラグを使用してマニュアルを表示します:
dd --help
コマンドで最も一般的に使用されるオペランドは2つあります。それはifとofで、それぞれ「入力ファイル」と「出力ファイル」を表します。ifオペランドはソースの場所を表し、ofオペランドは入力場所からデータを保存する場所を表します。
dd if=<入力ファイル> of=<出力ファイル>最も一般的なソースと出力の場所には、ハードディスク、パーティション、ディスクイメージが含まれます。
コマンドを使用する前に、fdiskユーティリティを使用してシステム上のパーティションを表示することが役立つかもしれません。これはコマンドの-lフラグを使用して簡単に行えます:
sudo fdisk -l
こちらもお読みください: Linux上でハードドライブ全体をクローンする4つの方法
この場合、ifは「/dev/sda」ドライブを表し、ofは「/dev/sdb」ドライブを表します。ここで「/dev/sda」からデータが保存されます:
dd if=/dev/sda of=/dev/sdb
ディスクイメージの作成
コマンドの最も良い使用例の1つは、「.img」ファイル形式でディスクイメージを作成することです。これはLinuxベースのシステムでデータをバックアップするのに非常に便利で、ハードディスク全体をバックアップする最も迅速かつ簡単な方法です。
この場合、ifオペランドは「/dev/sda」ドライブを表し、ofオペランドは「.img」ファイルを表します。ハードディスクからデータが保存されます:
dd if=/dev/sda of=/tmp/image.img
こちらもお読みください: AptおよびApt-Getコマンドの究極のガイド
パーティションへのディスクイメージの保存
コマンドを使用してディスクイメージを作成するのは非常に簡単ですが、そのプロセスの逆も同様です。
このシナリオでは、ディスクイメージファイルが入力ファイルとして機能し、新しいパーティションが出力ファイルとして機能します。このユーティリティは、ディスクイメージから「/dev/sdb」パーティションにデータを保存しています:
dd if=/tmp/image.img of=/dev/sdb
こちらもお読みください: Linuxでpsコマンドを使用してプロセスを終了する方法
圧縮ディスクイメージの作成
フルサイズのハードディスクのディスクイメージを作成すると、最終的なディスクイメージのファイルサイズがかなり大きくなることが予想されます。このため、ddユーティリティには圧縮ディスクイメージを作成する機能があります。
圧縮ディスクイメージは、パイプ|コマンドを使用して作成できます。この場合、入力ファイルの内容を取得し、gzipコマンドを-cフラグで実行し、内容を「.gz」ファイルにパッケージ化します:
dd if=/dev/sda | gzip -c > /tmp/image.gz
こちらもお読みください: cURLを使用してコマンドラインデータ転送を行う方法
ブロックサイズの指定
ddコマンドの操作速度を調整することもできます。これは、ブロックサイズを表すbsオペランドを使用して実現できます。ブロックサイズは、ddが出力ファイルに一度にコピーするバイト数を表します。これは1024バイトの倍数で表され、デフォルト値は512バイトに設定されています。ブロックサイズが大きいほど、データが出力ファイルに保存される速度が速くなります。
この場合、ブロックサイズを2048に設定しています:
dd if=/dev/sda of=/tmp/image.img bs=2048ブロックサイズはキロバイトで指定することもできます:
dd if=/dev/sda of=/tmp/image.img bs=2K
こちらもお読みください: Linuxでlsofコマンドを使用してオープンファイルをリストする方法
ハードディスクの消去
ddはハードディスクを消去するためにも使用できます。これは、「/dev/zero」または「/dev/urandom」からゼロまたはランダムな文字を読み取り、それをハードディスク/パーティションに保存することで、データを上書きします。これは、ハードディスクを売却または処分した後にデータが簡単に回収できないようにするために非常に便利です。
ゼロを使用してハードディスクを上書きする:
dd if=/dev/zero of=/dev/sdb
ランダムな文字を使用してデバイスを上書きすることもできます:
dd if=/dev/urandom of=/dev/sdb
こちらもお読みください: LinuxでバックグラウンドでBashコマンドを実行する方法
ブータブルUSBドライブの作成
「.iso」ファイルを使用してブータブルUSBフラッシュドライブを作成するのは簡単です:
dd if=os.iso of=
ddを使用した特定のパーティションのクローン作成
ddのもう1つの素晴らしい使用法は、Linuxシステム上のアクティブなパーティションをクローンすることです。IMGファイルとは異なり、クローン作成は特定のパーティションの正確なコピーを作成し、すぐに使用できるようにします。これは、マルチディスクセットアップがあり、システム用の冗長パーティションを作成したい場合に便利です。
「/dev/sda4」から「/dev/sdd1」へのパーティションをクローンします。
dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,syncconvパラメータを使用すると、ddの動作を変更するための追加オプションを含めることができます。これは、ファイル名を大文字に変換するような単純なものから、ブロックのプロパティを変更するような複雑なものまであります。この場合、noerrorとsyncを使用しています:
- 「noerror」オプションは、デバイスエラーを報告してもddがデバイスファイルを通じてコピーを続けるように指示します。これは、パーティションが存在するデバイスがすでに故障している場合に役立ちます。なぜなら、「noerror」はddがそのパーティション内のすべての回復可能なデータをコピーすることを保証するからです。
- 「sync」オプションは、ddがコピーバッファに入ってくるすべてのデータブロックをパディングするように指示します。これは、ddがコピーできるすべてのデータがソースと宛先の間で正確に同じであることを保証することを意味します。これは、クローン作成しているパーティションデータの整合性を確保するためです。

こちらもお読みください: Linuxでlpコマンドを使用してターミナルからファイルを印刷する方法
ddを使用したCDの内容のダンプ
ddをダンプツールとして使用してディスクの内容を取得することも可能です。IMGファイルと同様に、ディスクドライブを入力として使用し、.ISO拡張子を出力として使用することでこれを行うことができます。次の例を考えてみてください:
dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,syncこのコマンドは、ddにCD-ROMデバイスを読み込み、その内容をISOファイルにコピーするように指示します。

完了したら、fileコマンドを使用してダンプされたファイルがISO 9660イメージであるかどうかを確認できます:
file /tmp/dump.isoISOダンプをCDに焼く
次に、ddを使用して作成したISOファイルの複製を作成できます。これを行うには、ドライブに空のディスクを挿入し、「/dev/cdrom」をddの出力ファイルとして使用する必要があります。それから、次のコマンドを実行してISOファイルをディスクに正しく焼くことができます:
dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0このコマンドは、エラーの回避や整合性チェックを試みません。代わりに、CD-ROMへの書き込みに特有の2つのオプションを設定します:
- 「obs」オプションは、ddがディスクに書き込むブロックのサイズを設定します。この場合、コマンドは光メディア転送の基準として32キロバイトを使用します。
- 一方、「seek」オプションは、ddが転送の開始を特定のデータブロックに設定するように指示します。CD-ROMに正しく転送するためには、これを0に設定することが重要です。そうすることで、ddは最初のディスクセクターに即座に書き込みます。

こちらもお読みください: 8つの便利で興味深いBashプロンプト
よくある質問
dd操作の進行状況を確認することはできますか?
はい!dd操作の進行状況を確認するのは非常に簡単です。これを行うには、ddコマンドの最後にstatusパラメータを含めるだけです:
dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress
「progress」オプションは、ddが現在コピーしているブロックを標準出力に印刷するように指示します。これにより、コマンドの進行状況を確認できます。「progress」オプションの他に、statusパラメータは2つの追加の値も受け入れます:
- Noxfer: 「noxfer」値は「progress」と似ていますが、コマンドの最後に全体の転送情報を印刷しません。これは、ddコマンドを大きなUNIXパイプの一部として使用している場合に便利です。
- None: 「none」値は、実行中にエラー以外の情報を印刷しないようにddに指示します。これは、現在アクティブなパーティションのバックアップIMGファイルを作成するなど、スケジュールされたddタスクを実行している場合に役立ちます。
転送を高速化するために常に高いブロックサイズを設定しても大丈夫ですか?
いいえ。高いブロックサイズを設定すると、ddの転送速度は確かに速くなりますが、書き込むデバイスが正しく初期化されることを保証するものではありません。たとえば、CD-ROMやDVD-ROMなどの光メディアに高いブロックサイズを設定すると、ディスクプレーヤーで再生したときに読み取れないディスクになる可能性があります。
一般的なルールとして、ディスクやフラッシュドライブなどのメディアからダンプする場合にのみ高いブロックサイズを使用することが推奨されます。さらに、最大ブロックサイズを2048キロバイトに設定することも良い習慣です。これにより、ディスクの内容をCDまたはDVDに戻すことができることが保証されます。
ブータブルUSBドライブを作成しようとしましたが、起動しませんでした。ddは機能していないのですか?
いいえ!起動しなかった最も可能性の高い理由は、ddがUSBドライブにコピーしたファイルがブータブルファイルではないことです。たとえば、CDインストーラーをUSBドライブに書き込むと、ブータブルにするための適切なフラグが設定されません。
ブータブルであることを確認する1つの方法は、fileプログラムを通じてそのプロパティを確認することです。たとえば:
file /Downloads/ubuntu-21.10.iso
そこから、標準出力に印刷されるプロパティを確認する必要があります。ブータブルファイルは、ディスクイメージまたはISOハイブリッドファイルのいずれかである必要があります。
画像クレジット: Unsplash