ディスクを破壊せずに 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 を使用する方法

推薦する

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

両端揃えレイアウトを実現する CSS 列のサンプルコード

1. 堂々巡りいろいろ試行錯誤した結果、均等割り付けレイアウトを実現する最も簡単な方法は CSS ...

JavaScriptの再帰の詳細

目次1. 再帰とは何ですか? 2. 再帰を使って数学の問題を解く1. 1 * 2 * 3 * 4 …...

MySQL は重複データを削除して最小の ID ソリューションを維持します

オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...

Linuxの貼り付けコマンドの使い方

01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...

Dockerでリモートアクセスを有効にする方法

DockerデーモンソケットDocker デーモンは、 unix 、 tcp 、 fdの 3 種類の...

JS のオブジェクトリテラルの詳細な説明

目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...

JavaScript の new 演算子を自分で実装する方法

目次コンストラクタ新しいオペレーター自分で新しいものを実装するコンストラクタnew を導入する前に、...

VMware15 centos7 ブリッジモード ssh に突然アクセスできなくなる問題を解決する

仮想マシンに独自の LAN IP を持たせたいので、テストを容易にするためにブリッジを使用します。 ...

React Router V6 のアップデート

目次ReactRouterV6 の変更1. <Switch> が <Routes&...

MySQL 8.0 再帰クエリの簡単な使用例

序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...

Dockerを使用してSpringBootプロジェクトをデプロイする方法

Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Doc...

WeChatアプレットのサイレントログインとカスタムログイン状態の維持の詳細な説明

目次1. 背景2. サイレントログインとは何ですか? 3. カスタムログイン状態を維持する方法4. ...

HTML メタビューポート属性の説明

ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置し...