定期的なシステムアップデート(Linux Mint 19)が失敗し、ファイルのバックアップを作成できないというエラーが発生しました。ファイルの所有者とグループは非常に奇妙で、lsattrの動作は奇妙です。 rootとしてファイルを削除できません。
$ ls -lah
total 64K
drwxr-xr-x 2 root root 4.0K Sep 14 00:41 .
drwxr-xr-x 15 root root 4.0K Jul 20 06:18 ..
-rw-r--r-- 1 root root 18K Jul 17 03:41 cs-xlet-danger.svg
-rw-r--r-- 1 root root 13K Jul 17 03:41 cs-xlet-running.svg
-rw-r--r-- 1 root root 19K Jul 17 03:41 cs-xlet-system.svg
-rw-r--r-- 1 2558197760 2848915456 0 Jul 17 03:41 cs-xlet-update.svg
$ Sudo rm -f cs-xlet-update.svg
rm: cannot remove 'cs-xlet-update.svg': Operation not permitted
$ lsattr .
--------------e--- ./cs-xlet-danger.svg
--------------e--- ./cs-xlet-system.svg
lsattr: No data available While reading flags on ./cs-xlet-update.svg
--------------e--- ./cs-xlet-running.svg
次に、ライブCDを起動して、ファイルシステムを確認します。
$ Sudo e2fsck -f /dev/sda1
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 291836/1310720 files (0.4% non-contiguous), 2935417/5242624 blocks
ファイルシステムに問題がないことを確認したら、ドライブをマウントして、Live CD OS(Linux Mint)からファイルを削除しようとします。
$ ls -lah
total 64K
drwxr-xr-x 2 root root 4.0K Sep 14 04:41 .
drwxr-xr-x 15 root root 4.0K Jul 20 10:18 ..
-rw-r--r-- 1 root root 18K Jul 17 07:41 cs-xlet-danger.svg
-rw-r--r-- 1 root root 13K Jul 17 07:41 cs-xlet-running.svg
-rw-r--r-- 1 root root 19K Jul 17 07:41 cs-xlet-system.svg
-rw-r--r-- 1 2558197760 2848915456 0 Jul 17 07:41 cs-xlet-update.svg
$ Sudo rm -f cs-xlet-update.svg
rm: cannot remove 'cs-xlet-update.svg': Operation not permitted
$ lsattr .
--------------e--- ./cs-xlet-danger.svg
--------------e--- ./cs-xlet-system.svg
lsattr: No data available While reading flags on ./cs-xlet-update.svg
--------------e--- ./cs-xlet-running.svg
最後に、iノードで削除しようとしましたが成功しませんでした。
$ ls -i cs-xlet-update.svg
220926 cs-xlet-update.svg
$ find . -inum 220926 -exec Sudo rm -i {} \;
rm: remove regular empty file './cs-xlet-update.svg'? y
rm: cannot remove './cs-xlet-update.svg': Operation not permitted
どうすればこのファイルを取り除くことができますか?
Fsckを強制した後(それは-f
フラグ)そしてそれはまだきれいに見えます...ユーザー/グループ番号は珍しいです、一般的にそれらは10000未満だと思います、20億は正しく見えません、そしてそれらはゼロバイトです...何か面白いです。これらが機能しない場合は、チェックする拡張属性もあるかもしれません。
たぶんiノードでリストしてみてください
ls -il
次に、findとrmを使用してiノードで削除します
find . -inum [inode-number] -exec rm -i {} \;
または別の例では、「安全性」を見つけて「-delete」を見つけることを推奨しています
find . -maxdepth 1 -type f -inum [inode-number] -delete
さらに「安全性」を高めるには、最初に、デフォルトの「印刷」を使用して、-deleteを省略して、どのファイル検索が見つかったかを確認します。
find . -inum [inode-number]
それでも機能しない場合は、debugfs
に必要なコマンドがいくつかあり、そのコマンドの多くはiノードを引数として取ります
rm pathname
Unlink pathname. If this causes the inode pointed to by pathname to have
no other references, deallocate the file. This command functions as the
unlink() system call.
または多分
unlink pathname
Remove the link specified by pathname to an inode. Note this does not
adjust the inode reference counts.
また、拡張属性が問題を引き起こしている場合でも、getfacl
を試してそれらを一覧表示し、setfacl
を変更して-b, --remove-all
オプションは便利に聞こえます。または、attr
パッケージには、getfattr
とsetfattr
もあります。
または、debugfsには次のような拡張属性コマンドがいくつかあります。
ea_get [-f outfile] filespec attr_name
Retrieve the value of the extended attribute attr_name in the file file‐
spec and write it either to stdout or to outfile.
ea_list filespec
List the extended attributes associated with the file filespec to stan‐
dard output.
ea_set [-f infile] filespec attr_name attr_value
Set the value of the extended attribute attr_name in the file filespec to
the string value attr_value or read it from infile.
ea_rm filespec attr_names...
Remove the extended attribute attr_name from the file filespec.