GNU/Linux >> Linux の 問題 >  >> Linux

LinuxDDコマンド-すべてのオプションを使用した15の例

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コマンドは、技術的にはアーカイブコマンドではありませんが、パーティションまたはディスク全体をファイルにコピーしたり、その逆を行ったりできるため、いくつかの点で類似しています。


Linux
  1. 例を含むLinuxTeeコマンド

  2. 例を含むLinuxヘッドコマンド

  3. LinuxでのJQコマンドと例

  1. 例を含むwcLinuxコマンド

  2. Linuxのソートコマンドと例

  3. Linuxでのエコーコマンド(例付き)

  1. Linuxでのmanコマンドと例

  2. LinuxでのAWKコマンドと例

  3. LinuxでのCurlコマンドと例