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


12

ハードディスクをバックアップする必要があります。使用ddして、外部hddにイメージを配置します。

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

これはrsync、バックアップ、特に増分バックアップに使用するのに最適なツールであると確信しています。

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


使用しているファイルシステム、重要なのはどれですか?一部には、このタスクに固有の機能があります。
バリティ14

回答:


11

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

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

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

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

最後のメモとして- ddバックアップの最良の方法ではないかもしれません。「ゴミ」もコピーするため、多くの場合無駄になるディスク全体をコピーします。ディスクイメージが必要な場合は、partimageのようなものをお勧めします。そうしない場合は、より良いオプションは、rsyncのいずれかを使用して差分/増分モードなどかのようなフルバックアップ、システム内のタール使っているのbaculatarsnapや他の多くのものを。データの重複排除は、バックアップのサイズに驚くかもしれません。


1
+1これは、実際にこの質問に答えようとする唯一の答えであり、ddがいかに悪いかについて暴言をしないで、opが尋ねているものを実際に読むために素晴らしく行われます。
バリティ14

良い答えを得るために+1。しかし、私は暴言に同意しません。Ddは悪くありません。これには不適切であり、なぜそうなのかを説明するのは良いことです。
ヘネス

箇条書き4には#2と同じ制限がありますか?アプリケーションは書き込みを発行している途中である可能性があり、スナップショットはアプリケーションレベルのトランザクションを何も認識していません。
ベンフォイト

ありがとう、質問に答えてくれます。goldilocksの答えも良いですが、私は自分のhddだけでなく、他のストレージデバイスもバックアップすることに興味があります。
マルコスッラ14

@BenVoigt-ある程度拡張して-1つのレイヤー(ファイルシステム)を削除し、「壊れやすい」レイヤーであることを知っています。それでも場合によっては半分書かれたファイルを見つけることができますが、アプリケーションがそれらを処理しない場合、他の多くの状況(OOM、クラッシュなど)でファイルが破損する可能性があるため、正しく書かれたアプリケーションはそれを処理する必要があります。
マチェイピエチョトカ14

7

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

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

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

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

ルートファイルシステムをコピーする場合は、絶対に使用しないでください ddcopyに含まれてはならないものがたくさんあるため、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

これは1024 MBの画像(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

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


空の画像ファイルへの+1書き込みは非常に洗練されていますが、.tarまたは.tgzアーカイブへの保存に比べてどのような利点がありますか?
クリーク14

@Creekイメージがマウント可能であることを除いて、利点はありません。ここでのOPの目標が、そのまま使用できる画像を作成することである場合に追加しました。そうでない場合、アーカイブは固定サイズではないため、アーカイブを使用することをお勧めします。それについて、より明確な警告を追加します。
goldilocks

ガッチャ、私はそうは思わなかった。それでもファイルを保存するためのクールな方法。
クリーク

2
@mpy GNU coreutils cpとrsync の両方には、-x他のファイルシステムへの再帰を回避するオプションがあります。Maciejの答えは、ddここで絶対に不適切である理由を最もよく説明します(コピー中に書き込みが行われるため、Markがリストした予防策を講じない限り、使用できないコピーを作成することはほぼ保証されています)。
ジル 'SO-悪であるのをやめる' 14

2
ddディスク上の実際のディレクトリではないものをコピーしないので、最初のポイントがどこから来ているのかわかりません。例えばデバイスは、内に取り付けられ/mnt内のノード、/procなどは、そのデータの一部ではないdd、それはディスク上にありませんようグラブ。マウントされていないファイルシステムにddは完全に有効です。最終的に完全に複製されます。マウントされたファイルシステムにとって不適切である唯一の理由は、システム上のデータがdd、動作するのに長い時間の間に変更されたり、部分的に書き込まれたりする可能性があることです。
ジェイソンC 14

1

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

いくつかの注意事項:

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

tarのような他のメソッドに対するrsyncの利点:

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

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


1

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

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

この方法を使用して、アップグレードしたばかりのコンピューターのアーカイブを作成しますが、これ以上使用することはありません。アクティブな使用中のシステムにはあまり良い方法ではありません:時間がかかり(数時間または数日かかります)、バックアップが巨大で(数個を超えることはできません)、バックアップされているシステムの使用は非常に破壊的ですアップ。日々のバックアップについては、ファイルシステムレベルで機能するもの、たとえばをお勧めしますrsnapshot


手順4は、読み取り専用モードでも書き込みを行うため、一部のファイルシステムでは危険な場合があることに注意してください。また、最新のシステム(Linux 3.something be live)にリンク/etc/mtabするだけで/proc/self/mount、chrootsやfs名前空間などがある場合でも機能します。
マチェイピエチョトカ14

1
@MaciejPiechotka 読み取り専用モードでマウントされている間に書き込むファイルシステムを認識していないため、非常に奇妙に感じるでしょう。一部のファイルシステムは、ファイルシステムが以前に完全にアンマウントされていない場合、読み取り専用モードでマウントすると書き込み行うため、ステップmount -o remount,ro /が書き込まれる可能性があります。しかし、このコマンドが戻ると、その後の書き込みはどのような状況で発生しますか?
ジル 'SO-悪であるのをやめる' 14

シャットダウンする「非必須プログラム」には、ロギングサブシステムを含める必要がありますが、これは非必須とは見なしません。
ジル 'SO-悪であるのをやめる' 14

@Gillesは、ブートディスクのディスクイメージを作成するために、イメージの作成に直接関与しないプログラムはすべて必須ではありません。
マーク14

ここでは、シングルユーザーモードについて説明する価値があります。
バリティ14

1

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

非常に使いやすく、時間を大幅に節約できます。

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


+1:質問には答えませんが、hddバックアップの良い提案のようです。
マルコ・スッラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.