问题描述

某业务系统厂商反馈,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_DATEecho "********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_DATEecho "********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

Linux系统磁盘分区报: Read-only file system无法写入数据处理相关推荐

  1. 3 什么是linux磁盘分区,3. Linux系统磁盘分区介绍

    1. 磁盘分区基本知识 1)磁盘在使用前一般要先分区(相当于建房子要分房间一样). 2)磁盘分区一般有主分区.扩展分区和逻辑分区之分.一块磁盘最多可以有4个主分区,其中一个主分区的位置可以用一个扩展分 ...

  2. linux常用分区工具,总结:Linux系统磁盘分区常用的工具

    对于新人来说,如何给linux系统磁盘分区?对于linux的分区通常可以使用fdisk命令工具和parted工具. 对于分区表通常有MBR分区表和GPT分区表 对于磁盘大小小于2T的磁盘,我们可以使用 ...

  3. Linux系统磁盘分区及挂载 - fdisk

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  4. linux系统磁盘分区查看,linux下磁盘查看和分区

    4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区 df命令 df输出磁盘文件系统使用情况: [root@centos ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev ...

  5. Linux系统磁盘分区

    一.查看本机磁盘情况命令: fdisk -l /dev/sd 使用Tab键先看本机有几个磁盘然后选择查看 二.三大存储类型 1.块存储:block(大小:8X512bytes) 2.对象存储 3.硬盘 ...

  6. linux挂载磁盘分区,Linux 新磁盘分区与挂载

    1.查看未分区的盘 2.新建分区 3.格式化分区(/dev/sdb1) 4.查看磁盘uuid [root@web-node1 ~]# blkid /dev/vdb1 /dev/vdb1: UUID=& ...

  7. linux查看磁盘分区恢复磁盘,在Linux,误删磁盘分区怎么恢复呢【转】

    在我们运维工作中,频繁的操作,可能命令写入错误,造成磁盘分区的删除,那么应该怎么办呢?怎么恢复磁盘分区呢? 一不小心删除了磁盘分区.如下图,删除了sda磁盘的第一个分区,为系统boot分区,系统如果重 ...

  8. linux 磁盘并发io,Linux系统 磁盘IO过高排查总结

    最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...

  9. Linux服务器重启失败,报错Readonly File system

    问题背景:linux 磁盘根分区太小,在对根目录进行扩容以后,从home目录抽取一块磁盘挂载到 /root 目录下,完成以后并没有修改 /etc/fstab 文件,导致系统开机以后继续寻找执行原来的 ...

最新文章

  1. 【Struts2框架】Struts2总结
  2. 。net面试题(2)
  3. 百合数c语言360问答,百合花的朵数代表的意义???
  4. 红帽JBoss BRMS和BPMS富客户端框架展示了与GWT / Errai / UberFire和AngularJS的多语言集成...
  5. HDU杭电2066 - 一个人的旅行(Dijkstra算法)
  6. android 布局完成,Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享...
  7. C程序设计语言现代方法11:指针
  8. 第1章-导言-知识点
  9. 拒绝版权流氓!阿里巴巴重磅发布免费商用字体
  10. [软件工程基础]结队项目——地铁
  11. 如何查看浏览器Cookie数据(以360为例)
  12. 将Spring Boot应用程序迁移到Java 9-模块
  13. There was a problem with the instance info replicator
  14. 二分思想(二分查找,整数二分,浮点数二分)
  15. 中高级Java开发应该要了解!我用2个月的时间破茧成蝶,醍醐灌顶!
  16. 温控仪C语言程序,模糊PID控制温控系统设计C语言程序代码
  17. CSS3_01_圆角_边框_渐变_字体
  18. 【python实现进制转换器】10进制整数向任意进制转换
  19. 反射内存交换机 LDF-2195 8口 兼容GE VMIC 5565 VMIC 5595
  20. 前端 JS 打印 WORD/EXCEL PDF

热门文章

  1. js9331模块板openwrt刷固件刷usb声卡插件
  2. 一些粗糙集的学习感悟
  3. javascript与flash函数相互交互
  4. [Linux] 输入命令ls -laF后的各字段含义解析
  5. 这11个网络工程师必备实用软件,别说老杨藏私不告诉你
  6. B轮融资成功,致谢今目标用户
  7. 移动APP数据分析能做什么
  8. nginx访问静态资源
  9. 两台计算机的ip地址怎么配置,电脑两个或多个IP地址设置方法
  10. AliyunIoTSDK库使用问题和阿里云错误码解决