Linux ls: xxx .: Input/output error 错误问题 及 fsck源码下载

项目开发中,长时间对flash分区进行open和close操作后,出现系统命令无法执行的问题。可能是硬件或文件系统损坏,可通过fsck工具修复。本文给出fsck源码下载链接及编译指导,还提醒使用fsck工具需慎重,并提供相关注意事项博客链接。

       在最近项目开发中,由于经常需要访问flash中的某个分区的问题,在长时间的open以及close后,出现了对应操作目录下ls、ll等系统命令不能执行且错误问题,一开始以为是该分区flash硬件损坏了,导致文件节点丢失、文件错误而不能访问。

对于: xxx .: Input/output error 可能是硬件损坏,也可能是文件系统损坏,我们可以通过一下命令进行查看

# dmesg |grep err 

后来在网上问题检索时发现可以通过fsck工具进行分区修复,于是对Input/output error 文件夹分区进行修复,发现arm板上的文件系统没有fsck.ext4工具。

fsck -t ext4 /dev/mmcblk0p18 
fsck (busybox 1.26.2, 2018-03-06 20:26:03 CST)
fsck: fsck.ext4: No such file or directory

在找fsck.ext4工具源码时,费了一段时间,所以想写本blog对此进行记录,方便后来者在遇到Input/output error 问题时能快速的找到该工具并进行修复。下面将给出该工具的源码下载链接以及编译指导说明。

fsck源码github链接:https://github.com/tytso/e2fsprogs

下载源码后按照如下步骤进行:

第一步:创建build目录
# mkdir build
# cd build

第二步:配置编译选项
1、在配置编译选项时,可通过如下命令获取帮助
# ../configure --help
2、如果是需要交叉工具编译则指定交叉工具链 及 安装目录
# ../configure --host=arm cc=arm-linux-gcc --prefix=/usr/local/_install

第三步:编译
# make     /*在build目录下执行make,则生成的中间文件等都会在build目录下*/

第四步:安装
# sudo make install  /*执行该命令后,其会将工具安装在我们指定的/usr/local/_install的目录下*/

其安装后的目录结构如下:

在sbin/目录下有各种工具,包括fsck、fsck.ext3、fsck.ext4等等,将这些工具拷贝到开发板并将其路径export 一下即可使用。

以下是修复一个分区的示例:

第一步:首先需要将所需要修复的分区解挂
# umount /dev/mmcmmcblk0p18

第二步:使用fsck命令对该分区进行修复(-t 为指定需要修复的文件系统类型,fsck会自动调用fsck.ext4对分区进行修复)
# fsck -t ext4 /dev/mmcblk0p18

以上是本次blog想记录的内容,包括问题出现分析以及使用fsck工具尝试对文件系统损坏的分区进行修复记录,但是在问题查找的过程中,有大佬强调对于fsck工具的使用需要慎重,下面是其中的一篇blog,可以查阅了解一下。

关于fsck使用注意事项:http://blog.sina.com.cn/s/blog_406a91a00102xaq8.html

 

### 问题分析 在使用 `ls` 命令时出现的 `Input/output error` 通常与文件系统或硬件相关。以下是可能导致该错误的原因及解决方案: 1. **文件系统损坏**:文件系统可能存在损坏,需要检查和修复。 2. **磁盘错误**:硬盘可能存在物理损坏或坏扇区。 3. **权限问题**:当前用户可能没有足够的权限访问某些目录或文件。 4. **挂载问题**:如果目标路径位于挂载点,挂载可能已损坏或不正确。 5. **驱动或内核模块问题**:某些情况下,内核模块或驱动程序可能无法正确处理特定设备。 以下提供详细的排查和解决方法。 --- ### 解决方案 #### 1. 检查文件系统状态 可以使用 `fsck` 工具检查并修复文件系统。例如: ```bash sudo fsck /dev/sdX ``` 其中 `/dev/sdX` 是出现问题的分区设备名[^1]。 #### 2. 检查磁盘健康状况 使用 `smartctl` 工具检测硬盘健康状况: ```bash sudo smartctl -a /dev/sdX ``` 如果发现坏扇区或其他硬件问题,可能需要更换硬盘[^2]。 #### 3. 验证权限设置 确保当前用户具有足够的权限访问目标目录。可以通过以下命令更改权限: ```bash sudo chmod 755 /path/to/directory ``` 或者更改目录的所有者: ```bash sudo chown user:group /path/to/directory ``` #### 4. 检查挂载点 如果目标路径是一个挂载点,确认挂载是否正常: ```bash mount | grep /path/to/mountpoint ``` 如果挂载有问题,可以尝试重新挂载: ```bash sudo umount /path/to/mountpoint sudo mount /path/to/mountpoint ``` #### 5. 更新驱动或内核模块 如果问题是由于驱动或内核模块导致,可以尝试更新内核或安装最新的驱动程序。例如: ```bash sudo apt update && sudo apt upgrade ``` 或者手动安装所需的内核模块[^3]。 --- ### 示例代码 以下是一个综合脚本,用于自动化检查和修复常见问题: ```bash #!/bin/bash # 检查文件系统 echo "Checking filesystem..." sudo fsck /dev/sdX # 检查磁盘健康 echo "Checking disk health..." sudo smartctl -a /dev/sdX # 检查挂载点 echo "Checking mount points..." mount | grep /path/to/mountpoint # 修复权限 echo "Fixing permissions..." sudo chmod 755 /path/to/directory sudo chown user:group /path/to/directory ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值