备份 Ext4 分区的正确姿势

2022-07-27 15:13:01 +08:00
 monetto

如题,有一个 Ubuntu 系统的 U 盘,想要做全盘备份,但是看了下 Diskgenius 全盘备份功能必须 付费版才能使用。

由于 U 盘比较大( 256G ),无法使用 dd 命令进行备份(也需要 256G 空间以供备份)

求大佬,大容量 Ext4 分区备份的正确姿势是什么

6537 次点击
所在节点    Linux
72 条回复
pagxir
2022-07-28 16:22:26 +08:00
@codehz 在你这场景下,加 dd 那必须更慢,瓶颈在 CPU 就得减少 CPU 的开销才会快。两个 dd 的好处,一个 dd 去取数据到内存,一个 dd 负责吐数据给压缩器,取数据的 dd 不用等压缩器,压缩器不用等磁盘。当然了,你这测试环境肯定是加了比不加还慢
codehz
2022-07-28 16:37:32 +08:00
@pagxir 如果你想达到所谓的缓冲效果,dd 是没有的,有个第三方软件 https://linux.die.net/man/1/buffer 可以实现你想要的结果,它内部实现了一个环形缓冲区,然后可以实现所谓的一边读取,一边写入——但是实际测试可以发现,它的效果比想象中的差很多,内核提供的 128k 的预读已经可以完成足够多的加速,如上所述,gzip 请求大小是 64k ,所以本来就可以在压缩的过程中请求 io
codehz
2022-07-28 16:55:32 +08:00
@pagxir 模拟瓶颈在 io 也很好模拟,qemu 贴心的提供了限制 io 速度的方法,用 throttling.bps-total 限制就可以
限速到 10MB 的时候
/ # time sh -c 'dd if=/dev/sda bs=2M | gzip > /dev/null'
8+0 records in
8+0 records out
16777216 bytes (16.0MB) copied, 1.579849 seconds, 10.1MB/s
real 0m 1.59s
user 0m 0.92s
sys 0m 0.27s
/ # time sh -c 'gzip -c /dev/sda > /dev/null'
real 0m 1.53s
user 0m 0.97s
sys 0m 0.11s
作为对比,如果管道前面是 cat
/ # time sh -c 'cat /dev/sda | gzip > /dev/null'
real 0m 1.53s
user 0m 0.88s
sys 0m 0.24s
具体用时可能略有浮动( gzip 这边就很稳定在 1.53 ,dd 组有时候有异常数据到两秒以上),但是差距还是在这的
dd 的问题是:write 它也会阻塞,阻塞了之后 read 自然也不会被调用,压缩用的 cpu 太少了,以至于 io 是瓶颈的时候性能并没有啥太大区别)
关于 dd 作为缓冲的作用,有好多文章写了这个问题
https://unix.stackexchange.com/questions/345072/can-dd-be-used-to-add-a-buffer-to-a-pipe
https://unix.stackexchange.com/questions/21918/utility-to-buffer-an-unbounded-amount-of-data-in-a-pipeline
pagxir
2022-07-28 16:59:40 +08:00
level@qcloud:~$ cat cloud.txt
$ echo 128 | sudo tee /sys/block/sdb/bdi/read_ahead_kb
128
$ time lz4 -c < /dev/sdb2 > /dev/null
real 0m25.977s
user 0m2.104s
sys 0m1.220s
$ time lz4 -c < /dev/sdb2 > /dev/null
real 0m26.217s
user 0m2.221s
sys 0m1.126s
$ echo 20480 | sudo tee /sys/block/sdb/bdi/read_ahead_kb
20480
$ time lz4 -c < /dev/sdb2 > /dev/null
real 0m22.859s
user 0m0.654s
sys 0m0.491s
$ time lz4 -c < /dev/sdb2 > /dev/null
real 0m22.808s
user 0m0.695s
sys 0m0.428s
$ echo 128 | sudo tee /sys/block/sdb/bdi/read_ahead_kb
128
$ time lz4 -c < /dev/sdb2 > /dev/null
real 0m25.532s
user 0m1.629s
sys 0m1.142s
$ dd if=/dev/sdb2 bs=16M iflag=direct|lz4 -c > /dev/null
记 录 了 32+0 的 读 入
记 录 了 32+0 的 写 出
536870912 字 节 ( 537 MB ,512 MiB ) 已 复 制 ,22.9 s ,23.4 MB/s
level@qcloud:~$
level@qcloud:~$

从这个数据看,这个 read ahead 是有效的。只能说是 page cache 的行为有些奇怪。
pagxir
2022-07-28 17:00:46 +08:00
@codehz dd 用做缓冲在 shell 里本来就很常见
codehz
2022-07-28 17:33:10 +08:00
@pagxir 常见的是用 pv ,它的 buffer 是实打实的(和前面说的 buffer 命令类似机制),还能顺带显示进度条
standin000
2022-08-02 22:00:36 +08:00
linux 标准的命令是 dump ,我使用过 e2image ,蛮好用。另外除了前面提到的 clonezilla ,还可以用 fsarchiver ,
windows 可以使用 Macrium Reflect Free Edition
huangsijun17
2023-02-06 10:08:00 +08:00
@documentzhangx66 Symantec 早就把 Ghost 卖给诺顿了。而且,Ghost 停止技术支持都快 10 年了。能不能别拉出来鞭尸了?
documentzhangx66
2023-02-06 10:53:04 +08:00
@huangsijun17

建议把我上一条评论,再仔细地、认真地,阅读。别急着抬杠。
huangsijun17
2023-02-06 11:48:28 +08:00
@documentzhangx66 为什么不用“Clonezilla(再生龙)”?为什么不用“DiskGenius”或其套壳备份软件“易数一键还原”?为什么不用“傲梅分区助手”或其套壳备份软件“轻松备份”?有的是 Ghost 的替代品。
documentzhangx66
2023-02-06 19:56:16 +08:00
@huangsijun17

建议你,先认真学习了解一下 Ghost 的全部功能,别急着抬杠。

这不是傲梅这些玩具能比的。
2NUT
2023-08-21 10:23:50 +08:00
@codehz 一个是磁盘备份,一个是文件系统备份 能一样么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/869026

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX