web-dev-qa-db-ja.com

現在動作中のドライブのドライブイメージを撮っても安全ですか?

ハードディスクをバックアップする必要があります。 ddを使用して、画像を外部HDDに配置したいと思います。

  • Hdd自体にあるOSからddを使用してこれを行うことはできますか、それともLiveCDなどの別のデバイスから起動する必要がありますか?
  • デバイスがマウントされて機能している場合、一般的に、デバイスの画像を撮影するのは安全ですか?
  • デバイスがマウントされているが、ddの実行中に他のI/O操作がないと確信している場合はどうなりますか?

rsyncは、バックアップ、特にインクリメンタルバックアップに使用するのに最適なツールであると確信しています。

しかし、私はddに興味があります。なぜなら、他のストレージデバイスもバックアップしたいので、パーティション化されていないスペースに保存されているデータもコピーするからです。たとえば、私の電子書籍リーダーは、パーティション化されていないスペースを使用して、uboot、カーネル、およびその他のデータを格納します。

12
Marco Sulla

一般的には安全ではありません。 FSは、操作が特定の順序で書き込まれることを前提としているため、ファイルの新しいデータを書き込んでから、他のデータからそのデータへのポインターを作成できます。正確な詳細はファイルシステムによって異なります。次の場合を想像してみてください。

  1. ddは、ガベージまたは一部のデータを含むロケーションXから読み取ります
  2. ファイルシステムは場所Xに書き込みます
  3. ファイルシステムは場所Xに書き込みます+1場所Xへのポインタ
  4. ddはロケーションX + 1リンクからロケーションXへの読み取り

バックアップの観点から、ガベージデータを取得します。ただし、これを回避する方法はいくつかあります。

  • ファイルシステム固有のコマンドでファイルシステムをフリーズします(私はxfs_freezeは1つで、他にはわかりませんが、少なくとも理論的にはそのようなオプションは存在します)
  • Lvmスナップショットを作成し、そこからコピーします。コピーは、コンピュータを再起動した場合と同じようになり(HDDの並べ替えを除く)、ファイルシステムがダーティになりますが、コピーはアトミックになります。 XFSなどの一部のファイルシステムは最初にフリーズする必要があることに注意してください。
  • 他の人が提案したようにrsyncを使用してください。これでコピーは安全になり、LVMは必要ありませんが、コピーはアトミックではありません。したがって、ファイルシステムレベルで上記の問題を回避する一方で、ファイルで問題が発生する可能性があります(可能性は低いですが、たとえばmvがバックグラウンドで実行されているときにファイルが見つからないことを想像できます)。
  • btrfsTuxzfsnilfs ...などのスナップショットでファイルシステムを使用すると、両方の問題を回避できます-スナップショットを作成し、完全なアトミック性を持つrsyncによってスナップショットからコピーすることができます。ただし、このようなファイルシステムは実験的なものになる傾向があることに注意してください。

最後の注意として-ddはバックアップの最良の方法ではないかもしれません。ディスク全体をコピーしますが、「ガベージ」もコピーすると無駄になることがよくあります。ディスクイメージが必要な場合は、 partimage のようなものが良いかもしれません。より良いオプションがない場合は、rsync、差分/インクリメンタルモードのtarなど、または baculatarsnap などの完全バックアップシステムを使用するか、次のいずれかを使用することです。他の多く。データの重複排除は、バックアップのサイズに驚かされるかもしれません。

11

これは、パーティションの正確な目的と、コピーの目的によって異なります。ただし、一般的にはddはファイルシステムのバックアップには不適切なツールです。それも意図されたものではありません。

  • パーティションの空のセクションをコピーすると、多くの時間が無駄になります。

  • ファイルシステムが現在マウントされている場合、OSレベルのエンティティであり、基盤となるブロックデバイスと同期していない可能性があるため、不整合が発生する可能性があります。 syncを呼び出しても、プロセスは瞬時ではないため、最初はあまり役に立ちません。

代わりにcp -aまたはrsyncを使用してください。もちろん、宛先パーティションを作成する必要があるため、ドロップデッドイージーほど簡単ではありませんが、はるかに安全で柔軟性があります。ファイルシステムを作成する必要がある場合image、以下を参照してください。

ルートファイルシステムをコピーする場合は、ddを絶対に使用しないでください。 rsync -ax(または個々のトップレベルディレクトリではcp -ax)のようなものを使用する必要があります。これは、コピーに含めることはできませんというものがたくさんあるためです。 Linuxでは、これには次のものが含まれます。

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

これらの一部は実際にはカーネルインターフェイスであり、ディスク上の実際のディレクトリではありません。それらをコピーすると、コピーには適用されない一連の情報がコピーされます。それを使用してシステムを実行しようとすると、実際のインターフェイスが上部にマウントされるため、無駄なスペースになります。その他には、プロセスの実行によって使用されている一時的な情報が含まれていますが、それをコピーするとシステムがゴミを分類できないため、これらはより問題になります。

ルートファイルシステムのイメージファイルを作成する場合(または任意のファイルシステム)、空のイメージファイルを作成します-これはddの適切な使用法です。

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

これは1024MBのイメージ(1000000 * 1024)です。他のサイズが必要な場合は、countを調整します。たとえば、extファイルシステムを作成しますファイル内

mke2fs whatever.img

これは実際のブロックデバイスではないことを警告します。続行します。次に、イメージファイルをマウントします。

mount whatever.img /mnt/img

/mnt/imgが存在する必要がありますが、何でもかまいません。これで、rsync(またはcp -a)を/mnt/imgに入れることができます。アンマウントすると、コンテンツはwhatever.img内に残ります。

しかしながら...

明確にするために、何らかの理由でイメージファイルがどうしても必要な場合にのみ、今説明したファイルシステムイメージメソッドを使用してください。パーティションを別のハードドライブにコピーすることが目標の場合、イメージは必要ありません:そのドライブに空のファイルシステムを使用して新しいパーティションを作成し、マウントして、そこにコピーします。代わりに、ファイルシステムのコンテンツを空のディレクトリに配置してアーカイブすることもできます。

tar -czf myarchive.tar.gz [the directory path]

次に、これをトップレベルに配置し、次を使用して、既存の(空またはその他の)パーティションに展開できます。

tar -xzf myarchive.tar.gz

パスがアーカイブ内の何かと一致する場合、既存のファイルを上書きすることに注意してください。それ以外の場合は、既存のディレクトリ階層は同じままになります。

7
goldilocks

Clonezilla を真剣に使用してください。これは、最高のオープンソースのLinuxベースのノートンゴーストのようなユーティリティです。ディスクからディスクまたはディスクからファイルシステム(ファイルとして保存)のいずれかで、パーティションとフルディスクの両方のクローンを作成します。ほとんどのLinuxファイルシステム、NTFS、FAT32などをサポートしています。 SMBまたはNFS共有で、内部ディスク、外部ドライブ、またはネットワーク経由で保存することもできます。

それは非常に使いやすく、あなたに多くの時間を節約します。

編集:質問に答えるために、いいえ、ブロックデバイスからの読み取りはアトミックではないため、ファイルシステムのコピーに一貫性がなくなるリスクがあるため、マウントされている間はほとんどのファイルシステムをddできません。たとえば、100ブロックをコピーしている場合、途中でシステムが最初のブロックと最後のブロックを更新した可能性があります。つまり、コピーには変更された最後のブロックが含まれますが、最初のブロックは含まれません。

1
sleblanc

rsyncは、ファイルシステムのバックアップに最適なツールであり、現在実行中のOSの起動可能なバックアップを作成できます。

いくつかの警告:

  • 適切なアルファベットスープオプションを追加する必要があります
  • パスはかなり重要です
  • 除外リストが必要であり、OSごとに、場合によっては構成ごとに異なります。

Tarのような他の方法に対するrsyncのいくつかの利点:

  • バックアップはいつでも停止および開始できます
  • オンデマンド削除、前削除、移動など、置き換えられたファイルを処理するための多くのオプション。
  • 再開された(または繰り返された)バックアップは、以前にコピーされたファイルがスキップされるため、他の方法よりもはるかに高速です。 (20倍の速度向上が一般的です)
  • --link-destオプションは、実際に新しいファイルをコピーするだけで、バージョン管理されたバックアップを作成できます。

イメージバックアップにはその場所がありますが、問題が発生した場合も含めて、ドライブをそのままコピーします。ファイルのバックアップは新しいディレクトリを作成し、その過程でドライブを線形化(デフラグ)するという副作用があります。現在のOSの同一のコピーを10個作成する場合は、コピーマスターにrsyncを使用し、残りにdd(または同様のもの)を使用します。

1
paul

それはあなたが「現在の作業システム」が何を意味するかによります。単にブートディスクの使用を避けたいだけで、コンピューターで実行されているサービスの中断を気にしない場合は、次のことが可能です。

  1. すべての不要なプログラムをシャットダウンします(基本的に、作業しているルートシェルを除くすべて-X端末からこれを試さないでください。実際のコンソールシェルを使用してください)。シングルユーザーモードがこれに役立つ場合があります。
  2. システムルート以外のディスクがマウントされている場合は、それらをアンマウントします。/proc、/ sys、/ devなどの仮想ファイルシステムをアンマウントしないでください。
  3. 残りのディスクのキャッシュデータをフラッシュします:sync
  4. ルートファイルシステムを読み取り専用で再マウントします:mount -o ro /
  5. 外付けハードドライブをマウントします(/etc/mtabに書き込めないという警告が表示される可能性があります。無視してください)。
  6. バックアップを作成します。
  7. 外付けハードドライブをアンマウントします。
  8. リブート。あなたはここに来るシステムをかなり混乱させました、そして再起動はそれを通常に戻すための最速の方法です。

私はこの方法を使用して、アップグレードしたばかりのコンピューターのアーカイブを作成しますが、これ以上使用する予定はありません。これは、アクティブに使用されているシステムにとってはあまり良い方法ではありません。速度が遅く(数時間または数日かかる)、バックアップが膨大であり(したがって、数を超えることはできません)、バックアップされているシステムの使用を非常に混乱させます。アップ。日常のバックアップには、rsnapshotなどのファイルシステムレベルで機能するものをお勧めします。

1
Mark