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

推薦する

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...

Linux の MariaDB データベースについて

目次Linux の MariaDB データベースについて1. データベースとは何ですか? 2. デー...

ローカルでビルドした Docker イメージを Dockerhub に公開する方法

今日は、ローカルの Docker プロジェクト イメージを dockerhub に公開する方法を紹介...

Vue で配列パラメータを渡すための get / delete メソッド

フロントエンドとバックエンドがやり取りする場合、get または delete を介してバックエンドに...

React における useEffect と useLayoutEffect の違い

目次前提条件使用効果コミット前ミューテーション効果コミットミューテーション効果コミットレイアウト効果...

Vueの使用に関する深い理解

目次Vueのコアコンセプトを理解するVueの双方向バインディングの原理と実装を探るVue 双方向バイ...

iframeを透明にするパラメータ

<iframe src="./ads_top_tian.html" all...

ウェブページの画像最適化ツールと使用方法のヒントの共有

ウェブページの基本要素として、画像はページの読み込み速度に影響を与える重要な要素の 1 つです。画像...

MySQLインデックスの基本構文

インデックスはソートされたデータ構造です。 where 条件での検索や order by 条件での並...

フレックスレイアウトが子要素によって引き伸ばされたときに、コンテンツをコンテナ内に保持する方法

モバイル デバイスでは、フレックス レイアウトが非常に便利です。デバイスの幅に応じてコンテナーの幅を...

JavaScript の構造化代入の一般的なシナリオと例 5 つ

目次序文1. データを抽出する2. エイリアス値3. 動的プロパティ4. オブジェクトの分解における...

MySQL 5.7 でパスワードを変更する簡単な方法

これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...

MySQL の sql_mode モード例の詳細な説明

この記事では、MySQL の sql_mode モードについて例を挙げて説明します。ご参考までに、詳...

カルーセル例の JavaScript 実装

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...