Loading

使用ArchWiki提供的方法恢复pacman本地数据库

0x01

​ 昨天在安装docker的时候,由于/分区空间不足,想通过软链接的方式把docker容器目录更改到/home分区,结果不小心

rm -rf /var/lib/

删掉了整个/var/lib文件夹,好多命令都失效了,后来通过复制live系统的同名文件夹恢复了一部分,但是存储在/var/lib/pacman/local下的已安装软件包数据库由于其独特性,无法全部恢复,造成的后果就是使用pacman安装软件包时会提示某些依赖库已存在。

0x02

​ 去社区看了下,arch中各种原因导致loacaldb损坏的案例不少见,但是像我这么蠢的原因应该找不出第二个😅(

​ 查找Archwiki上关于pacman 本地数据库损坏的修复方式,找到了这个条目:

https://wiki.archlinux.org/index.php/Pacman/Restore_local_database

通过读取pacman日志并进行过滤的方式恢复出已安装包的数据

​ 首先确认日志文件存在

cat /var/log/pacman.log

这一步如果找不到日志或者日志只有少数几行,建议使用archlinux社区中的软件包检测脚本。

使用shell awk语法编写过滤脚本

#!/bin/awk -f i = 3 {} $3 ~ /^\[[^]]+\]$/ { i = 4 } $i ~ /^(installed|upgraded)$/ { pkg[$(i+1)] = 1 next } $i == "removed" { pkg[$(i+1)] = 0 } END { for (i in pkg) if (pkg[i]) print i }

随后执行chmod +x xxx.awk并运行这个脚本./xxx.awk /var/log/pacman.log > pkglist.orig

文件pkglist.orig即包含了所有执行过安装操作的软件包

手动检查pkglist.orig删除来源非官方仓库的软件包,如自行编译构建的aur包等

接下来执行{ cat pkglist.orig; pacman -Slq; } | sort | uniq -d > pkglist过滤无法从仓库中安装的其他包

现在软件包列表已经基本完善,到这一步之后由于我使用的终端语法和bash稍有不同,后面的脚本内容总会因为不明原因报错。

于是使用文本编辑工具将pkglist中换行符替换成空格,并使用sudo pacman -S xxx --overwrite "*" 覆盖安装列表中全部软件包,这时pacman本地数据库已经基本恢复,已安装软件包均可正常更新和移除。

0x03

更改docker容器存储路径正确姿势:

​ 编辑/var/lib/systemd/system/docker.service的启动参数,使用--graph指定docker存储路径。

之后systemctl daemon-reload``systemctl restart docker

tips: linux使用rm命令误删除文件后第一选择是通过命令进程找回,如不慎关机重启建议使用数据恢复软件,以上两条皆无效时再考虑从其他主机scp或者复制文件到本机,本文中由于使用的操作系统为全新安装,无重要数据故采用第三种方式。

最后,为了保护数据安全,请经常备份重要数据并减少使用rm命令,改为转移文件到额外的中转目录中,并定期进行清理。

~


__EOF__

本文作者A
本文链接https://www.cnblogs.com/Codea/p/14030179.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Cr1m3rA  阅读(686)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示