恢复linux服务器 segmentation fault错误

 

开机启动linux的时候就报下面的错误:

init:version 2.84 booting                        ok

welcome to /etc/rc.d/rc.sysinit: line 70 :  37 segmentation  fault   

LC_ALL=C grep -q "red hat"  /etc/redhat-release

red hat linux

press 'i' to enter interactive startup

mounting proc filesystem:                       failed

/etc/rc.d/rc.sysinit: line 90:  44 segmentation fault     LC_ALL=C grep -q/initrd/proc/mounts

configuring kernel parameters: error:/ proc must be mounter to mount /proc at boot you need an /etc/fstab line like :

/proc /proc  proc   defaults

in the meantime, mount /proc /proc -t proc              failed

setting clock   .......                                              ok

loading default keymap(us)                                     ok

setting hostname                                                  ok

/etc/rc.d/rc.sysinit: line 182: 68 segmentation fault    LC_ALL=C grep -iq "nousb" /proc//cmdline 2>;/dev/null

/etc/rc.d/rc.sysinit :line 182: 69 segmentation fault    LC_ALL=C grep -q "usb" /proc/device 2 >;/dev/null

 

然后就停在这里不动了.

第一次见到这种问题,心里很没底啊!没有办法,只能到百度、Google上碰碰运气。

通过一天多的整理,还是终于有希望了;

进入到rescue模式下面:

用Redhat Linux Rescue光盘启动,在boot后面输入:linux rescue


 
在问您是否配置网络的时,选择NO.下一步的时候选择Continue


 
 
 
 
bash2.5$chroot /mnt/sysimage

bash2.5$cat /etc/rc.d/rc.sysinit  (看了一下没有什么不对的,其实我也不会看,后来直接从另外一台机器copy过来覆盖掉原来的了)

网上说把/etc/fstab目录下面的proc这一行注释掉了,我照做了,再重启,可是问题依旧。后来有论坛上说有可能改了/sbin和/bin目录下面的命令。我也觉得奇怪,我运行mount、ls等命令,总是报这样的错:segmentation fault。

心底更没底了,本来想着从另一台机器上通过U盘copy文件过来的,现在连mount这个挂载命令也用不了了,天要灭我不成?

没有办法,把mount命令的软件包再安装一次:

bash2.5$rpm –Uvh  – –force  – –nodeps  – –replacepkgs  mount-2.11y-9.i386.rpm

(假如您开始chroot了,请先exit出来,要不有可能mount不上的)

升级安装,强制安装,不检查文件依赖关系,修复安装,几个参数一起用。OK,装上了,mount命令也可以用了。

又有一个问题,U盘插进去了,可以无法识别。反复几次后终于得出经验:插入U盘让它随系统重启,再进入的修复模式就识别了。

从另一台正常的服务器上cp /sbin和/bin目录,覆盖他原来的/sbin和/bin目录下面的命令。注意,这里不要整个目录覆盖,只复制/sbin,/bin里面的文件,替换原来有的文件,

$mkdir /mnt/usb

bash2.5$mount /dev/sda1 /mnt/usb   (假如您开始chroot了,请先exit出来,要不mount的时候有可能mount不上)

bash2.5$cp /mnt/usb/sbin/*   /mnt/sysimage/sbin

bash2.5$cp /mnt/usb/bin/*   /mnt/sysimage/bin

bash2.5$cp /mnt/usb/{rc,rc.local,rc.sysinit}  /mnt/sysimage/etc/rc.d   (把rc、rc.local、rc.sysinit也同时copy到/etc/rc.d/下面替换原来有的文件)

然后重启机器终于看到一串串绿色的OK字符了,等进入到登录界面,要来登录口令,进入到Linux系统,重要的文件还在,好好的,我的心才松了下来

文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/2008723/133713.html

### 诊断和修复 Linux 服务器上的 Segmentation Fault 错误 #### 使用 GDB 调试器定位问题 对于出现 `Segmentation fault` 的程序,最有效的排查方式之一是利用 GNU Debugger (GDB)[^2]。启动 GDB 并加载出现问题的应用程序: ```bash gdb ./your_program ``` 运行该程序并让其自然触发崩溃,在此之后输入 backtrace 命令来获取调用栈信息: ```bash (gdb) run ... Program received signal SIGSEGV, Segmentation fault. 0x... in function_name () from /path/to/library (gdb) bt full ``` 这一步骤能够帮助识别具体哪个函数内部发生了非法访问。 #### 编译时增加调试信息 为了更方便地理解 GDB 输出的结果,在编译源码期间应当加入 `-g` 参数以便包含额外的符号表数据: ```bash gcc -o your_program source.c -g ``` 这样可以获得更加详细的回溯路径,有助于精确定位到引发异常的具体位置。 #### 利用 dmesg 查看内核日志 如果进程已经结束,则可通过 `dmesg` 工具读取最近一次系统消息缓冲区内的记录,特别是那些由操作系统捕获到的段错误事件详情[^3]: ```bash dmesg | grep 'segfault' ``` 上述命令会筛选出所有涉及段错误的日志条目,其中包含了诸如违规地址、指令指针等关键参数,这些都对后续分析至关重要。 #### 检查动态链接库依赖关系 有时段错误可能是由于缺少必要的共享对象或者是版本不匹配所引起的。此时可以借助 `ldd` 来验证目标二进制文件所需的外部资源是否存在并且正确无误[^1]: ```bash ldd ./your_program ``` 一旦发现缺失项或是冲突情况,就需要重新安装相应的包或者调整环境配置直至满足需求为止。 #### 文件恢复与重装必要组件 针对因意外删除重要标准 C 库(`libc`)而造成的严重后果——比如无法正常引导的情况,可以从其他相同架构且同版本的操作系统实例复制一份完整的副本过来替换;亦或是采用 Live CD/USB 方式进入救援模式来进行修复工作,按照官方文档指导完成 glibc 或者整个基础软件集合的更新操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值