web-dev-qa-db-ja.com

rootとしてファイルを削除できません

定期的なシステムアップデート(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

どうすればこのファイルを取り除くことができますか?

1
Adam Griffin

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パッケージには、getfattrsetfattrもあります。

または、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.
0
Xen2050