ディスクを破壊せずに Linux で dd コマンドを使用する方法

ディスクを破壊せずに Linux で dd コマンドを使用する方法

故障したストレージ ドライブからデータを救出する場合でも、アーカイブをリモート ストレージにバックアップする場合でも、または他の場所でアクティブなパーティションの完全なコピーを作成する場合でも、ドライブとファイル システムを安全かつ確実にコピーする方法を知っておく必要があります。幸いなことに、長い歴史を持つシンプルでありながら強力なイメージコピーツールである dd があります。この目的にこれより適したツールはありません。

ddコマンドの説明

dd: 指定されたサイズのブロック単位でファイルをコピーし、コピー中に指定された変換を実行します。

注: 数字を指定する場所が次の文字で終わる場合は、対応する数字を掛けます: b=512; c=1; k=1024; w=2

パラメータに関する注記:

1. if=filename: 入力ファイル名。デフォルトは標準入力です。つまり、ソースファイルを指定します。 < if=入力ファイル >

2. of=ファイル名: 出力ファイル名。デフォルトは標準出力です。つまり、宛先ファイルを指定します。 < of=出力ファイル >

3. ibs=bytes: 一度にバイト単位で読み取ります。つまり、バイトのブロック サイズを指定します。

obs=bytes: 一度にバイトを出力します。つまり、バイトのブロック サイズを指定します。

bs=bytes: 読み取りと出力の両方のブロック サイズをバイトに設定します。

4. cbs=bytes: 一度に変換バイト数を指定します。つまり、変換バッファのサイズを指定します。

5. skip=blocks: コピーを開始する前に、入力ファイルの先頭からブロックをスキップします。

6. seek=blocks: コピーを開始する前に、出力ファイルの先頭からblocksブロックをスキップします。

注: これは通常、出力ファイルがディスクまたはテープの場合、つまりディスクまたはテープにバックアップする場合にのみ有効です。

7. count=blocks: ブロック サイズが ibs で指定されたバイト数に等しいブロックのみをコピーします。

8. conv=conversion: 指定されたパラメータを使用してファイルを変換します。

ascii: ebcdic を ascii に変換する

ebcdic: ascii を ebcdic に変換する

ibm: ascii を代替 ebcdic に変換する

ブロック: 各行を cbs の長さに変換し、足りない部分をスペースで埋めます。

ブロック解除: 各行の長さをcbsにして、足りない部分をスペースで埋める

lcase: 大文字を小文字に変換します

ucase: 小文字を大文字に変換します

swab: 入力内の各バイトのペアを入れ替える

noerror: エラーが発生しても停止しない

notrunc: 出力ファイルを切り捨てない

sync: 各入力ブロックを ibs バイトまで埋め、不足部分をヌル (NUL) 文字で埋めます。

ドライブとパーティションの完全なコピーを作成する

十分に深く掘り下げれば、dd を使用してあらゆる種類のタスクを実行できますが、最も印象的な機能は、パーティションを操作できることです。もちろん、tar や scp を使用して、あるコンピューターからファイルをコピーし、それをそのまま別のコンピューターに新しくインストールされた Linux に貼り付けることで、ファイル システム全体をコピーすることもできます。ただし、これらのファイル システム アーカイブは完全なイメージではないため、ベースとして両端で実行されるホスト オペレーティング システムが必要です。

一方、dd を使用すると、デジタル化したほぼすべてのもののバイトパーフェクトなイメージを作成できます。しかし、ある場所から別の場所にパーティションをコピーする前に、Unix 管理者の間で古くから言われている「dd はディスク破壊者の略である」という言葉には、ある程度の真実が含まれていることを述べておく価値があります。 dd コマンドに 1 文字でも間違った文字を入力すると、ドライブ全体の貴重なデータが瞬時に永久に消去される可能性があります。はい、正しく入力することが重要です。

覚えておいてください: Enter キーを押して dd を呼び出す前に、よく考えてください。

ddの基本操作

必要な警告をお伝えしましたので、まずは簡単な部分から始めていきます。 /dev/sda として指定されたディスク全体のデータの正確なミラーを作成するとします。空のドライブ (理想的には /dev/sda システムと同じ大きさのドライブ) を挿入しました。構文は簡単です: if = はソース ドライブを定義し、of = はデータが保存されるファイルまたは場所を定義します:

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

次の例では、/dev/sda ドライブの .img アーカイブを作成し、それをユーザー アカウントのホーム ディレクトリに保存します。

# dd if=/dev/sda of=/home/username/sdadisk.img

これらのコマンドは、ドライブ全体のイメージを作成します。ドライブ内の単一のパーティションに焦点を当てることもできます。次の例では、これを実行し、bs を使用して一度にコピーするバイト数 (この例では 4096 バイト) も設定します。 bs 値を調整すると、dd 操作の全体的な速度に影響する可能性がありますが、理想的な設定はハードウェア プロファイルやその他の考慮事項によって異なります。

# dd if=/dev/sda2 of=/home/username/partition2.img bs=4096

復元するのは簡単です。実際、if の値と of の値を逆にするだけです。この記事では、if= は復元するイメージに対応し、of= はイメージを書き込むドライブに対応します。

# dd if=sdadisk.img of=/dev/sdb

作成操作とコピー操作の両方を 1 つのコマンドで実行することもできます。たとえば、この例では、SSH を使用してリモート ドライブの圧縮イメージを作成し、結果のアーカイブをローカル コンピューターに保存します。

# ssh [email protected] "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz

アーカイブが適切に動作することを確認するために、必ずテストを行う必要があります。作成したブート ドライブの場合は、それをコンピューターに挿入し、正常に起動するかどうかを確認します。通常のデータ パーティションの場合は、マウントして、ファイルが存在し、正常にアクセスできることを確認します。

ddでディスクを消去する

何年も前、私の友人に自国の海外大使館の警備を担当していた人がいました。彼はかつて、自分が監督する各大使館には政府支給のハンマーが備え付けられていると私に話したことがある。なぜ?大使館が何らかの危険に遭遇した場合、このハンマーを使用してすべてのハードドライブを破壊することができます。

では、なぜデータを削除しないのでしょうか?私をからかってるの?ストレージ デバイスから機密データを含むファイルを削除しても、実際にはデータが削除されないことはよく知られています。十分な時間と意欲があれば、粉々に破壊されたものを除いて、ほぼすべてのデジタル メディアからほぼすべてのデータを回復できます。

ただし、dd を使用すると、悪意のある人物が古いデータを入手するのが非常に困難になります。このコマンドは、/dev/sda1 パーティションの隅々に数百万のゼロを作成するため、しばらく時間がかかります。

# dd if=/dev/zero of=/dev/sda1

しかし、状況は良くなる可能性はあります。 /dev/urandom ファイルをソースとして使用して、ランダムな文字をディスクに書き込むことができます。

# dd if=/dev/urandom of=/dev/sda1

dd操作を監視する

ディスクまたはパーティションのアーカイブには長い時間がかかる可能性があるため、コマンドに進行状況監視ツールを追加することをお勧めします。 Pipe Viewer をインストールし (Ubuntu で sudo apt install pv を実行)、dd に挿入します。 pv を使用すると、最終的なコマンドは次のようになります。

# dd if=/dev/urandom | pv | dd of=/dev/sda1
4,14MB 0:00:05 [ 98kB/秒] [ <=> ]

バックアップとディスク管理にうんざりしていませんか? dd があれば、言い訳はあまりできなくなります。使い方は難しくありませんが、注意してください。幸運を!

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux/OSX で「DD」コマンドを使用して ISO イメージ オペレーティング システム インストール USB ディスクを作成する方法
  • Linux dd コマンドの使い方チュートリアル
  • Linuxのuseraddコマンドの基本的な使い方の詳細な説明
  • Linux における ldconfig と ldd の使用法についての簡単な説明
  • DDNS の仕組みと Linux での実装方法
  • 1日1回のシェルコマンドテキスト操作シリーズ - Linux dd 使用方法チュートリアル
  • Linuxコマンドの詳しい説明:useraddコマンドの使い方
  • Linuxシステムでddコマンドを使用する方法
  • PHPDDOS がパケットを送信して他のユーザーを攻撃するのを防ぐ方法 (iis+linux)

<<:  Vueブラウザが監視を再開するための具体的な手順

>>:  JavaScript で localStorage を使用する方法

推薦する

CSS テキスト装飾 text-decoration と text-emphasis の詳細な説明

CSS では、テキストは私たちが毎日扱う最も一般的なものの 1 つです。テキストの場合、テキストの装...

MySQL5.7.27-winx64 バージョン win10 のダウンロードとインストールのチュートリアル図

MySQL 5.7 のインストール私たちは学校で MySQL データベースを学んでいます。先生は私た...

ミニマルなウェブサイトデザインの例

Web アプリケーション クラス1. みんなのためにダウンまたは私だけのためにこのウェブサイトは、ウ...

CSSはヒントボックス、バブルボックス、三角形を作成します

場合によっては、ページにプロンプ​​ト ボックスやバブル ボックスが必要になることがあります。CSS...

JavaScript ベースのシンプルな計算機の実装

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...

Linuxで現在のスクリプトの実際のパスを取得する方法

1. 現在のスクリプトの実際のパスを取得します。 #!/bin/bash if [[ $0 =~ ^...

MySQLは変数を使用してさまざまなソートを実装します

コアコード -- 以下では、MySQLでのソート列の実装を示します -- テストデータ CREATE...

Dockerの高可用性構成の詳細な説明

Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...

WeChatアプレットの入力ジッター問題を解決する方法

問題を見つけるまず問題を見てみましょう。ミニプログラムでは、Vant のダイアログ コンポーネント ...

Nginx ロケーション設定のチュートリアル (ゼロから)

基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...

MySQLプリコンパイル機能の詳細な説明

この記事では、MySQLのプリコンパイル機能について紹介します。具体的な内容は以下のとおりです。 1...

Red Hat Enterprise Linux 8 をベースにした CentOS 8 が正式にリリースされました

CentOS プロジェクトは、Red Hat の再配布要件に完全に準拠した、Red Hat Ente...

Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

システムの crontab を使用して定期的にバックアップ ファイルを実行し、バックアップ結果を日付...

Docker 大規模プロジェクトのコンテナ化変革

仮想化とコンテナ化は、クラウドベースのプロジェクトでは避けられない 2 つの問題です。仮想化は純粋な...