ファイルシステムの階層構造全体をあるドライブから別のドライブにコピーしたいのですが、各プラットフォームの内容とLinuxプラットフォームの通常のファイルをコピーしたいのですが。おそらくLinuxの組み込み関数でそれを実行するための最良の方法を知っていることに感謝するでしょう。ファイルシステムはextファミリです。
よく使う
> cp -ax / /mnt
/ mntが/ mntにマウントされた新しいディスクであり、/に他のマウントがないと想定します。
-xはそれを1つのファイルシステムに保存します。
もちろんこれはrootまたはSudoを使って行う必要があります。
このリンクは上記のものを含むいくつかの選択肢があります。
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
欲しいのは rsync です。
このコマンドを使用してフォルダを同期したり、途中で中断したときにコピーを再開することもできます。 1つのディスクをコピーするコマンドは次のとおりです。
rsync -avxHAX --progress / /new-disk/
オプションは以下のとおりです。
-a : all files, with permissions, etc..
-v : verbose, mention files
-x : stay on one file system
-H : preserve hard links (not included with -a)
-A : preserve ACLs/permissions (not included with -a)
-X : preserve extended attributes (not included with -a)
コピー速度を向上させるには、ファイルのデルタ/差分の計算を避けるために-W
(--whole-file
)を追加します。 rsyncのデルタ転送アルゴリズムの本当の利点はネットワーク使用量を減らすことであるため、これはソースと宛先の両方がローカルパスとして指定されている場合のデフォルトです。
また、uid/gid値をユーザー/グループ名でマッピングしないようにするために--numeric-ids
を追加することを検討してください。
Michael Aaron Safyanの答えはスパースファイルを説明するものではありません。 -S
オプションはそれを修正します。
また、この亜種は進行中の各ファイルをスパムすることはなく、ネットワーク以外の場合にパフォーマンスを低下させるデルタ同期も行いません。
あるローカルドライブから別のローカルドライブにファイルシステムをコピーするのに最適です。
rsync -axHAWXS --numeric-ids --info=progress2
あるドライブから別のドライブへのワンショットのローカルコピーでは、上のWolfmannによって説明されているように、cpで十分です。
たとえば、ローカルバックアップやリモートバックアップのような大きな作業の場合は、rsyncが最適です。
もちろん、rsyncの使用はかなり複雑です。
なぜrsync:
Michael Safyanが上記で示唆したように、私はこの目的のためにrsync
を使いました。おそらくコピーしたくないディレクトリを除外するために、いくつかの追加オプションを使用することをお勧めします。
このバージョンはGnomeおよびDebian/Ubuntuベースのシステムにかなり特有のものです。Gnome特有のユーザーのホームディレクトリのサブディレクトリとAPTパッケージキャッシュが含まれているからです。
最後の行は cache/Cache/.cacheという名前のディレクトリを除外します。
rsync -WavxHAX --delete-excluded --progress \
/mnt/from/ /mnt/to/
--exclude='/home/*/.gvfs' \
--exclude='/home/*/.local/share/Trash' \
--exclude='/var/run/*' \
--exclude='/var/lock/*' \
--exclude='/lib/modules/*/volatile/.mounted' \
--exclude='/var/cache/apt/archives/*' \
--exclude='/home/*/.mozilla/firefox/*/Cache' \
--exclude='/home/*/.cache/chromium'
--exclude='home/*/.thumbnails' \
--exclude=.cache --exclude Cache --exclude cache
rsync
「このアプローチは、異なるサイズ、パーティションテーブル、ファイルシステムを使用できるため、ddによるディスククローン作成よりも優れていると考えられ、cp -aによるコピーよりも優れています。アクセス制御リスト(ACL)と拡張属性。
から:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
マニュアルページ こちら
スレッドに2つの有用なビットを追加してください:暗号の変更と--update
の使用:
Wolfmanの投稿によれば、cp -ax
はエレガントで、地元のものにはぴったりです。
しかし、rsync
も素晴らしいです。 Michaelの答えに加えて(-W
)、暗号を変更することもスピードを上げることができます(ただし、セキュリティへの影響についてはお読みください)。
rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx
遅いCPUが実際のボトルネックになっていることについては、 議論(およびベンチマーク) がありますが、machineがロードされたときには役に立ちます。同時に他のことをする。
このように大きな再帰的コピーでrsyncを使用する他の大きな理由の1つは、 - uスイッチ(または - アップデート)。コピー中に問題が発生した場合は、それを修正できます。rsyncは中断したところから再開します(scpにはこれがないと思います)。ローカルで実行すると、cpには-uスイッチもあります。
(--updateと--whole-fileを一緒にした場合の影響がどのようなものであるかはわかりませんが、このようなタスクでは、それらは常に賢明に機能するようです)。
私はこれがrsyncの機能に関するスレッドではないことを理解していますが、私がこれに使用する最も一般的なもののいくつかは以下のとおりです。
ちなみに、私がwindowsを使わなければならないのなら、私はcygwinのrsyncを使って大きな再帰的なコピーを作成します。(エクスプローラはOS Xでさえもっと悪いとは思いますが)
JuniorRubyistによるコメントで述べられているように、ここで推奨されるアプローチはdd
を使うことです。主な理由はパフォーマンスです。ファイル単位ではなくブロック単位のコピーです。
パーティションのクローン作成
# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress
ディスク全体のクローン作成
# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress
参考文献
'dd'はすごいですが、ddrescue(apt install gddrescue)の方がさらに良いです。 ddが中断された場合、再起動する方法はありません(rsyncを使用するもう1つの良い理由)。ログファイルと一緒にddrescueを使用すると、どのブロックがコピーされたかが追跡されます。
デュアルブートのWindows/Linuxシステムをバックアップするときは、Windowsパーティションにはntfsclone、Linuxパーティションにはddrescue、MBRにはddを使用します。 (私はGPT/UEFIを使ってデュアルブートシステムをバックアップしようとはしませんでした。)
私が見たいのは、未割り当て領域が制御文字でマークされているntfscloneのようなファイルを作成できるddrescueツールです。これは、イメージを直接マウントできないようにしますが、含まれているデータと同じくらいの大きさにすることを可能にします。
誰かがddrescueのためのntfsclone「特別な画像フォーマット」を考え出してください...
rsync
は上で説明したように完璧な解決策です。
Docker devicemapperボリュームなどがコピーされる場合は、「スパースファイルを効率的に処理する」に-S
を追加するだけです。
ここで提案したrsyncコマンドを試しましたが、最終的には partclone
でよりクリーンで高速な結果が得られました。ソースパーティションとターゲットパーティションをアンマウントしてから、次を実行します。
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)
これにより、次の手順が実行されます。
上記は、ターゲットパーティションがソースと同じサイズまたは大きい場合に機能します。ターゲットがソースより小さい(ただし、すべてのデータに適合する)場合は、次を実行します。
e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)
resize2fs -M
は、データを複製する前にファイルシステムを最小サイズに縮小します。
partclone
は、ほとんどのシステムにデフォルトでインストールされないことに注意してください。 clonezilla のようなライブディストリビューションを使用するか、ディストリビューションパケットマネージャーからpartcloneをインストールします(Debianベースのシステムではapt-get install partclone
)。