WRITING LOG · 03

技术博客

记录技术实践、问题排查和持续成长,把每一次解决问题的过程留下来。

WORKSPACE

文章阅读

linux系统抢救(deepin22.x)续
2025-12-29
早前deepin安装软件的时候报错,随后输入什么命令都出现“段错误”(Segmentation Fault)提示。重启电脑黑屏无法进入系统,解决方案是用u盘PE急救,利用diskgenius软件读取linux系统分区数据按日期排序删除出错那段时间新增的文件。后来发现是apt install安装软件后会执行ldconfig生成运行库缓存,其生成的缓存文件在/etc/ld.so.cache。问题在于因为库文件有错误导致生成的库缓存也有问题,直接后果就是除了echo命令几乎任何命令都会报错,重启系统直接黑屏。
因为rm命令、sudo、su等命令都不可用,文件管理器也无法打开,常规手段无法删除/etc/ld.so.cache,只能通过外部系统来删。但删除后问题并没有彻底解决。后来发现如果root权限的终端没有关闭的话可以通过echo '' > /etc/ld.so.cache 清空缓存文件来临时解决。反复排查以后知道是前段时间自行编译升级libc核心库的锅。最后通过删除删除 /usr/local/lib/ld-2.29.so及其他/usr/local/lib下跟2.29.so相关的库后重新执行ldconfig问题终于完美解决。
可是依赖高版本库的软件无法正常运行了,问了AI让我另外编译一份高版本库放在其他的目录,然后通过.sh文件每次运行的时候临时指定要运行的软件跑高版本库对应的目录。
linux设计哲学是所有软件共享libc库避免臃肿,问题在于不同软件需要的库版本差异很大而且可能不兼容,容易陷入依赖地狱。ubuntu为了解决这个问题强推snap,让各个软件自己带自己需要的依赖,被一些开发者喷臃肿。我觉得只要适合自己用就行,linux本就是自由的。
docker容器修改时区
2025-12-02
同事找我说docker容器里跑的服务时区不太对,我用date命令看了下时间确实是UTC零时区,外面的宿主机是东八区的没问题。
在容器内尝试了timedatectl set-timezone Asia/Shanghai提示timedatectl命令找不到。
在容器内尝试了cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime提示目录找不到。
直接设置时间怕退出命令行以后再出问题,还得改配置文件。查了下docker修改容器内时区的方法给出的都是用Dockerfile或者重启容器的时候设置时区。显然我不想重新run一遍容器于是打算用宿主机的时区配置覆盖容器里的配置,因为我容器镜像本来就基于宿主机相同版本linux。
#在宿主机执行docker命令
docker stop 我的容器名称
docker cp /usr/share/zoneinfo/Asia/Shanghai 我的容器名称:/etc/localtime
docker start 我的容器名称
操作完后启动服务,一切正常了!
linux系统抢救(deepin22.x)
2025-12-02
今天快下班的时候把公司电脑系统搞崩溃了。
起因是我想装个绘制2D像素风工具aesprite,从官网下载的试用版只能画不能保存于是想着去GitHub下载源码自己编译。结果就是编译脚本提示找不到cmake,鬼使神差下sudo apt install cmake接下来就悲剧了,命令行无论输入什么命令都提示“段错误”。慌乱之下重启了系统紧接着就开不了机了无法正常进入系统,重启进入修复启动项目也是一样,此时心里咯噔一下怕是要重装系统了。
接下来问同事要了U盘PE启动打算从deepin 镜像文件进Linux 看看能修复就修复,至少抢救些文件回来,实在不能修复就只能重装。结果deepin22貌似只能从制作好的U盘启动,无奈进win10PE然后用分区工具进去按时间排序找到最近修改过的文件直接干掉,不能干掉的就用之前的备份替换。重启后终于进系统了。
梳理了一下抢救顺序:
1、尝试强制重启deepin.
2、尝试从开机启动项的恢复模式启动。
3、用U盘PE进入win10PE,尝试先抢救一些关键文件,并且尝试从直接硬盘引导系统。
4、用分区工具diskgenius进入linux分区,按最新时间排序找出系统崩溃时修改的文件,能删的就删掉,不能删的就尝试替换。
显然第四步很关键,root目录下有个两个文件被修改了我用之前备份的文件覆盖后重启抢救成功!