如何使用dd克隆磁盘但排除某些分区?

如何使用dd克隆磁盘但排除某些分区?

如何使用dd克隆磁盘但排除某些分区?

所以我(在 Raspberry Pi 4B 上)得到:

Device         Boot     Start        End   Sectors   Size Id Type
/dev/mmcblk0p1           8192     532479    524288   256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2         532480  227000319 226467840   108G 83 Linux
/dev/mmcblk0p3      227000320 1000144895 773144576 368.7G 83 Linux

我想将整个系统备份到一个文件(也许pi.img),这样我就可以在需要时恢复。

但如何备份/dev/mmcblk0p1/dev/mmcblk0p2 仅有的? (排除是/dev/mmcblk0p3因为它是一个包含大量视频的分区,368GB太大了。)

如果我无法做到这一点dd,还有其他选择吗?谢谢。

答案1

“备份第227000320个扇区”

开始备份整个 /dev/mmcblk0p 磁盘,但在 /dev/mmcblk0p2 末尾停止复制。计算为 227000320 个扇区。

笔记:在您的上述输入中缺少基本信息,所以我假设您有:

单位: 1 * 512 = 512 字节的扇区

部门大小(逻辑/物理):512 字节/512 字节

这告诉我们单元号和扇区号到底代表什么(512 字节)。

按 dd 默认设置(bs=512,或同等 bs=1b)进行备份,如下所示。但由于 bs 值较小,IO 访问量较多,该命令耗时过长。我们需要一个优化的命令。 (这段代码只是为了更好的理解):

sudo dd if=/dev/mmcblk0p of=/backup_folder/RasPiBackup_1b.img bs=1b count=227000320 status=progress

笔记: 范围'1b'等于‘512’。您可以根据需要互换它们。请参阅下面的信息来源。

根据描述https://www.landoflinux.com/linux_dd_command.html:

b=512 | K=1024 | M=1024 * 1024 | G=1024*1024*1024

在你的情况下: bs -> count | 1b -> 227000320 | 1K -> 113500160 | 1M -> 110840 | 1G -> 109

在我的(Pi4 4GB)系统中,最快的复制速度介于 bs=1M 和 bs=4M 之间。

### 备份开始###

所以优化后的命令如下所示:

sudo dd if=/dev/mmcblk0p of=/backup_folder/RasPiBackup_1M.img bs=1M count=110840 status=progress

恢复图像

sudo dd if=/backup_folder/RasPiBackup_1M.img of=/dev/mmcblk0p bs=1M status=progress

或者

使用pigz(GZip的并行实现)进行备份,可以节省大量空间并使压缩时间加快2.5倍! pv命令是显示进度

sudo dd if=/dev/mmcblk0p bs=1M count=110840 | pv | pigz > /backup_folder/RasPiBackup_1M.img.gz

恢复pigz图像

pigz -d  /backup_folder/RasPiBackup_1M.img.gz | pv | sudo dd of=/dev/mmcblk0p bs=1M

### 备份结束###

### 图像处理开始###

验证图像内容

sudo fdisk -l /backup_folder/RasPiBackup_1M.img

MOUNT 镜像 /dev/mmcblk0p1 分区 (8192 * 512 = 4194304) 以查看其内容

sudo mkdir /mnt/RasPiBackup-mmcblk0p1
sudo mount -o loop,offset=4194304 /backup_folder/RasPiBackup_1M.img /mnt/RasPiBackup-mmcblk0p1

MOUNT 镜像 /dev/mmcblk0p2 分区 (532480 * 512 = 272629760) 以查看其内容

sudo mkdir /mnt/RasPiBackup-mmcblk0p2
sudo mount -o loop,offset=272629760 /backup_folder/RasPiBackup_1M.img /mnt/RasPiBackup-mmcblk0p2

删除有关 /dev/mmcblk0p3 的“GHOST”分区信息

笔记:分区 mmcblk0p3 未备份,但映像文件仍包含有关它的配置信息。我们可以轻松地将其删除。 (忽略错误:磁盘外不能有分区!

打印映像文件中的可用分区:

sudo parted /backup_folder/RasPiBackup_1M.img 'print'

/dev/mmcblk0p3 将是分区 3,因此直接删除它:

sudo parted /backup_folder/RasPiBackup_1M.img 'rm 3'

SHRINK 可以从图像中删除未使用的空间,以减小图像大小,这样它也可以适合较小的 SD 卡。 https://github.com/Drewsif/PiShrink

sudo pishrink.sh /backup_folder/RasPiBackup_1M.img

压缩以减小 /backup_folder 的大小,以防您保留更多 RasPiBackup_1M.img 实例。 GZip 的并行实现:https://github.com/madler/pigz

pigz /backup_folder/RasPiBackup_1M.img /backup_folder/RasPiBackup_1M.img.gz

列出存档文件的内容,而不解压它

pigz -l /backup_folder/RasPiBackup_1M.img.gz

### 图像处理结束 ###

相关内容