Answers:
我经常用
> cp -ax / /mnt
假定/ mnt是/ mnt上安装的新磁盘,/上没有其他安装。
-x将其保留在一个文件系统上。
当然,这需要以root用户或使用sudo来完成。
此链接有一些替代方法,包括上面的一种
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
/
,排除即/dev
,/sys
,/proc
等等。因此发出之前cp
我建议您寻找更好的方法(也使用rsync)
-x
标志意味着不会复制您提到的综合文件系统。
您想要的是rsync。
此命令可用于同步文件夹,并且在中途退出时也可以继续复制。复制一个磁盘的命令是:
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的增量传输算法的真正好处是减少了网络使用量。
还应考虑添加--numeric-ids
以避免按用户/组名称映射uid / gid值。
rsync -avxHAWX --numeric-ids --progress / mnt/
但我应该这样做rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out
。我怀疑将输出倒入终端会减慢该过程。:D
--info=progress2
--progress
对于大型传输,它不是有用,因为它可以提供整体进度,而不是单个文件(数百万行)。
X
和A
使用E
,因为扩展属性和ACL是由覆盖E
在我的Mac。经过测试:rsync version 2.6.9 protocol version 29
> ~/rsync.out
,2> ~/rsync.err
还将所有错误保存在单独的文件中。
/
,请注意,在源目录上使用斜杠(或不使用斜杠)会有所不同:将rsync source/ dest/
内部的所有内容复制source/
到dest/
,同时rsync source dest/
将文件夹source
和内部的所有内容复制到dest/
。
Michael Aaron Safyan的答案并未说明稀疏文件。-S
选项可以解决该问题。
同样,此变体不会随着每个文件的进行而发送垃圾邮件,也不会进行增量同步,这会在非网络情况下降低性能。
非常适合将文件系统从一个本地驱动器复制到另一本地驱动器。
rsync -axHAWXS --numeric-ids --info=progress2
55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
就像上面的迈克尔·萨夫扬(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
向线程re rsync添加两个有用的位:更改密码,并使用--update
:
根据Wolfman的帖子,cp -ax
文雅且对当地事物很酷。
但是,rsync
也很棒。除了Michael的回答之外-W
,更改密码还可以加快处理速度(不过,请阅读有关任何安全隐患的信息)。
rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx
关于缓慢的CPU是实际的瓶颈,有一些讨论(和基准测试),但是当计算机加载完成其他并发操作时,它确实对我有帮助。
在大型的递归副本中使用rsync的另一个重要原因之一是因为-u开关(或--update)。如果在复制过程中出现问题,则可以对其进行修复,然后rsync将在中断的地方进行恢复(我认为scp没有此问题)。在本地执行,cp也具有-u开关。
(我不确定--update和--whole-file的含义是什么,但在这种任务中它们似乎总是对我来说很明智)
我意识到这不是关于rsync功能的主题,但是我为此使用的一些最常见的方法是:
顺便说一句,如果我不得不使用Windows,我会使用cygwin的rsync来进行大型的递归副本,因为资源管理器的大脑有点死了,想从头开始(尽管我发现Finder的OS X更加糟糕)。
同步
“这种方法被认为比使用dd进行磁盘克隆更好,因为它允许使用不同的大小,分区表和文件系统,并且也比使用cp -a复制更好,因为它可以更好地控制文件权限,属性,访问控制列表(ACL)和扩展属性。”
从:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
手册页在这里
如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
这是一个非常糟糕的主意,原因有两个:首先,对已安装的文件系统执行块级复制(对于的情况/
),很可能会导致目标文件系统错误,其次,dd
不会从已安装在内部的源复制数据像/boot
和这样的文件系统/home
。您的链接仅适用于磁盘克隆,而不适用于“文件层次结构”克隆
'dd'很棒,但是ddrescue(apt install gddrescue)更好。如果dd被中断,则无法重启(使用rsync的另一个很好的理由)。当您将ddrescue与日志文件一起使用时,它会跟踪已复制的块。
备份双引导Windows / Linux系统时,我将ntfsclone用于Windows分区,将ddrescue用于Linux分区,将dd用于MBR。(我没有尝试使用GPT / UEFI备份双引导系统。)
我很想看到一个ddrescue工具,它可以创建ntfsclone之类的文件,其中未分配的空间用控制字符标记。这使得映像不能直接安装,但只能与所包含的数据一样大。
有人请拿出ntfsclone“特殊图像格式”作为ddrescue ...
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这样的实时发行版,或从您的发行版数据包管理器(apt-get install partclone
在基于debian的系统上)安装partclone 。
dd
哪里?dd if=/dev/sda1 of=/dev/sdb1 bs=4096