我想将当前状态备份为图像,但遇到了一个问题:我的 microSD 似乎包含两个分区:pi_root 和 pi_boot。如何使用 dd 创建具有两个分区的 microSD 卡的精确图像?
答案1
您可以使用dd
。
首先,你必须找到存储卡的设备名称,因为这个可能取决于使用的读卡器。运行sudo lsblk
输出将类似于以下内容:
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 29.3G 0 disk
├─mmcblk0p1 179:1 0 56M 0 part /boot
└─mmcblk0p2 179:2 0 29.2G 0 part /
在这种情况下,mmcblk0
是唯一的设备,因为它是在 Pi 上完成的。mmcblk0
通常是与存储卡读卡器一起使用的名称,但 USB 读卡器也可能显示为sdb
等等。
要对整个卡进行完整备份,请发出命令sudo dd if=/dev/mmcblk0 of=filename.img
。如果卡的设备不是 mmcblk0,请按照输出的输出进行替换lsblk
。
这会将内存卡中的所有数据读入文件filename.img
。通常不应从 Pi 执行此操作 - 因为读取实时文件系统可能会导致结果不一致。关闭 Pi,然后将卡放入另一台计算机。不要安装它。
要将备份写回卡中,请反转输入和输出,即sudo if=filename.img of=/dev/mmcblk0
。
请务必小心,在执行 dd 命令之前请阅读三遍。例如,如果您混淆了输入和输出,则可能会毁掉所有数据!
例如,如果您要压缩图像以便存储,请运行bzip2 filename.img
。这将显著减小文件大小,尤其是在您有大量可用空间的情况下。要解压缩图像以便恢复,请运行bunzip2 filename.img.gz
。
答案2
如果你坚持使用,dd
你可以按照下面描述的方式进行操作。提前提醒一下,还有更简单的工具,比如克隆与使用相比,它不太容易出错,而且性能可能更高dd
。
首先,确保您知道 SD 卡的驱动器号(我假设它在这里,/dev/sdb1
并且/dev/sdb2
包含您的分区)。您可以简单地提取此驱动器的完整映像,而不是寻址单个分区,而是使用驱动器本身(即/dev/sdb
)。要获取映像中该驱动器的完整内容,请执行以下操作:
sudo dd if=/dev/sdb of=~/myimage.img
逆转它:
sudo dd if=~/myimage.img of=/dev/sdb
您可能会问如何获得正确的驱动器号,您可以通过使用来lsblk
获得类似如下的输出:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 119,2G 0 disk
├─sda2 8:2 0 16G 0 part [SWAP]
└─sda3 8:3 0 103,2G 0 part /
sdb 8:16 0 1,8T 0 disk
├─sdb1 8:17 0 1G 0 part /media/<username>/pi_boot
└─sdb2 8:18 0 15G 0 part /media/<username>/pi_root