编辑:由于某种原因,我的帖子只保存了一部分。我现在已经将其更新为完整内容
尽管本主题围绕 Raspberry Pi 展开,但它基本上适用于具有以下设置的所有 SD 卡:文件系统仅占卡总大小的一小部分。简而言之,这个问题的重点是掌握如何写作仅有的FS(或更多,如果存在多个分区)到备份映像。更多详细信息请参见下文。
去年 12 月购买 Pi 后,当我开始使用它时,我的 SD 卡出现了几次损坏并丢失了其中的内容。这是由于不正确地关闭电源而不是正常关闭造成的,所以这里没什么大不了的。由于每次我都必须格式化卡、写入 Raspbian 映像、将其放入 Pi、启动开发板、扩展文件系统、重新安装和重新配置所有内容,我开始寻找更好的解决方案:
- 调整图像及其上的 FS 的大小前将其写入SD卡 -这链接完美地说明了如何添加图像(使用
dd
并/dev/zero
作为输入源)和调整ext4
(我认为它是Raspbian的EXT4(不包括用于启动组件的FAT32小分区))。这解决了必须使用扩展文件系统Raspberry 配置工具的功能基本上会占用剩余的未格式化空间,无论是 2GB、4GB、16GB、32GB 等。当然,增加映像也会增加将dd
其写入 SD 卡所需的时间,但它也允许下一步自定义,即 - 自定义已安装的软件 - 使用
chroot
或proot
(加qemu
)是可能的(如所见这里和这里)如果您正确安装了 Raspbian 的 FS 并chroot
在其中安装/构建您想要的任何内容。对于许多需要交叉编译的构建(例如 Pi 的 Qt)来说,这也是一个重要的步骤 - 您可以在 Pi 上本地编译内容,但这需要大量空间和时间。
这基本上就是我定制图像的方式。这里的问题是逆向操作所涉及的一组程序 - 获取 SD 卡的内容并以最佳方式将其存储在 PC 上。压缩当然是您可以做的重要事情之一,但这还不够。使用时dd
您可以将整个SD卡(包括空块)写入计算机或选择您想要的扇区大小和数量。第二种方法可以更好地利用存储,但需要仔细计算内容。如果你把事情缩短,你可能会得到一个损坏的 FS(哦,我不是已经见过很多次了……)。
我正在寻找一个与以下内容非常相似的解决方案克隆属优惠 - 您可以克隆只有真正有内容的块并因此转储其余部分缩小FS并能够在更小的空间内存储功能齐全的文件系统。去年我就这么做了,当时我帮助邻居将数据保存在 MacBook 上损坏的硬盘上。
示例:如果您安装了 Raspbian Jessie Lite,则只需大约。您的 SD 卡将使用 1.3GB。现在想象一下如果该卡是 32GB。当然,有时您可能想要格式化并使用剩余空间,但通常情况并非如此(至少对我来说)。所以如果我dd
盲目使用我基本上会创建一个32GB的图像文件。压缩将处理其中的大部分 GB 字节,但稍后将其写回 SD 卡以恢复 Raspbian 的某些先前状态将是一个非常非常漫长的过程。我还可以复制 FS(再次使用dd
)。但是,如果实际安装(所有文件)在该分区上只占用 600MB 左右怎么办?当我只需要 600MB 时,为什么要复制 1.3GB?如果我有一张带有 Raspbian 的 SD 卡,其中使用了配置工具的“扩展文件系统”功能,并且整个 SD 卡被格式化,即使n
它的 % 实际正在使用?
有什么想法如何以尽可能少的努力和修补来实现这一目标?
答案1
转储/恢复小 FAT 分区dd
(这是完全需要的),但使用e2image -a
(从e2fsprogs包)为主分区。对于恢复到闪存,该-c
选项似乎很有用(它只会覆盖目标上真正不同的内容)。
答案2
好吧,虽然没有直接回答你的问题,但这就是我为轻松恢复所做的事情
- 安装所有必需的软件包后,将 SD 卡内容添加到文件中
- 以最大压缩率对文件进行 bzip 并保留 gzip 压缩的数据文件作为备份
- 如果损坏,请使用 dd 恢复 Bunzip 后的备份文件