Unable to delete file - no such file or directory

Solution 1:

I know this is old, but I had the same problem as yours, only with a folder, not with a file. None of the methods suggested here worked.

I managed to solve the problem by creating a folder in the same position and with the same name as the one I couldn't delete. The folder was created correctly and it "replaced" the non existing one. Then I simply removed the new folder and the issue was gone. Simple as that.

Solution 2:

I had the same problem. It was a problem in index entries of the partition. I solved it by start Windows if your system is dual boot or insert live CD of Windows XP or Windows 7, and then do the following steps:

  1. Search for COMMAND PROMPT that: is cmd right-click -> Run as administrator.
  2. chkdsk /f/x D: (where D is your drive letter).
  3. Press Y if it asks for Y/N
  4. Check your drive for the file that you want to delete. Maybe it is deleted or you can delete it.

100% working

Solution 3:

Warning: These instructions will require one to use debugfs. They can cause data loss.

They are tailored to the original problem and may or may not be accurate for any future visitors on this page. Any data loss may be irreparable or even aggravated by fsck.

It may be a lost inode. Please run ls -li to get a list of inode numbers, then you can try to dump the referenced inode. For example, if your ls -li looks like the following:

rarkenin@ubuntu-alt-64-vbox-1:~$ ls -li
total 58672
4980758 -rwxr-xr-x 2 rarkenin rarkenin     4096 Sep 23 18:45 panorama.jpg
---SNIP---

then the inode number is 4980758 as shown in the list as the first column.

You can then try to dump the inode. Please read the entire post before doing anything.

  1. Start debugfs as root:

    rarkenin@ubuntu-alt-64-vbox-1:~$ sudo debugfs
    [sudo] password for rarkenin: 
    debugfs 1.42 (29-Nov-2011)
    debugfs:  
    

    and give the command open /dev/sda1 with the correct block device for your partition.

  2. Then, give the command to dump the inode whose number you got earlier:

    cat <4980758>
    

    using < and > around the inode number.

  3. If it reads some random text, close the terminal and open it again. Run debugfs again and give the open command again.

  4. Now, you can try to delete the file. This can result in severe filesystem corruption.

    debugfs: rm [filename]
    
    debugfs: unlink [filename]
    
    debugfs: kill_file [filename]
    
    debugfs: kill_file <inode>
    

Note that this can be done even if it turns out the file never had an inode. Try the commands one at a time, in the order shown above. Exit debugfs and check if the file exists. If not, begin again but follow the next instruction.

Make a backup if possible!