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

Dd Guide 00 Featured Image

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

Dd Guide 01 Dd Print Help

コマンドで最も一般的に使用されるオペランドは2つあります。それはifofで、それぞれ「入力ファイル」と「出力ファイル」を表します。ifオペランドはソースの場所を表し、ofオペランドは入力場所からデータを保存する場所を表します。

dd if=<入力ファイル> of=<出力ファイル>

最も一般的なソースと出力の場所には、ハードディスク、パーティション、ディスクイメージが含まれます。

コマンドを使用する前に、fdiskユーティリティを使用してシステム上のパーティションを表示することが役立つかもしれません。これはコマンドの-lフラグを使用して簡単に行えます:

sudo fdisk -l

Dd Guide 02 List Fdisk Partitions

こちらもお読みください: Linux上でハードドライブ全体をクローンする4つの方法

この場合、ifは「/dev/sda」ドライブを表し、ofは「/dev/sdb」ドライブを表します。ここで「/dev/sda」からデータが保存されます:

dd if=/dev/sda of=/dev/sdb

Dd Guide 03 Duplicate Device

ディスクイメージの作成

コマンドの最も良い使用例の1つは、「.img」ファイル形式でディスクイメージを作成することです。これはLinuxベースのシステムでデータをバックアップするのに非常に便利で、ハードディスク全体をバックアップする最も迅速かつ簡単な方法です。

この場合、ifオペランドは「/dev/sda」ドライブを表し、ofオペランドは「.img」ファイルを表します。ハードディスクからデータが保存されます:

dd if=/dev/sda of=/tmp/image.img

Dd Guide 04 Dump Partition To Img

こちらもお読みください: AptおよびApt-Getコマンドの究極のガイド

パーティションへのディスクイメージの保存

コマンドを使用してディスクイメージを作成するのは非常に簡単ですが、そのプロセスの逆も同様です。

このシナリオでは、ディスクイメージファイルが入力ファイルとして機能し、新しいパーティションが出力ファイルとして機能します。このユーティリティは、ディスクイメージから「/dev/sdb」パーティションにデータを保存しています:

dd if=/tmp/image.img of=/dev/sdb

Dd Guide 05 Write Img To Device

こちらもお読みください: Linuxでpsコマンドを使用してプロセスを終了する方法

圧縮ディスクイメージの作成

フルサイズのハードディスクのディスクイメージを作成すると、最終的なディスクイメージのファイルサイズがかなり大きくなることが予想されます。このため、ddユーティリティには圧縮ディスクイメージを作成する機能があります。

圧縮ディスクイメージは、パイプ|コマンドを使用して作成できます。この場合、入力ファイルの内容を取得し、gzipコマンドを-cフラグで実行し、内容を「.gz」ファイルにパッケージ化します:

dd if=/dev/sda | gzip -c > /tmp/image.gz

Dd Guide 06 Create Compressed Dump

こちらもお読みください: 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

Dd Guide 07 Img Dump Modify Blocksize

こちらもお読みください: Linuxでlsofコマンドを使用してオープンファイルをリストする方法

ハードディスクの消去

ddはハードディスクを消去するためにも使用できます。これは、「/dev/zero」または「/dev/urandom」からゼロまたはランダムな文字を読み取り、それをハードディスク/パーティションに保存することで、データを上書きします。これは、ハードディスクを売却または処分した後にデータが簡単に回収できないようにするために非常に便利です。

ゼロを使用してハードディスクを上書きする:

dd if=/dev/zero of=/dev/sdb

Dd Guide 08 Zeroing Disk

ランダムな文字を使用してデバイスを上書きすることもできます:

dd if=/dev/urandom of=/dev/sdb

Dd Guide 09 Randomized Disk

こちらもお読みください: LinuxでバックグラウンドでBashコマンドを実行する方法

ブータブルUSBドライブの作成

「.iso」ファイルを使用してブータブルUSBフラッシュドライブを作成するのは簡単です:

dd if=os.iso of=

Dd Guide 10 Write Image To Device

ddを使用した特定のパーティションのクローン作成

ddのもう1つの素晴らしい使用法は、Linuxシステム上のアクティブなパーティションをクローンすることです。IMGファイルとは異なり、クローン作成は特定のパーティションの正確なコピーを作成し、すぐに使用できるようにします。これは、マルチディスクセットアップがあり、システム用の冗長パーティションを作成したい場合に便利です。

「/dev/sda4」から「/dev/sdd1」へのパーティションをクローンします。

dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync

convパラメータを使用すると、ddの動作を変更するための追加オプションを含めることができます。これは、ファイル名を大文字に変換するような単純なものから、ブロックのプロパティを変更するような複雑なものまであります。この場合、noerrorsyncを使用しています:

  • 「noerror」オプションは、デバイスエラーを報告してもddがデバイスファイルを通じてコピーを続けるように指示します。これは、パーティションが存在するデバイスがすでに故障している場合に役立ちます。なぜなら、「noerror」はddがそのパーティション内のすべての回復可能なデータをコピーすることを保証するからです。
  • 「sync」オプションは、ddがコピーバッファに入ってくるすべてのデータブロックをパディングするように指示します。これは、ddがコピーできるすべてのデータがソースと宛先の間で正確に同じであることを保証することを意味します。これは、クローン作成しているパーティションデータの整合性を確保するためです。

Dd Guide 11 Strict Clone Partition

こちらもお読みください: Linuxでlpコマンドを使用してターミナルからファイルを印刷する方法

ddを使用したCDの内容のダンプ

ddをダンプツールとして使用してディスクの内容を取得することも可能です。IMGファイルと同様に、ディスクドライブを入力として使用し、.ISO拡張子を出力として使用することでこれを行うことができます。次の例を考えてみてください:

dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync

このコマンドは、ddにCD-ROMデバイスを読み込み、その内容をISOファイルにコピーするように指示します。

Dd Guide 12 Dump Cd Disc

完了したら、fileコマンドを使用してダンプされたファイルがISO 9660イメージであるかどうかを確認できます:

file /tmp/dump.iso

ISOダンプを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は最初のディスクセクターに即座に書き込みます。

Dd Guide 13 Burn Cd Disk

こちらもお読みください: 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