And*_*yOh 5 windows-subsystem-for-linux
我在 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)]
Run Code Online (Sandbox Code Playgroud)
我只安装了一个发行版。
Ubuntu 20.04
Windows 11 Version 10.0.22000 Build 22000
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我没有使用 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
Run Code Online (Sandbox Code Playgroud)
我努力了
wsl --update
Run Code Online (Sandbox Code Playgroud)
我可以解决问题还是需要重新安装?
您可能需要重新安装,但让我们来看看这个问题:
问题开始后rm -rf bin。好吧,这可能是灾难性的,具体取决于它是如何完成的。
例如,如果您在主目录中并执行该命令,则只会~/bin删除该目录的内容(如果存在)。
即使您发出该命令时位于根目录中,您的普通用户也不应该能够删除/bin. 您通常会得到:
rm: cannot remove 'bin': Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,如果您:
/bin...sudo rm -rf /bin嗯,如果不重新安装,这将无法恢复。但是,如果您有需要恢复的关键文件,这是可能的(请参阅下面的“文件恢复”部分)。
WSL 在运行默认 shell ( ) 时出现问题这一事实/bin/bash强烈表明您确实删除了该目录。
边注:
您显示命令的输出:
wsl --system -d Ubuntu-20.04 -u root cat /mnt/wslg/distro/etc/passwd
Run Code Online (Sandbox Code Playgroud)
我很好奇(通过评论)你是在哪里想出这个命令的。这是一种我没有想到的尝试恢复的有趣方法。但你真正应该尝试的是:
wsl --system -d Ubuntu-22.04 -e ls /mnt/wslg/distro/bin
Run Code Online (Sandbox Code Playgroud)
如果/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
}
Run Code Online (Sandbox Code Playgroud)
在结果位置中,您将找到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。
| 归档时间: |
|
| 查看次数: |
2603 次 |
| 最近记录: |