Datei kann nicht als root gelöscht werden

1

Die routinemäßige Systemaktualisierung (Linux Mint 19) schlug mit dem Fehler fehl, dass keine Sicherungskopie einer Datei erstellt werden konnte. Datei hat sehr seltsames Eigentümer- und Gruppen- und seltsames lsattr-Verhalten. Kann die Datei nicht als root löschen.

$ 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

Ich starte dann eine Live-CD, um das Dateisystem zu überprüfen.

$ 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

Nachdem das Dateisystem als fehlerfrei bestätigt wurde, starte ich das Laufwerk und versuche, die Datei von der Live-CD (Linux Mint) zu löschen.

$ 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

Zum Schluss versuche ich es mit inode ohne Erfolg zu löschen:

$ 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

Wie kann ich diese Datei entfernen?

Adam Griffin
quelle
Hat das Dateisystem nicht wirklich (erzwungen) überprüft, ohne das -f-Flag hat e2fsck nur einen kurzen Blick darauf geworfen und gesagt, dass es nicht als schmutzig markiert ist. Und war es beschreibbar (rw) montiert?
Xen2050
@ Xen2050 Tolle Idee! Das hat leider nichts gefunden. Ich habe meine e2fsck-Zeile mit den -f-Ergebnissen bearbeitet. Und ja, das Dateisystem ist als rw gemountet.
Adam Griffin

Antworten:

0

Nach dem Erzwingen eines fsck (mit seinem -fFlag) und es erscheint immer noch sauber Etwas ist lustig. Könnten auch einige erweiterte Attribute sein, die überprüft werden müssen, wenn diese nicht funktionieren.

Vielleicht versuchen Sie es mit einer Auflistung nach Inode

ls -il

und dann löschen durch inode, mit find und rm

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

oder ein anderes Beispiel empfahl, einige finden "Sicherheit" und find's -delete

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

Um noch mehr "Sicherheit" zu gewährleisten, überprüfen Sie zuerst, welche Datei gefunden wurde, indem Sie die Option -delete weglassen. Verwenden Sie dazu die Standardeinstellung "print".

find . -inum [inode-number] 

Wenn diese immer noch nicht funktionieren, debugfsgibt es einige Befehle, die funktionieren sollten, und viele dieser Befehle verwenden eine Inode als Argument

   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.

oder vielleicht

   unlink pathname
          Remove the link specified by pathname to an inode.  Note  this  does  not
          adjust the inode reference counts.

Und selbst wenn erweiterte Attribute Probleme verursachen, können Sie versuchen getfacl, sie aufzulisten und setfaclzu ändern. Die -b, --remove-allOption klingt praktisch. Oder im attrPaket gibt es auch getfattrund setfattr.

Oder debugfs hat auch einige erweiterte Attributbefehle wie:

   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.
Xen2050
quelle
Meine ursprüngliche Frage zeigte, dass das Löschen durch Inode ebenfalls fehlschlug. Es sieht jedoch so aus, als ob Debugging mit rm pathname funktioniert hat. Es gab keinen Grund, warum es funktionierte oder warum es nicht funktionierte, aber es scheint, dass ich wieder im Geschäft bin. Vielen Dank!
Adam Griffin
Ich war mir nicht sicher, ob es nur Probleme gab, vielleicht hätte find's -deletewas anderes gemacht. Letztendlich hat es
geklappt