Ubuntu下无法删除文件

问题:
repo sync更新代码的时候,发现更新错了,ctrl+c强制退出,后面要将整个工程目录XXX/删掉,报了如下的错误:

1
rm: 无法删除 "/work2/XXX/.repo/projects/vendor/imx/genivi.git/refs/tags/xxx_v1/master/usb_test" : 输入/输出错误

dmesg查看到内核有如下提示:

1
EXT4-fs error (device sdb1): ext4_lookup:1584: inode #23997360: comm rm: deleted inode referenced: 23998390

看着情况,有可能是文件系统出问题了,本文主要讲述如何解决这个问题。


解决办法

参照 https://unix.stackexchange.com/questions/191370/ext4-lookup-deleted-inode-referenced-error-in-var-log-messages?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
怀疑是文件系统出了问题,采用e2fsck进行修复。先将/dev/sdb1 umount掉,然后执行#sudo e2fsck -y /dev/sdb1命令进行修复,输出如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
victor@victor:~$ sudo e2fsck -y /dev/sdb1 
e2fsck 1.42.9 (4-Feb-2014)
/dev/sdb1 contains a file system with errors, 强制检查.
第一步: 检查inode,块,和大小
第二步: 检查目录结构
在 /work2/XXX/.repo/projects/vendor/imx/genivi.git/refs/tags/xxx_v1/master (23997360) 中的入口 'usb_test' references inode 23998390 found in 簇 2929's unused inodes area.
处理? 是

在 /work2/XXX/.repo/projects/vendor/imx/genivi.git/refs/tags/xxx_v1/master (23997360) 中的入口 'usb_test' has an incorrect filetype (was 1, 应为 0).
处理? 是

正在从头开始e2fsck...
One or more 块 簇 descriptor checksums are invalid. 处理? 是

簇 descriptor 2929 checksum is 0xefbe, should be 0xd3d3. 已处理.
/dev/sdb1 contains a file system with errors, 强制检查.
第一步: 检查inode,块,和大小
第二步: 检查目录结构
在 /work2/XXX/.repo/projects/vendor/imx/genivi.git/refs/tags/xxx_v1/master (23997360) 中的入口 'usb_test' has 删除/unused inode 23998390. 清除? 是

3步: 检查目录连接性
Pass 4: Checking reference counts
Unattached inode 23997366
连接到 /lost+found? 是

Inode 23997366 ref count is 2, 应为 1. 处理? 是

5步: 检查簇概要信息

/dev/sdb1: ***** 文件系统已修改 *****
/dev/sdb1: 4778511/61054976 files (0.2% non-contiguous), 83041224/244190390 blocks

之后重启系统,即可正常删除该文件。

Title:Ubuntu下无法删除文件

Author:Victor Huang

Time:2019-03-17 / 16:03

Link:http://wowothink.com/ef6d909f/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)