24 年来,我担任自己的系统管理员,从未对备份进行过 dd 分区级恢复 - 现在我第一次尝试这样做却失败了。我读过的所有内容都暗示这应该是直截了当的,但我发现并非如此。
由于需要升级我的 kubuntu-14.04(32 位),我两周前添加了 2 个不同的 64 位发行版来检查它们。为此,我使用 gparted 缩小了我原来的操作系统的 3 个分区(/home、/opt、/),以便在它们上面腾出空间 - 一切顺利,所有 3 个发行版都运行了 2 周。
仍在使用我原来的操作系统,昨天,出于某些错误的原因,我决定稍微增加我的 /opt (sda6) 的大小,同时使用 gparted 减少我的 /home (sda5)。为了安全起见,我对所有 3 个分区进行了 dd 备份,并对扩展分区进行了 sfdisk 备份(也对我的 MBR 进行了 dd 备份,但这不应该改变)。但在调整大小后,在操作系统登录屏幕后启动操作系统失败。
由于只更改了 sda5 和 sda6(/home 和 /opt),我首先使用 sfdisk 恢复扩展分区,然后使用 dd 恢复这些分区。但在登录屏幕后,启动再次失败。因此,决定恢复 /(sda7)的 dd 备份,尽管这不应该改变。(所有 dd 命令都使用 bs=512,并且 dd 文件大小与分配的分区表扇区大小匹配)但失败了。检查系统日志,我看到末尾有“kernel ...Xsession ... segfault ... in bash ...”。
再次运行 gparted,它报告“/dev/sda7 上的输入/输出错误”(/)
由于没有什么可失去的,我尝试恢复超级块,使用 mke2fs 查找备份位置 - 给出了 10 个值。但是在 e2fsck 中使用第一个值时,出现了“尝试打开 /dev/sda7 时输出错误”。
因此,我决定看看我能在这里找到什么智慧,因为我的系统管理员背景很薄弱——我只在需要时才做这件事,而且非常零散。FWIW,我确实有一个在添加发行版之前制作的 / 目录的 tarball,并且正在考虑将其解压到空的 sda7,因为从那时起我没有对 / 进行任何重大更改。也许以某种方式恢复超级块是一种替代方法。但想看看这里是否有人有更好的想法!