我正在从电源故障导致的磁盘损坏中恢复过来。所有配置和非存储库文件都已备份,并且我有一个已安装软件包的列表,因此我可以重新开始这次但我正在寻找更好的方法,以防下次我无法承受那么多的停机时间。
我知道 apt 会保留已安装软件包的 deb 文件。升级时,apt 有时会询问我是否要保留我的配置或使用新配置,因此 apt 知道配置和二进制文件之间的区别,以及安装后修改了哪些内容(哈希?)。
有谁知道如何检查已安装的二进制文件与 deb 的一致性,而无需花费磁盘写入来提取 deb?适用于一个给定软件包的解决方案可以适用于循环遍历apt-mark
已安装软件包的列表,并将失败的软件包输入apt install --reinstall
;我只需要验证逻辑。
我使用的是 apt 1.4.9 和 dpkg-deb 1.18.25。虽然我认为其他细节并不重要,但我在 armhf(raspberry pi zero w)上运行 raspian。
答案1
终于找到了。dpkg -V
,它使用存储的 md5sum。过滤掉带有 ac 标志的,因为它们是配置。这是我得到的:
sudo dpkg -V | egrep --color=auto '^.{9} ' | rev | cut -d\ -f 1 | rev | xargs dpkg-query -S | cut -d: -f1 | sort -u > corrupted_packages.txt
一旦完成,我计划做类似的事情sudo xargs apt install --reinstall <corrupted_packages.txt