如何使用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
### 图像处理结束 ###