首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过/缩短磁盘上的分区表读取

跳过/缩短磁盘上的分区表读取
EN

Unix & Linux用户
提问于 2020-04-16 07:36:05
回答 1查看 223关注 0票数 0

我有一个坏了的硬盘,里面有很多损坏的块。我用ddrescue进行了相当成功的救援(我在99,5 %)。不幸的是:

  • 由于某些原因,有时(但并非总是)当ddrescue击中严重损坏的部分时,磁盘会“疯狂”,或者只返回磁盘其余部分的读取错误,或者报告未对齐的读取错误并终止;计算机需要重新启动,这些部分可以再次读取。
  • 包含分区表的第一个块被破坏,当内核一次又一次地尝试读取分区表时,系统启动大约需要一个小时。

有趣的是:我根本不需要读分区表,我正在执行“整个磁盘”的救援。

所以有没有办法告诉内核

  • 不读取分区表或
  • 限制重试的次数?

系统启动加速将显著提高恢复速度,因为在此阶段,系统启动一个小时,然后继续恢复几分钟,然后由于上面提到的一个错误而重新启动(我已经通过启动脚本实现了自动化)。

dmesg输出:https://cloud.oprendek.sk/index.php/s/Mk8figkaspD8xRE

EN

回答 1

Unix & Linux用户

发布于 2020-04-16 08:07:19

我觉得我以前回答过但现在找不到.

如果您的问题不仅存在于初始启动期间,而且在将违规驱动器热插拔到已经运行的系统时,那么您或多或少是运气不佳。

在完整的Linux安装中,每次连接分区、UUID和其他元数据时,您都无法阻止驱动器被扫描。内核检测分区表,udev创建磁盘/by-uuid链接,等等。

然而,分区表支持在内核中是可选的(CONFIG_*_PARTITION*MSDOSEFIMAC,.)之一。因此,您可以编译一个自定义内核,它不支持任何/禁用所有内核,然后(为了防止UUID扫描等等)使用它的环境只有一个最小的initramfs环境,其中只包含dd救援。

这也禁止您访问任何其他驱动器上的分区,除非您使用losetup和偏移量/大小分隔符,或者设备映射器(dmsetup)来模拟分区。因此,您必须从整体上解决缺少分区的问题。

  • 限制重试的次数?

不确定它是否做任何重试,您可以做的是设置超时(在/sys/block/*/device/timeouts中),只有当驱动器根本没有响应时,这才会有用,我猜。

对于内置的不可移动设备,您也可以使用libata.force=<port.device>:disable内核参数完全禁用它。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/580407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档