#1 楼
我经常使用> cp -ax / /mnt
假定/ mnt是/ mnt上安装的新磁盘,而/。上没有其他安装。- x将其保存在一个文件系统上。
这当然需要以root用户或使用sudo来完成。 >
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
评论
尽管这是一个古老的答案,但仍然值得注意的是,您通常不希望复制/中存在的所有内容,但不包括/ dev,/ sys,/ proc等。因此,在发布cp之前,我建议您寻求更好的方法(也使用rsync)
– Marcin Orlowski
19年6月13日在8:17
@MarcinOrlowski WolfJM使用-x标志意味着将不会复制您提到的综合文件系统。
– Jim L.
19年7月31日在21:37
#2 楼
您想要的是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的增量传输算法的真正好处是减少了网络使用。按用户/组名称。评论
天才,谢谢。顺便说一句,我最终使用了rsync -avxHAWX --numeric-ids --progress / mnt /,但是我应该完成rsync -avxHAWX --numeric-ids --progress / mnt />〜/ rsync.out。我怀疑将输出倒入终端会减慢该过程。 :D
–克里斯K
2014年1月15日上午10:15
--info = progress2而不是--progress对于大型传输很有用,因为它提供了总体进度,而不是单个文件(数百万行)。
–弗洛里安
2015年9月27日在8:43
我必须用E替换X和A,因为扩展的属性和ACL被Mac上的E覆盖了。已测试:rsync版本2.6.9协议版本29
–乔纳森·科玛(Jonathan Komar)
16-8-4在5:17
除了>〜/ rsync.out外,2>〜/ rsync.err还将所有错误保存在单独的文件中。
–内饰
17 Mar 5 '17 at 0:45
如果要从/以外的其他文件夹复制文件,请注意,在源目录上使用斜杠(或不使用斜杠)会有所不同:rsync source / dest /将source /内部的所有内容复制到dest /,而rsync source dest /复制文件夹源以及其中的所有内容都放入dest /。
–半外部
17 Mar 20 '17在8:22
#3 楼
Michael Aaron Safyan的答案不代表稀疏文件。-S
选项可解决此问题。用于将文件系统从一个本地驱动器复制到另一本地驱动器。rsync -axHAWXS --numeric-ids --info=progress2
评论
惊人。这真的很好
– Gildas
18年7月26日在8:13
这应该是公认的答案,效果很好。示例55,431,669,792 57%97.47MB / s 0:06:56 xfr#2888,ir-chk = 5593/8534)
–提请
18年8月4日在3:11
<3这是完美的
–蒂姆·斯特赖德霍斯特(Tim Strijdhorst)
19年1月21日在15:10
#4 楼
对于从一个驱动器到另一个驱动器的一次快照本地副本,我猜想cp足以满足上面Wolfmann所述。对于较大的工作,例如本地或远程备份,最好是rsync。
当然,rsync的使用要复杂得多。
为什么rsync:
br)将驱动器A的全部或一部分复制到
驱动器B,并具有许多选项,例如
从
中排除某些目录(例如/ proc)。
另一个很大的优势是,该工具可以监视文件的传输。例如,对于大规模传输,如果连接中断,它将从断点继续。 。
最后但并非最不重要的一点是,rsync使用
ssh连接,因此,您可以
实现远程同步受保护的
“副本”。看看手册的
页面
以及这里的一些
示例。
#5 楼
就像上面的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
#6 楼
“ rsync“这种方法被认为比使用dd
进行磁盘克隆更好,因为它允许使用不同的大小,分区表和文件系统,并且比使用cp -a复制更好,因为它
可以更好地控制文件权限,属性,访问权限
控制列表(ACL)和扩展属性。“
来自:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
此处的手册页
#7 楼
如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
克隆已安装的可写分区
克隆可读写的已安装分区的关键是将其重新安装为只读。然后进行克隆,最后再次将其重新安装为可写。
# mount -o remount,ro /path/to/mount_point
# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress
# mount -o remount,rw /path/to/mount_point
注意。这样做可能会对正在运行的应用程序产生一些副作用。例如。如果您的系统中的应用程序需要在克隆时精确地写入此特定分区,则在克隆分区时必须停止这些应用程序。或者,如果您自己的应用程序将其重写以处理这种情况。
克隆具有一个或多个已挂载可写分区的磁盘
策略和副作用与克隆已挂载可写分区的策略和副作用相同。这次对每个可写的安装点重复执行重新安装命令。不会有任何不确定的副作用。基于只读安装的概念的系统也是如此。
参考文献
https://wiki.archlinux.org/index.php/disk_cloning
>
评论
dd是一个非常糟糕的主意,原因有两个:首先,对已安装的文件系统执行块级复制(/的情况),很可能会导致目标文件系统错误,其次,dd不会从安装在文件系统内的源代码,例如/ boot和/ home。您的链接对磁盘克隆有效,而不对“文件层次结构”克隆有效
–埃里克
19年8月16日在10:42
@Eric我可能在这里做了一些假设。首先,我假设“将整个文件系统层次结构从一个驱动器复制到另一个驱动器”。等同于“如何克隆磁盘”,因为“文件层次结构克隆”仅在克隆磁盘的子集时才有用。其次,我假设这是用于存储的磁盘,而不是用于当前正在运行的系统的磁盘。但是,仅挂载系统并不意味着文件系统错误。这取决于其挂载,只读挂载是否完全适合克隆。
– RikardSöderström
20 Dec 16'在13:42
随便你的船
–埃里克
20 Dec 17 '14:22
#8 楼
在线程re rsync上添加两个有用的位:更改密码,并使用--update
:根据Wolfman的帖子,
cp -ax
很优雅,对于本地的东西很酷。 但是,
rsync
也很棒。除了Michael的回答-W
之外,更改密码还可以加快处理速度(不过,请阅读有关任何安全方面的信息)。围绕着缓慢的CPU是实际的瓶颈,但是当计算机加载完成其他并发操作时,它确实对我有帮助。在较大的范围内使用rsync的另一个重要原因是,像这样的递归复制是由于-u开关(或--update)。如果在复制过程中出现问题,则可以对其进行修复,然后rsync将在中断的地方进行恢复(我认为scp对此没有帮助)。在本地执行,cp也具有-u开关。
(我不确定--update和--whole-file的含义是什么,但在这种任务中它们似乎总是很适合我)
我意识到这不是有关rsync功能的主题,但是我为此使用的最常见的一些方法是:
--delete-after等(如Michael在后续文章中所述),如果您想将新系统同步回原始位置或类似位置。而且,
-排除-用于跳过目录/文件,例如在跳过用户主目录等情况下将目录复制/创建新系统到新位置(例如,您要从其他地方安装房屋,创建新用户等)。
顺便说一句,如果我不得不使用Windows,我会使用cygwin的rsync来进行大型递归副本,因为资源管理器有点脑筋急转,想从头开始(尽管我发现Finder是OS X更糟的是
#9 楼
我尝试了此处提出的rsync命令,但最终使用partclone
获得了更清晰,更快的结果。卸载源分区和目标分区,然后运行以下命令:partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)
这将执行以下步骤:
克隆(仅分区的使用过的部分
确保文件系统正常(resize2fs强制执行此步骤)
将分区的大小调整为新的文件系统
如果目标分区的大小等于或大于源分区的大小,则上述操作有效。如果目标小于源(但适合所有数据),请执行以下操作:
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)
在克隆数据之前,将文件系统缩小到最小大小。 br /> 请注意,大多数系统默认未安装
resize2fs -M
。使用像clonezilla这样的实时发行版,或从发行版数据包管理器安装partclone(基于debian的系统上为partclone
)。#10 楼
'dd'很棒,但是ddrescue(apt install gddrescue)更好。如果dd被中断,则无法重启(使用rsync的另一个很好的理由)。当您将ddrescue与日志文件一起使用时,它会跟踪已复制了哪些块。和dd表示MBR。 (我没有尝试过使用GPT / UEFI备份双引导系统。)控制字符。这使得映像不能直接挂载,但只能与所包含的数据一样大。#11 楼
rsync
是如上所述的完美解决方案。如果要复制docker devicemapper卷或类似文件,我只是将
-S
添加到“有效处理稀疏文件”。
评论
嗯...对dd的爱在哪里? dd if = / dev / sda1 of = / dev / sdb1 bs = 4096@juniorRubyist +1为dd。我总是用那个。但是要使用哪些标志?我使用conv = notrunc,noerror,sync。
-1表示dd的原因有两个:首先对已挂载的文件系统执行块级复制(/是这种情况)是个坏主意,其次dd不会从文件系统中挂载的源(如/)复制数据引导和/ home。
-1表示dd也是因为源上发生的任何碎片也会被复制;并且无法自动处理其他大小的目的地