プログラミングしているデバイス用のファイルシステムがあり、正確なコピーを作成したい。理想的には、このコピーを、コピー元のフォルダーと同一にする必要があります。これを達成するためにcp -r
cp -a
およびrsync -azvP
を使用してみました。ただし、それぞれが異なるサイズのフォルダーになります(du -s
を使用)。最終的に、デバイスが元のフォルダーで実行されても、コピーしたものでは実行されません。
追伸私は StackOverflow に同様の質問を投稿しましたが、間違った交換で質問したことにすぐに気付きました
編集:これは役に立たないかもしれませんが、コピーしたディレクトリをどの方法で使用しても、問題のマシンは常に次の出力でカーネルパニックになります。
VFS:NFS経由でルートfsをマウントできません。フロッピーを試します。 VFS:ルートデバイス "nfs"またはunknown-block(2,0)を開けません。正しい "root ="ブートオプションを追加してください。利用可能なパーティションは次のとおりです:1f00
64 mtdblock0(ドライバー?)1f02 64 mtdblock2(ドライバー?)1f04 2432 mtdblock4(ドライバー?)1f05128 mtdblock5(ドライバー?)1f06 4352 mtdblock6(ドライバー?)1f07 204928 mtdblock7(ドライバー?)1f08 50304 mtdblock8(ドライバー?)0800
8388608 sdaドライバー:sdカーネルパニック-同期しない:VFS:unknown-block(2,0)にルートfsをマウントできません
私は通常、次のいずれかの方法を使用します。
rsync -aHAX
(冗長性のためにvを追加)は、コピー中にターゲットフォルダー内のリンク構造とx-attrsを確実に保持します。忘れないでくださいa
は、アーカイブすることを意味し、時間、所有権、および権限をすでに保持しています。tar cvf
(時間を節約するために圧縮せず、タールを引くだけです)は、最初のものが何らかの理由で必要なものを満たせず、時間がない場合に使用しますが、常に最初に試します1。すべてが正常に機能したことを確認するために、必要に応じて後でdiff -r <folder1> <folder2>
を実行できます。
コメントで返信を読んでいると、ルートフォルダーをコピーしようとしているようです(「コピーしたディレクトリを使用してデバイスが起動しません」)。その場合、いくつかのことを行う必要があります。
$ cd /
$ mkdir backups
$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
--exclude=dev/pts --exclude=backups .
ルートフォルダーを新しいシステムにコピーしたら、起動する前にgrubを更新する必要があります。
$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
FSArchiver を試すことができます。現在保守されていない同様のパーツイメージの後継です。私は過去にpartimageとFSArchiverの両方を使用しましたが、どちらもうまくいきました。私の知る限り、どちらも元のファイルシステムと可能な限り同じファイルシステムのコピーを作成します。 FSArchiverはpartimageよりも少し強力だと思います。たとえば、ext4では機能しますが、partimageでは機能しません。 FSArchiver/partimage比較表 を参照してください。
du
を使用してフォルダーを比較することは、本質的に厄介です。サイズだけに基づいて2つのディレクトリを本当に比較したい場合は、次のようにdu
を使用します。
$ du -sh --apparent-size <dir>
このスイッチは、ディレクトリを実際のサイズと、物理ドライブメディアに保存するときに消費するディスク領域の量を比較して報告します。ディスクはブロックに編成され、ファイルはこれらのブロックに書き込まれます。ファイルに必要なのは、BLOCK + 1のスペースだけである場合、2 BLOCKS相当のスペースを消費します。これは、du
が通常報告するものです。ツールの名前はディスク使用量であることを忘れないでください!
ファイルシステム全体のように聞こえるものを扱っているとすれば、ディレクトリが存在するパーティションの正確なコピーを作成するためにdd
を使用する傾向があります
$ dd if=/dev/sda1 of=/srv/boot.img
その後、これを使用できますboot.img
パーティションをどこにでも復元します。
$ dd if=/srv/boot.img of=/dev/sdb1
それは、あなたが「同一」で何を意味するかによります。
rsync
を実行するだけで問題ありません。 tar
を使用してすべてをファイルにパックし、それを別の場所に抽出したい場合があります。dd
を使用してファイルシステム全体をコピーできます。デバイスをデバッグする手段がある場合は、現在それが実行されない理由を正確に調べてみてください。