Linux ddコマンドは、さまざまな方法で使用できる最も強力なユーティリティの1つです。このツールは主にデータのコピーと変換に使用されるため、データデュプリケーターの略です。このツールは次の目的で使用できます:
- ハードドライブ全体またはパーティションのバックアップと復元。
- ISOファイルと呼ばれるCDまたはDVDの仮想ファイルシステムとバックアップイメージの作成
- MBR(マスターブートレコード)のバックアップなど、rawデバイスファイルの領域をコピーします。
- ASCIIなどのデータ形式をEBCDICに変換します。
- 小文字から大文字への変換、およびその逆の変換。
このコマンドを実行できるのはスーパーユーザーのみです。不適切な使用は大量のデータ損失を引き起こす可能性があるため、このコマンドを使用するときは十分に注意する必要があります。そのため、このツールをデータ駆逐艦と見なす人もいます。
ddコマンドの構文
ddコマンドの基本的な使用法は、引数が2つしかないため、かなり簡単です。 if =入力ファイルとのを指定します =出力ファイルを指定します。これらのオプションの引数は、ファイルまたはブロックデバイスのいずれかです。ただし、ファイルをコピーするためにddを使用することはお勧めしません。これは、cpがはるかに簡単な方法でファイルをコピーするためです。ただし、これを使用してハードディスクのクローンを作成できます。構文は
です。dd if=<source file name> of=<target file name> [Options]
ddコマンドの例を見て、さまざまなオプションを学びます。
1。ディスク全体またはパーティションのバックアップと復元
ディスク/パーティション全体から別のディスク/パーティションにすべてのデータを保存することが可能です。 cpコマンドとしての単純なコピーではなく、ブロックサイズのコピー。
a。ディスク全体をディスクにバックアップする
ディスク/dev/sda
からすべてのデータ(ディスク全体)をコピーできます /dev/sdb
へ 。 ddはファイルシステムやパーティションについて何も知りません。 /dev/sda
からすべてをコピーするだけです /dev/sdb
へ 。 bs
で一度にコピーするブロックサイズを指定する必要があります オプション。したがって、これにより、同じパーティションに同じデータを持つディスクのクローンが作成されます。
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync 97281+0 records in 97280+0 records out 99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s>
これは、2番目のデバイスが最初のデバイスと同じかそれよりも大きい場合にのみ機能します。そうしないと、2番目のパーティションで切り捨てられた価値のないパーティションが作成されます。ここで、ifは入力ファイル、ofは出力ファイル、bsはブロックサイズ(一度に読み書きできるバイト数)を表します。 1KBに等しい1024バイトの倍数のブロックサイズを使用するようにしてください。ブロックサイズを指定しない場合、ddはデフォルトのブロックサイズ512バイトを使用します。 conv
値パラメータnoerror エラーが発生した場合でも、ツールがデータのコピーを続行できるようにします。同期オプションを使用すると、同期されたI/Oを使用できます。
b。 ddディスクイメージ(ファイルイメージ)の作成
ディスクのイメージまたはファイルイメージを作成できます。ディスクをイメージにバックアップする方が、正確なデータをコピーするよりも高速です。また、ディスクイメージを使用すると、復元がはるかに簡単になります。
# dd if=/dev/sda of=/tmp/sdadisk.img
出力ファイルは必要な場所に保存できますが、.img
で終わるファイル名を指定する必要があります 上記の拡張子。 /tmp/sdadisk.img
の代わりに 、たとえば/sdadisk.img
に保存できます 必要に応じて。
c。圧縮ディスクイメージの作成
ddはディスク全体の正確なコンテンツを作成するため、サイズが大きすぎることを意味します。以下のコマンドを使用して、ディスクイメージを圧縮することを決定できます
# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
パイプ|オペレーターは、左側のコマンドの出力を右側のコマンドの入力にします。 -c
オプションは、出力を標準出力に書き込み、元のファイルを変更せずに保持します。
d。パーティションをバックアップするか、あるパーティションを別のパーティションに複製します
ディスク全体ではなく、単純なパーティションのみをバックアップできます。入力ファイルに以下のようにパーティション名を指定するだけです
# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
これにより、パーティション/dev/sda1
が同期されます /dev/sdb1
へ 。 /dev/sdb1
のサイズを確認する必要があります /dev/sda1
より大きくする必要があります 。または、以下のようにパーティションイメージを作成できます
# dd if=/dev/sda1 of=/tmp/sda1.img
e。ディスクまたはパーティションイメージの復元
元のドライブに問題がある場合は、ディスクまたはパーティションを保存すると、すべてのデータを復元できます。復元するには、バックアップ操作中に以下のように示された出力ファイルで入力ファイルを反転する必要があります。
# dd if=/tmp/sdadisk.img of=/dev/sda
操作後ではなく、バックアップ操作の前に存在していたデータを取得します
e。圧縮画像の復元
最初に、圧縮ファイルと、前に圧縮されたディスクである出力ファイルを指定する必要があります。
# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
ここでの-dオプションは、解凍することです。出力ファイルに注意してください。復元されたディスクをマウントして、コンテンツを確認できます。最後の圧縮バックアップ操作の後にデータが追加されることに注意してください。
2。 CDまたはDVDの仮想ファイルシステム/バックアップイメージをisoファイルとして作成する
Linuxホストで仮想マシンを作成する場合など、いくつかの理由でLinuxで仮想ファイルシステムを作成する必要がある場合があります。 CDまたはDVDのバックアップISOイメージを作成する必要がある場合もあります
a。仮想ファイルシステムの作成
仮想ファイルシステムは、ファイル内に存在するファイルシステムであり、ファイルは物理ディスク上に存在します。たとえば、追加のスワップまたはループデバイスまたは仮想マシンを作成するために必要になる場合があります。 /dev/zero
が必要です これは、データがなく、必要なサイズのファイル(すべてゼロのファイル)を作成するために使用されるファイルです。つまり、これにより、ファイル内にすべてゼロのデータファイルが作成され、ファイルのサイズが決まります。
# dd if=/dev/zero of=/file bs=1024K count=500 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s
オプションcount
コピーする入力ブロックの数を指します。ブロックサイズの値と組み合わせて、コピーする合計サイズを示します。例:bs=1024k
およびcount=500
size =1024K * 500 =524288000 bytes =524MBを指定します
それでは、ファイルのサイズを確認しましょう
# ls -lh /file -rw-r--r-- 1 root root 500M May 17 18:57 /file
示されたサイズで仮想ファイルシステムが作成されていることがわかります。これで、ループデバイスや仮想ディスクなどを作成できます。
b。 nullデータを含むファイルの最初の512バイトを変更する
操作中に既存の出力ファイルを指定すると、そのデータが失われます。何らかの理由で、出力ファイルのブロックサイズを置き換える必要がある場合があります。
dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc
notrunc
オプションは、ファイルを切り捨てず、最初の512バイトが存在する場合にのみ置き換えることを指します。それ以外の場合は、512バイトのファイルを取得します
c。 CDまたはDVDのバックアップISOイメージの作成
CDの内容をディレクトリにコピーしないのはなぜだろうと思うかもしれません。 CDのブートセクタをどのように処理しますか?これは最初のセクターにすぎないため、デバイス上のファイルとして見つけることはできません。一方、ddはセクターごとにコピーするため、その情報もコピーします。
# dd if=/dev/cdrom of=/mycd.iso
-o loop
を使用する必要があることを知っておく必要があります オプション。通常のデバイスと同じようにファイルをマウントできます。したがって、/mycd.iso
をマウントするには /mnt/cd
で ディレクトリ、以下のようにします
# mount -o loop /mycd.iso /mnt/cd
d)起動可能なUSBドライブを作成する
ここでcentosisoイメージをこのディレクトリ「〜/Downloads/」にダウンロードしたと仮定します。
if =〜/ Downloads /CentOS-8-x86_64-1905-dvd1.iso-入力ファイルはパス'〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso'
にありますof =/ dev/sdb-出力ファイルはパス'/dev / sdb'
にありますbs =1M-「〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso」から読み取り、「/ dev/sdb」に一度に1メガバイトのデータを書き込みます。
#dd if =〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso of =/ dev / sdb bs =1M
3。 MBRのバックアップと復元
GRUBブートローダーは、最も一般的にはブータブルドライブのMBRに保存されます。 MBRはディスクの最初の512バイトを構成し、ブートローダー用に最大466バイトのストレージを許可します。追加のスペースは、そのドライブのパーティションテーブルを格納するために使用されます。 MBRが破損すると、Linuxを起動できなくなります。
a。 MBRのバックアップ
MBRはディスクの最初の512バイトを構成するため、そのブロックサイズをコピーする必要があります
# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
count=1
の場合 およびbs=512
、MBRのサイズに対応する512バイトのみがコピーされます。
保存されたMBRは、以下のように8進数およびその他の形式でファイルをダンプするodコマンドを使用して表示できます。
# od -xa /tmp/sdambr.img 0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000 R ? t soh f vt - etx } bs nul si eot b nul nul 0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0 | del nul t F f vt gs f vt M eot f 1 @ 0
-a
オプションは、名前付き文字と-x
を選択します 16進数の2バイト単位を選択します
b。パーティションテーブルを除くMBRのブートデータのバックアップ
MBR 512バイトのデータは、ハードディスクの最初のセクターにあります。これは、446バイトのブートストラップ、64バイトのパーティションテーブル、および2バイトの署名で構成されています。これは、ブートストラップサイズと等しいブロックサイズのみを保存してMBRをバックアップしながら、パーティションテーブルとバイト署名を除外できることを意味します。
# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1
c。 MBRイメージからのMBRの復元
を使用して、前のコマンドで示したようにMBRを復元できます。
# dd if=/tmp/sdambr.img of=/dev/sda
3。データ形式の変換
入力ファイルがホストコンピュータのネイティブ文字セットではない文字セットを使用している場合、インポート演算子は変換を実行する必要があります。たとえば、ASCIIがホストコンピュータの文字列のネイティブ形式であるが、入力データファイルがEBCDICを使用して文字列を表す場合、EBCDICをASCIIに、またはその逆に変換する必要があります。
a。ファイルのデータ形式をEBCDICからASCIIに変換する
主にメインフレームシステムから取得されたebcdicファイルがある場合は、UNIXサーバーのテキストエディタを使用して変更を加えるために、それらをASCIIに変換します
# dd if=textfile.ebcdic of=textfile.ascii conv=ascii
conv
値パラメータはasciiになりました EBCDICからASCIIに変換するため
b。ファイルのデータ形式をASCIIからEBCDICに変換します
ASCIIバージョンを変更した後、完了したら、アプリケーションで使用するためにEBCDICに変換し直すことができます。
# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic
conv
値パラメータはeになりました bcdic ASCIIからEBCDICに変換するためです。特定のバイト数を異なる文字を持つ同等のバイト数に置き換えるだけの場合、変換はスムーズになり、ファイルを読み取るアプリケーションで問題が発生することはありません。
4。ファイルの大文字小文字の変換
DDコマンドは驚くべきことに使用することもできます。ファイル内のすべてのテキスト(アルファベット)を大文字または小文字に、またはその逆に変換できます。以下の例では、テスト用のファイルがあります。
# cat file10 test dd convert
a。ファイルを大文字に変換する
テキストファイルの例は小文字であるため、大文字に変換します
# dd if=~/file10 of=~/file20 conv=ucase
このコマンドは、示された新しいファイルを作成します。今すぐconv
をご覧ください オプションはucaseを取ります 価値。結果を確認しましょう
# cat file20 TEST DD CONVERT
b。ファイルを小文字に変換する
次に、小文字に変換する逆の操作を行います
# dd if=~/file20 of=~/file30 conv=lcase
lcaseを使用していることを確認してください conv
の 大文字から小文字に変換するオプション。
# cat file30 test dd convert
ddコマンドはファイル名を変換せず、その内容のみを変換します。
結論
ddコマンドは、技術的にはアーカイブコマンドではありませんが、パーティションまたはディスク全体をファイルにコピーしたり、その逆を行ったりできるため、いくつかの点で類似しています。