Linux系统磁盘分区报: Read

您所在的位置:网站首页 磁盘无法写入文件 Linux系统磁盘分区报: Read

Linux系统磁盘分区报: Read

2024-03-10 22:07| 来源: 网络整理| 查看: 265

问题描述

某业务系统厂商反馈,docker系统挂载目录所在云硬盘无法写入文件,相关业务数据无法保存,视频录像上传异常;经验证,在故障目录中,手动创建某文件报: Read-only file system写保护错误;

在这里插入图片描述

问题分析

1) 查看当前磁盘情况,发现磁盘权限可读写: 在这里插入图片描述 2)云管平台查看确认对应云主机的存储挂载情况,云硬盘挂载正常且独享: 在这里插入图片描述 3)查看挂载点情况,可看到挂载点当前文件系统状态显示为RO,即只读状态: 在这里插入图片描述 在这里插入图片描述

4)因当前挂载点为docker服务运行,执行:mount -o remount -rw /var/lib/docker //重新挂载为已经挂载了的文件系统(以读写权限挂载) 在这里插入图片描述 提示“device is busy”,找到是什么进程占用。可执行: fuser -m /mnt/data 将会显示使用这个模块的pid fuser -mk /mnt/data 将会直接kill那个pid 5 )停止docker服务 /etc/init.d/docker stop

6)重新挂载依然报错,先卸载再重新挂载后正常: 在这里插入图片描述 7)日志查看 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 超级块(Super-block)损坏。超级块是文件系统的核心"档案",它记录了该文件系统的类型、大小、空闲磁盘块等信息。当文件系统的超级块数据损坏是,Linux将无法识别该文件系统,挂载时会出现"you must specify the filesystem type"的提示而不能正常使用。修复时,可以先用dd命令将损坏的分区进行备份;如:dd if=/dev/vdc1 of=/dev/vde(备份磁盘)

另外,可以实时监控dmesg日志输出,执行:watch “dmesg | tail -20” 或tail -f /var/log/dmesg

修复的话,利用fsck检查后,按提示e2fsck,修复;注意:fsck 扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行

8)造成上述问题的原因主要有以下几个方面:

1>非正常关机后导致文件系统受损,当文件系统自身的校验机制发现文件系统存在问题时,为避免文件系统受到进一步的损坏,一般把文件系统设置为只读。;可进入单用户模式后,执行 fsck.ext4 -y /dev/vdc1,修复完成之后可以通过命令“shutdown -r now" reboot重启服务器;注:如果扫描正常运行中的系统,可能会造成系统文件损坏。 WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage。

2>云硬盘本身故障(如底层raid,HBA,背板等硬件,网络故障等),出现IO错误时会导致写保护,云管平台确认云硬盘状态正常,一般没事,另外,重新挂载后还是只读,联系厂商检查云硬盘/如有备用可用备用替换;

3>磁盘inode资源耗尽,也会导致分区只读,分区写满后,也会出现只读故障。对于I节点耗尽情况,找到该分区中占用大量i节点的细小文件,并进行转移或者删除即可。对于多用户公用的文件系统,建议为相关用户设置磁盘限额(包括文件数量和磁盘空间两方面)。

4>使用LVM的linux,还可能由于操作系统升级时的bug导致文件系统变成只读。

5>本次故障原由:由于磁盘fsck检查异常,导致系统挂载以只读模式挂载根分区。如果fsck检查后以只读模式挂载/分区,很可能fsck已经无法修复分区了;硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并可能造成频繁死机或数据丢失的后果。所以必要时应该对磁盘进行定期检测,检查是否存在坏道。可以使用badblocks命令进行磁盘的坏道情况检测:

#badblocks -sv /dev/vdc1 //其中,-s 显示进度信息;-v 显示详情,块大小为固定的4KB,即8个扇区;超级块(Superblock)起始位置在1024字节处,即2号扇区,大小为2个扇区。当发现硬盘中存在坏道时,应尽快停止系统中的应用服务、备份相关数据,必要时立即关闭系统以防止磁盘坏道进一步扩散,导致更大的损失。对于存在坏道的硬盘设备,应使用其他完好的硬盘进行替换。 在这里插入图片描述 6>第三方工具监测磁盘坏道: Smartmontools 工具扫描坏道(自我监控分析报告技术Self-Monitoring, Analysis and Reporting Technology)

工具安装:yum install smartmontools -y //apt-get install smartmontools

附录:磁盘几个概念

Ext4文件系统的整体结构及第一个块组的具体结构: 在这里插入图片描述 超级块(Superblock):用于存储文件系统的配置参数(如块大小、总块数、i-节点数)和动态信息(当前空闲块数和i-节点数)。Ext4文件系统的超级块(Superblock)开始于1024字节处,即2号扇区。

块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组内的结构都是大致相同的。

块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点位图及i-节点表的地址等信息。

i节点:描述文件的时间信息、大小、块指针等信息。

块组描述符和超级块在块中的位置:当块大小为2个扇区时,0号块是引导程序或者保留块,超级块起始于1号块。当块大小为4个扇区时,引导程序或者保留块位于0号块的前两个扇区,超级块位于0号块的后两个扇区。当块大小为8个扇区时,引导程序或者保留块位于0号块的0-1号扇区,超级块位于0号块的2-3号扇区。

附录2: fsck 命令

用法:fsck options drives //不应该用 fsck 检查已挂载的磁盘,这很可能会对磁盘造成永久性的伤害。开始使用 fsck 之前,请先卸载文件系统挂载点

参数: -p 自动修复(不询问) -n 不对文件系统做出改动 -y 对所有问题都回答 “yes” -c 检查所有的坏块并将之添加到坏块列表中 -f 即使文件系统标记为 clean 也强制进行检查 -v 输出详细信息 -b superblock 使用替代的超级块 -B blocksize 指定超级块的块大小 -j external_journal 指定外部日志的位置 -l bad_blocks_file 添加到指定的坏块列表(文件) -L bad_blocks_file 指定坏块列表(文件) -A :一次性检查所有分区上的文件系统错误;若要禁止对根文件系统进行检查可以使用选项 -R

运行 fsck 时,可能出错并返回一些错误码。下面是一些常见的错误及其意义:

0 - 没有错误 1 - 修复了一些文件系统错误 2 - 系统需要被重启 4 - 文件系统错误未被修复 8 - 操作错 16 - 使用或语法错 32 - fsck 被用户取消 128 - 共享库出错

示例1:fsck -nf /dev/vdc1 //检查文件系统错误但并不进行修复

示例2:fsck-a /dev/vdc1 //使用参数-a 进行一致性检查并自动修复这些错误,可用-y 替代 -a,-y将更正应用于任何检测到的文件系统损坏

示例3:fsck -t ext4 /dev/vdc1 //检查指定文件系统类型的分区

示例4:fsck -M /dev/vdc1 //只在卸载的磁盘上进行一致性检查

附录3:linux系统健康检查脚本(转载) #!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo "Must be logged on as root to run this script." exit fi CHECK_DATE=`date +%F` echo "Running script at `date`" CHECK_REPORT_PATH=/tmp/getinfo ls -d $CHECK_REPORT_PATH if [ $? -gt 0 ] then mkdir $CHECK_REPORT_PATH fi chmod -R 777 $CHECK_REPORT_PATH CURRENT_DIR=`pwd` echo "#################### Check Start ####################" HOST=`hostname` echo "********Hostname Check**********" >$CHECK_REPORT_PATH/Report_$CHECK_DATE echo "Hostname is $HOSTNAME" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #系统版本检查 echo "********OS Level**********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE uname -a >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #系统日志检查 echo "********System log*******" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE cat /var/log/messages >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查软件安装情况 echo "********Yum*******" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE history | grep yum && history | grep rpm >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #文件系统检查 echo "********File System**********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE df -h >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo "over 75%" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE df -h |grep '[7-9][5-9]%'>>$CHECK_REPORT_PATH/Report_$CHECK_DATE #网络地址配置信息 echo "********System /etc/hosts********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE cat /etc/hosts >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #查看内存使用情况 echo "**********mem check************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE free >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE vmstat >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #查看磁盘读写情况 echo "********io check**********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE iostat >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #网络检查 echo "********network route check**********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE netstat -rn >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo "********network check**********" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE ifconfig -a >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #环境变量检查 echo "********env info****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE env >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #用户组检查 echo "********group info****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE cat /etc/group >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #用户密码检查 echo "********user info****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE cat /etc/passwd >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查操作系统定时任务 echo "********System crontab info****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE crontab -l >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查系统裸设备属主 echo "******** RAW****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE ls -l /dev/sd* >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查关机重启 echo "********REBOOT****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE last | grep reboot && last | grep shutdown >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #登录用户检查及远程登录 echo "********USER****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE who && who | wc -l >>$CHECK_REPORT_PATH/Report_$CHECK_DATE netstat -anp | grep 22 >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #系统运行时间及平均负载 echo "********Uptime****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE uptime >>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查系统占用cpu,内存,磁盘io最大的进程 echo "********Dstat cpu****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE dstat -c -y -l --proc-count --top-cpu 2 3 >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo "********Dstat mem****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE dstat -g -l -m -s --top-mem 2 3 >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE echo "********Dstat io****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE dstat --top-io 2 3 >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #进程总数 echo "********Dstat proc****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE dstat --proc-count 3 3 >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查selinux echo "********SELINUX****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE getenforce >> $CHECK_REPORT_PATH/Report_$CHECK_DATE echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE #检查用户错误登录次数 echo "********LOGIN****************" >>$CHECK_REPORT_PATH/Report_$CHECK_DATE pam_tally2 -u readonly #pam_tally2 -u readonly -r 重置用户错误登录次数 echo -e "----------------------------------------------------\n">>$CHECK_REPORT_PATH/Report_$CHECK_DATE 

转载于:https://www.cnblogs.com/The-day-of-the-wind/p/10894197.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3