是否可以将 USB 驱动器上的 Kali 的两个分区完全备份到笔记本电脑的硬盘驱动器上,同时在将来将其恢复到 USB 时保持其功能?到目前为止,我只看到恢复主分区的方法(我在 Windows 上,我知道它无法检测到多个分区,但我愿意在辅助 USB 驱动器上进入实时 Linux 发行版)。这样做的原因是我想使用具有持久性的 ParrotOS Live CD,但我不想失去配置 Kali 的所有工作。
答案1
备份完整的 USB 驱动器非常容易。在 Linux 中,USB 驱动器可用作块设备。分区也可用作块设备。实际上,它们只是保存它们的驱动器的片段。内核读取分区表并提供名称,如/dev/sdx1
或/dev/sdx2
,因此您(以及进程和操作系统本身)不必使用/dev/sdx
,每次都明确考虑分区偏移量,也不必注意您的读/写是否不会跨越分区边界。
任何备份方法/dev/sdx2
都可用于备份/dev/sdx
。从技术上讲,这没什么区别:您从块特殊文件读取数据,然后写入其他地方。任何读取、不更改任何内容并写入的工具都可以。
在 Linux 中它可以简单到(选择一个):
cat /dev/sdx >/path/to/image
pv /dev/sdx >/path/to/image
cp /dev/sdx /path/to/image
或者(不那么简单,但是很常见的例子):
dd if=/dev/sdx of=/path/to/image bs=8M
在您的情况下,/path/to/image
它应该属于您的笔记本电脑硬盘的已安装文件系统。
复制全部/dev/sdx
意味着复制主引导记录和分区表(如果有)、引导加载程序(如果有)、所有分区和未分区空间。
确保的内容/dev/sdx
不会改变。如果读取时内容发生变化,则可能会得到不一致的图像。如果将 USB 上的数据想象成一张图片,不一致的图像看起来有点像全景失败现象。当您从连续捕获的、在此期间发生变化的片段构建大型图像时,就会发生这种情况。
没有持久性的实时系统通常不会修改启动设备,因此您甚至可以从内部复制此类操作系统。我猜您的情况下至少会安装一个具有写入权限的分区来提供持久性,这会使事情变得复杂。
幸运的是,您愿意在辅助 USB 驱动器上进入实时 Linux 发行版。这是一个非常好的主意。只需确保操作系统不会自动从您要读取的 USB 驱动器安装文件系统。
最终,您将把图像写回。为此,请恢复流程:读取图像并写入设备。示例(选择一个):
cat /path/to/image >/dev/sdy
pv /path/to/image >/dev/sdy
cp /path/to/image /dev/sdy
dd if=/path/to/image of=/dev/sdy bs=8M
笔记:
- 写入错误的设备并丢失数据非常容易。无法保证
/dev/sdx
先前命名的设备/dev/sdx
现在可用(这就是我在示例中使用的原因)。在运行命令之前,sdy
请研究输出并检查两次。拿一只橡皮鸭,lsblk
向它解释为什么您使用 eg/dev/sdc
而不是/dev/sda
。 - 如果
/dev/sdy
不存在而您碰巧还是对其进行了写入,那么您将创建一个占用文件系统空间的常规文件。 - 写入映像可能不足以使当前操作系统识别已恢复的分区并创建等
/dev/sdy1
。/dev/sdy2
如果您需要立即访问它们,请使用partprobe
。重新启动到相同或另一个操作系统(包括已恢复的操作系统)将设置正确,而无需明确调用partprobe
。
我知道您要将映像还原到同一个 USB 驱动器。如果是这样,则以下评论不适用。但一般来说,以下是一些潜在问题: