无法在 WSL Ubuntu 20.02.2 上删除文件

无法在 WSL Ubuntu 20.02.2 上删除文件

这可能是由于删除过程未完成时关闭了 WSL 造成的。现在我想删除这个文件。


ls -lba输出这个

root@A12581:/HelloWorld/android-kernel/.repo/projects/prebuilts/boot-artifacts.git# ls -lba
ls: cannot access '.repo_config.json': No such file or directory
total 0
drwxr-xr-x 1 root root 4096 Jan 28 09:27 .
drwxr-xr-x 1 root root 4096 Jan 27 15:56 ..
-????????? ? ?    ?       ?            ? .repo_config.json

但我无法删除此文件/删除包含此文件的文件夹/重命名包含此文件的文件夹


我的环境:

WSL1

Ubuntu 20.04.2 LTS

答案1

@matigo 关于文件系统损坏的评论可能是正确的。我还同意,如果符合您的需求,WSL2 对 ext4 的使用几乎肯定更加稳健。

如果还没有,请执行wsl --shutdown(从 PowerShell)以确保释放所有句柄/锁。然后重新启动并重试。它成功的可能性相对较小,但由于速度很快,因此值得一试。

如果这不起作用,我建议尝试以下方法修复 WSL1 实例。

wsl --export基本上通过/往返 WSL1 实例wsl --importtar此过程执行的往返应该(希望)在存档或解档时删除损坏的文件(其中一个)。

从 PowerShell:

# Confirm the distribution name
wsl -l -v
# Distribution name may be "Ubuntu" or "Ubuntu-20.04" - Adjust the following lines accordingly:
wsl --shutdown
cd ~\Documents
mkdir WSL\images
mkdir WSL\instances\UbuntuRecovery
wsl --export Ubuntu WSL\images\ubuntu.tar
wsl --import UbuntuRecovery WSL\instances\UbuntuRecovery WSL\images\ubuntu.tar --version 1
wsl -d UbuntuRecovery

查看该文件在新实例中是否消失或可删除。

如果是这样,并且如果新实例中的所有其他内容看起来都正常,那么:

  • /etc/wsl.conf通过文件设置该实例中的默认用户名这个答案
  • 退出实例
  • 再次,从 PowerShell 来看:
    wsl --terminate UbuntuRecovery
    wsl --set-default UbuntuRecovery
    

wsl无论何时运行时,新实例都将是默认实例。

最后,使用以下命令删除原始损坏的实例:

wsl --unregister Ubuntu

重要的: 这是一个破坏性的操作。确保一切按预期运行。好的一面是,我们已经备份了...

您还可以卸载此时从商店安装的 Ubuntu“应用程序”。

您将通过wsl(如果还没有启动)或 Windows 终端启动,因为ubuntu.exe(或ubuntu2004.exe)命令将消失。

相关内容