linux运维工作常见问题及处理方法(如何快速解决Linux文件系统中的常见故障)
— 不定时重启故障排查 —
事件基本描述:笔者之前工作过的互联网公司,曾经生产环境的服务器,底层使用KVM做了虚拟化,物理机为IBM的M4和M5,具体型号还需要去IBM官方网站查询,内存为256GB,硬盘采用SATA7200,RAID10级别。
事件表现:服务器的物理机会不定时重启,每次重启都会影响其上面的所有虚拟机的运行,进而影响业务。
追踪和排查:笔者入职不久后便开始对此故障进行追踪和排查,在3~6个月的时间里,从各个方面进行排查,排查方式和思路如下图所示。
排查结果:最终使用dmesg指令找到如下的一条报错记录。
End of file while reading data:
Input/output error
解决方案:
(1)升级IBM服务器网卡驱动
(2)引入DELL服务器测试(DELL服务器均未出现服务器不定时重启现象,直到现在)
— 文件系统只读解决方案 —
生产服务器经常会遇到系统文件变为只读的事件,那么该如何进行修复呢?
1.重启系统看是否可以自动修复。重新启动操作系统,让系统自动修复受损的文件系统,看是否可以自动修复。
2.使用如下指令进行自动修复。
fsck -y /dev/sda1
用”-y”选项来执行该命令对硬盘进行检查和修复。使用如下指令添加参数:
fsck -y -C -t ext3 /dev/sda1
一般情况下修复完成后,所有文件移动到 lost found目录,文件名会被改变,-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复。
如果fsck修复完成后,启动系统依然报错,可以使用如下指令查看分区结构:查看ro挂载的分区,如果发现有ro,就重新mount。
umount /dev/sda1
mount /dev/sda1 /mnt
如果发现有提示“device is busy”,找到是什么进程使得他busy。
fuser -m /boot
##将会显示使用这个模块的pid
fuser -mk /boot
##将会直接kill那个pid
然后重新使用mount指令挂载即可。直接remount。
注意事项:手动使用fsck修复文件系统时,要将分区卸载,然后备份重要数据,以免在修复过程中造成数据丢失和损坏。
— 非正常断电导致数据损坏 —先查看服务器基础环境信息,如下代码查看服务器有几块磁盘。
[root@disk-test ~]#cat /proc/partitions major minor #blocks name 8 0 10485760 sda 8 1 512000 sda1 8 2 9972736 sda2 8 16 2097152 sdb 253 0 8921088 dm-0 253 1 1048576 dm-1
然后,模拟超级块损坏。用dd命令将sdb磁盘第一个block的内容抹除。
[root@disk-test ~]#dd if=/dev/zero of=/dev/sdb bs=1 count=8192 8192 0 records in 8192 0 records out 8192 bytes (8.2 kB) copied, 0.042161 s, 194 kB/s [root@disk-test ~]#dumpe2fs /dev/sdb dumpe2fs 1.41.12 (17-May-2010) dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb Couldn't find valid filesystem superblock.
当尝试打开 /dev/sdb 时找不到有效的文件系统超级块。
[root@disk-test ~]#tune2fs -l /dev/sdb tune2fs 1.41.12 (17-May-2010) tune2fs: Bad magic number in super-block while trying to open /dev/sdb Couldn't find valid filesystem superblock.
和上面代码拨错一模一样,系统找不到磁盘超级块信息。
这时候我们根本无法从dumpe2fs和tune2fs看到Backup superblock的位置,都找不到superblock备份的位置该怎么恢复主superblock呢 注意下面的命令都是针对ext类文件系统的,其它文件系统不适用 先要找到superblock备份的几个位置,这需要利用mke2fs这个命令 mke2fs:create an ext2/ext3/ext4 filesystem mke2fs这个命令 mke2fs -n 设备名 -n 选项 ,mke2fs 不是真的在设备上创建文件系统,它只是模拟这个过程并显示。
最后,修复损坏数据。利用下面的命令就可以找到超级块的备份位置了。然后我们就可以再利用系统提供的另一个磁盘命令e2fsck命令进行恢复,它有一个-b选项。
由于我的操作系统是ext4格式的,也可以用fsck.ext4 -b 32768 /dev/sdb,效果一样。
[root@disk-test ~]#mke2fs -n /dev/sdb mke2fs 1.41.12 (17-May-2010) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912
— 文件被删除磁盘没释放空间 —某研发人员:能帮忙看一下这台机器的空间为什么没有了吗 。??原来是applog这个目录是日志文件太多,现在日志清楚了 这个文件没有了现在还是这样。
笔者的回答:文件被清除后,还有进程在维持,需重启相关进程才可生效,如下图所示。
— 解决运维问题的两大能力 —
1.打下扎实的基础。学习要掌握Linux操作系统分区最佳经验分享、日常运维中磁盘和文件管理的方方面面,如,文件系统故障如何处理?服务器运行过程中如何对硬件进行监控,一旦遇到问题,如何排查?
2.形成资源圈。学习的过程,是提高的过程,更是提高自我认知的过程,此时,若有兴趣爱好者一同学习和探讨,岂不快哉?
关注安徽思恒信息科技有限公司,了解更多技术内容……
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com