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

推薦する

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

MySQL の中国語ソートの詳細と例

MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...

Typescript での infer キーワードの使用に関する詳細な理解

目次推測する事例:理解を深める参照する後で忘れないように、キーワード infer をメモしておきます...

Vue コンポーネントの構成構造とコンポーネント登録の詳細

目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...

count(1)、count(*)、count(列名)の実行の違いの詳細な説明

実施効果: 1. count(1) と count(*)テーブル内のデータ量が多い場合、テーブルを分...

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)コアビジネスの MapReduce プログラムを実行する前に、まずデー...

HTML ファイルにフラッシュ ビデオ形式 (flv、swf) ファイルを埋め込む方法

Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

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

また、Dockerを使用してDjangoプロジェクトをデプロイするのも非常に簡単です。とても良いです...

Linux で libudev を使用して USB デバイスの VID と PID を取得する方法

この記事では、libudev ライブラリを使用して hidraw デバイスにアクセスします。 lib...

Vue3でカルーセルコンポーネントをカプセル化する方法

目的カルーセルコンポーネントをカプセル化して直接使用します。具体的な内容は以下のとおりです。一般的な...

VUE v-for の :key の詳細な説明

v-for タグにキーが追加されていない場合。 <!DOCTYPE html> <...

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...