ファイルシステムをそのまま正確にコピーするにはどうすればよいですか?


10

私がプログラミングしているデバイス用のファイルシステムがあり、正確なコピーを作成したいと考えています。理想的には、このコピーを、コピー元のフォルダーと同一にする必要があります。私が使って試してみましたcp -r cp -aし、rsync -azvPこれを達成しようとします。ただし、それぞれが異なるサイズのフォルダーを生成し(を使用du -s)、最終的に、デバイスが元のフォルダーで実行されても、コピーしたものでは実行されません。

  • 私が使用したコマンドが考慮に入れられていないことは何ですか?
  • ファイルシステム/フォルダーをコピーするときにすべてを同一に保つことは可能ですか?もしそうなら、私はそれをどうやってやりますか?

PS私はStackOverflowに同様の質問を投稿しましたが、間違った交換で質問したことにすぐに気付きました


編集:これは役に立たないかもしれませんが、コピーしたディレクトリを使用する方法に関係なく、問題のマシンは常に次の出力でカーネルパニックを引き起こします。

VFS:NFS経由でルートfsをマウントできません。フロッピーを試しています。VFS:ルートデバイス「nfs」またはunknown-block(2,0)を開けません。正しい「root =」ブートオプションを追加してください。使用可能なパーティションは次のとおりです。1f0064
mtdblock0(ドライバー?)1f02 64 mtdblock2(ドライバー?)1f04 2432 mtdblock4(ドライバー?)1f05 128 mtdblock5(ドライバー?)1f06 4352 mtdblock6(ドライバー?)1f07 204928 mtdblock7(ドライバー?)1f08 50304 mtdblock8(ドライバー?)0800
8388608 sdaドライバー:sdカーネルパニック-同期しない:VFS:ルートブロックをunknown-block(2,0)にマウントできません


5
du出力の違いは、内容が同じでないことを示すものではありません。
Ignacio Vazquez-Abrams

コピーしたディレクトリを使用してデバイスが起動しません。私は正確に私がコピーされたファイルシステムは、同じように扱われていないことを間違ってやっているものを指標としてそれを取って、疑問に思って
TopGunCoder

あなたがしようとしていることを正確に指定する必要があります。rsync -aまたはcp -aディレクトリの正確なコピーを実行しますが、起動可能なディスクをコピーしようとしていますが、それを完了するために必要なことがいくつかあります。
forcefsck 2013年

1
どんなデバイス?どのようなファイルシステムですか?どんな種類の記憶媒体ですか?
michas 2013年

1
dd if=/some/location of=/some/other/location bs=4Mには、データをそのまま読み書きするようなものを使いたいように思えます。

回答:


12

私は通常、次のいずれかの方法を使用します。

  • rsync -aHAX(冗長性のためにvを追加)は、コピー中にターゲットフォルダー内のリンク構造とx-attrsを確実に保持します。忘れないでください。これaは、アーカイブ、時間、所有権、および権限の保存を意味します。
  • 単純なtar cvf(時間を節約するために圧縮せず、タールを塗る)は、最初のものが必要なものを何らかの理由で満たせず、時間がない場合に使用しますが、常に最初のものを試します。

すべてが正常に機能したことを確認するために、必要diff -r <folder1> <folder2>に応じて後で実行できます。


1
これでうまくいきました!また、(NFSを介して)起動していたデバイスがオフになっていて、コピーの進行中にファイルシステムにアクセスできないことを確認する必要もありました。
TopGunCoder 2013年

1
ああ、読み書きアクセスのあるNFSクライアントは時々刺激を与えることができます!
bayindirh 2013年

3
これは、-Sなしでスパースファイルをコピーしません。それはdu -s違いの一部かもしれません。以前rsync -axXSAHはすべてをコピーしていました。-xはファイルシステム内でのみコピーし、別のファイルシステムからマウントされたファイルはコピーしません。
Victor Roetman、2016年

--numeric-idsはどうですか?
0x2207 2017年

@ 0x2207これは、ユーザーが異なるシステムで異なる数値IDを持っている場合にのみ役立ちます(たとえば、ユーザーhbayindirが両方のシステムにあり、ソースにUID 1000、宛先に1536がある)。UIDとGIDではなく実際の所有者を保持する必要があるため、このオプションを使用する必要はありませんでした。ユーザーがソースも宛先も存在しない場合、数値IDがフォールバックとして使用されます。
bayindirh 2017

4

コメントで返信を読んでいると、ルートフォルダーをコピーしようとしている可能性があります(「コピーしたディレクトリを使用してデバイスが起動しません」)。その場合、いくつかのことを行う必要があります。

$ 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

+1 OPの失敗したブートメッセージに手掛かりがあり、これが対処していると思います。
msw 2013年

結局、これに非常によく似たものが機能しました。コピーする必要がある自分のマシンのファイルシステム(FS)を処理していました。それをするために私がしたのtar ctar xそれだけでした。私はしかし、リモートIが起動されたことをデバイスに、私のマシンのローカルだったFSを使用して、それを起動して以来、私のマシンがオフになっていることを確認するためだったがキッカーは(私はNFS経由のデバイスを起動して)
TopGunCoder

grub-install: error: embedding is not possible, but this is required for cross-disk install.
Vitaly Zdanevich 2018

2

FSArchiverを試すことができます。これは、現在メンテナンスされていない同様のパーツイメージの後継です。私は過去にpartimageとFSArchiverの両方を使用しましたが、どちらもうまく機能しました。私の知る限り、どちらも元のファイルシステムと可能な限り同じファイルシステムのコピーを作成します。FSArchiverはpartimageよりも少し強力だと思います。たとえば、ext4では機能しますが、partimageでは機能しません。FSArchiver / partimage比較表をご覧ください。


2

を使用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

duは、ディスク上のサイズも報告します(そのため、スパースファイルとハードリンクはより少ないスペースをとります)。たとえば、私のシステムでdu -sh /varは21Gがdu -sh --apparent-size /var表示されますが、209Gが表示されます。
Victor Roetman、2016年

0

それはあなたが「同一」で何を意味するかによります。

  • rsyncほとんどの場合、実行するだけで問題ありません。を使用tarして、すべてをファイルにパックし、それを別の場所に抽出したい場合があります。
  • 完全なファイルシステムのクローンが必要な場合は、ファイルシステムdd全体をコピーするために使用できます。

デバイスをデバッグする手段がある場合は、現在それが実行されない理由を正確に調べてみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.