1

Обычное обновление системы (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

Затем я загружаюсь в live 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 (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

Наконец, я пытаюсь удалить его по индоду безуспешно:

$ 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 ответ1

0

После форсирования fsck (с флагом -f ) он все еще выглядит чистым ... Номера пользователей / групп необычны, как правило, они меньше 10000, я думаю, два миллиарда выглядят неправильно, и это нулевые байты ... что-то забавное. Могут также быть некоторые расширенные атрибуты, чтобы проверить, если они не работают.

Может быть, попробуйте листинг по индоду

ls -il

а затем удалить с помощью inode с помощью команды find и rm

find . -inum [inode-number] -exec rm -i {} \;

или другой пример рекомендовал некоторые найти "безопасность" и найти -delete

find . -maxdepth 1 -type f -inum [inode-number]  -delete

для еще большей "безопасности" сначала проверьте, какой файл найден, опуская -delete, используя "print" по умолчанию

find . -inum [inode-number] 

Если они все еще не работают, у debugfs есть некоторые команды, которые должны, и многие из его команд принимают inode в качестве аргумента

   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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .