WSL2 在挂载时退出并显示代码 1

WSL2 在挂载时退出并显示代码 1

我对 Windows 和 Linux 都是新手,所以请耐心等待。

在使用了一些命令之后,rm -rf bin我的 WSL2 发行版退出了,现在当我尝试通过 Windows 终端启动它时,我得到了以下信息:

Processing fstab with mount -a failed.

<3>WSL (10) ERROR: CreateProcessEntryCommon:570: execvpe /bin/bash failed 2
<3>WSL (10) ERROR: CreateProcessEntryCommon:579: Create process not expected to return

[process exited with code 1 (0x00000001)]

我只安装了一个发行版。

Ubuntu 20.04 
Windows 11 Version 10.0.22000 Build 22000

WSL 版本:

PS C:\Users\Andreas> wsl -v
WSL version: 1.0.3.0
Kernel version: 5.15.79.1
WSLg version: 1.0.47
MSRDC version: 1.2.3575
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.1335

我没有使用 Docker,我的/etc/passwd外观如下:

PS C:\Users\Andreas>  wsl --system -d Ubuntu-20.04 -u root cat /mnt/wslg/distro/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
bunny:x:1000:1000:,,,:/home/bunny:/bin/bash
postgres:x:112:120:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
fwupd-refresh:x:113:121:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin

我努力了

wsl --update

我可以修复该问题吗?还是需要重新安装?

答案1

您可能需要重新安装,但让我们来解决这个问题:

  • 问题始于rm -rf bin。好吧,这可能是灾难性的,具体取决于具体是如何做到的。

    例如,如果您在主目录中并执行该命令,则~/bin只会删除目录的内容(如果存在)。

    即使你在根目录中发出命令,你的普通用户也不应能够删除/bin。你通常会得到:

    rm: cannot remove 'bin': Permission denied
    

    但是,如果您:

    • 在根目录中,或使用/bin和...
    • 以 root 用户身份运行,或使用sudo rm -rf /bin

    如果不重新安装,那将无法恢复。但是,如果您有需要恢复的重要文件,这是可以的(请参阅下面的“文件恢复”部分)。

    WSL 在运行默认 shell()时遇到问题,这一事实/bin/bash有力地表明您确实删除了该目录。

  • 边注:

    显示该命令的输出:

    wsl --system -d Ubuntu-20.04 -u root cat /mnt/wslg/distro/etc/passwd
    

    我很好奇(通过评论)您是从哪里想出这个命令的。这是一种我从未想过的尝试恢复的有趣方法。但您真正应该尝试的是:

    wsl --system -d Ubuntu-22.04 -e ls /mnt/wslg/distro/bin
    

    如果/bin主发行版(在系统发行版中安装为/mnt/wslg/distro)中的目录为空,则您确实已损坏发行版。(通过评论确认)

文件恢复

如果您想访问旧发行版中的文件或设置,您可以在重新安装之前将其备份,然后再访问。

要做到这一点:

  • 在 PowerShell 中,wsl --shutdown

  • 从 PowerShell 运行以下命令来确定虚拟驱动器的位置:

    Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ |
        ForEach-Object {
            (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath
        }
    

    在结果位置,您将找到LocalState包含该ext4.vhdx文件的目录。这是包含所有 Ubuntu/WSL2 文件的虚拟驱动器。

  • 将其复制ext4.vhdx到安全位置。

  • 或者,检查备份文件的哈希值是否与原始文件匹配。

  • 再次从 PowerShell,wsl --unregister Ubuntu-20.04(如果您的发行版名称不同,请调整此项)

  • 重新运行ubuntu2004.exe,这将重新创建一个新ext4.vhdx文件并在该发行版中创建用户/密码。

  • 在新发行版中,sudo apt update && sudo apt upgrade -y

  • 退出并返回 PowerShell。

  • 在 PowerShell 中,运行wsl --mount --name olddistro <path_to_backed_up>\ext4.vhdx --vhd

  • 重新启动 Ubuntu

  • 您的旧发行版中的文件可在 处找到/mnt/wsl/olddistro/。例如,您应该可以在 处找到旧主目录中的文件/mnt/wsl/olddistro/home/<username>

将旧文件复制到新发行版后,你可以直接删除老的(备份)ext4.vhdx

相关内容