ハードディスクをバックアップする必要があります。 dd
を使用して、画像を外部HDDに配置したいと思います。
dd
を使用してこれを行うことはできますか、それともLiveCDなどの別のデバイスから起動する必要がありますか?dd
の実行中に他のI/O操作がないと確信している場合はどうなりますか?rsync
は、バックアップ、特にインクリメンタルバックアップに使用するのに最適なツールであると確信しています。
しかし、私はdd
に興味があります。なぜなら、他のストレージデバイスもバックアップしたいので、パーティション化されていないスペースに保存されているデータもコピーするからです。たとえば、私の電子書籍リーダーは、パーティション化されていないスペースを使用して、uboot、カーネル、およびその他のデータを格納します。
一般的には安全ではありません。 FSは、操作が特定の順序で書き込まれることを前提としているため、ファイルの新しいデータを書き込んでから、他のデータからそのデータへのポインターを作成できます。正確な詳細はファイルシステムによって異なります。次の場合を想像してみてください。
dd
は、ガベージまたは一部のデータを含むロケーションXから読み取りますdd
はロケーションX + 1リンクからロケーションXへの読み取りバックアップの観点から、ガベージデータを取得します。ただし、これを回避する方法はいくつかあります。
xfs_freeze
は1つで、他にはわかりませんが、少なくとも理論的にはそのようなオプションは存在します)最後の注意として-dd
はバックアップの最良の方法ではないかもしれません。ディスク全体をコピーしますが、「ガベージ」もコピーすると無駄になることがよくあります。ディスクイメージが必要な場合は、 partimage のようなものが良いかもしれません。より良いオプションがない場合は、rsync、差分/インクリメンタルモードのtarなど、または bacula 、 tarsnap などの完全バックアップシステムを使用するか、次のいずれかを使用することです。他の多く。データの重複排除は、バックアップのサイズに驚かされるかもしれません。
これは、パーティションの正確な目的と、コピーの目的によって異なります。ただし、一般的には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
パスがアーカイブ内の何かと一致する場合、既存のファイルを上書きすることに注意してください。それ以外の場合は、既存のディレクトリ階層は同じままになります。
Clonezilla を真剣に使用してください。これは、最高のオープンソースのLinuxベースのノートンゴーストのようなユーティリティです。ディスクからディスクまたはディスクからファイルシステム(ファイルとして保存)のいずれかで、パーティションとフルディスクの両方のクローンを作成します。ほとんどのLinuxファイルシステム、NTFS、FAT32などをサポートしています。 SMBまたはNFS共有で、内部ディスク、外部ドライブ、またはネットワーク経由で保存することもできます。
それは非常に使いやすく、あなたに多くの時間を節約します。
編集:質問に答えるために、いいえ、ブロックデバイスからの読み取りはアトミックではないため、ファイルシステムのコピーに一貫性がなくなるリスクがあるため、マウントされている間はほとんどのファイルシステムをdd
できません。たとえば、100ブロックをコピーしている場合、途中でシステムが最初のブロックと最後のブロックを更新した可能性があります。つまり、コピーには変更された最後のブロックが含まれますが、最初のブロックは含まれません。
rsyncは、ファイルシステムのバックアップに最適なツールであり、現在実行中のOSの起動可能なバックアップを作成できます。
いくつかの警告:
Tarのような他の方法に対するrsyncのいくつかの利点:
イメージバックアップにはその場所がありますが、問題が発生した場合も含めて、ドライブをそのままコピーします。ファイルのバックアップは新しいディレクトリを作成し、その過程でドライブを線形化(デフラグ)するという副作用があります。現在のOSの同一のコピーを10個作成する場合は、コピーマスターにrsyncを使用し、残りにdd(または同様のもの)を使用します。
それはあなたが「現在の作業システム」が何を意味するかによります。単にブートディスクの使用を避けたいだけで、コンピューターで実行されているサービスの中断を気にしない場合は、次のことが可能です。
sync
mount -o ro /
。/etc/mtab
に書き込めないという警告が表示される可能性があります。無視してください)。私はこの方法を使用して、アップグレードしたばかりのコンピューターのアーカイブを作成しますが、これ以上使用する予定はありません。これは、アクティブに使用されているシステムにとってはあまり良い方法ではありません。速度が遅く(数時間または数日かかる)、バックアップが膨大であり(したがって、数を超えることはできません)、バックアップされているシステムの使用を非常に混乱させます。アップ。日常のバックアップには、rsnapshot
などのファイルシステムレベルで機能するものをお勧めします。