Fixing a WSL2 Linux distro that wont start
Or - how I tried to be smart and failed.
Sometimes, I forget that the WSL2 doesn't run exactly like normal Linux - systemd doesn't run, for example.
So, when I add some NFS mounts to /etc/fstab my whole distro stops responding the next time I start it up as its trying mount things it can't due to services not running.
To make matters worse, you can't jump in anywhere and edit the file back - you're locked out.
Here is one way of fixing it:
Exporting the faulty distro
WSL allows you to export your favorite distro as a tarball so you can bring it with you to other machines if you so desire. This is our savior in this case.
Create a directory for your distro - mkdir c:\Linux\Ubuntu, for example and then export using:
wsl --export Ubuntu-20.04 c:\temp\ubuntu.tar
This takes a while, depending on the size.
Fixing your mistake
Now you can open the tarball using your favorite tool - for example 7-zip will let you open it, right-click on /etc/fstab and choose edit.
Importing the fixed distro
Once you are happy with your changes, you can import this as a new WSL2 distro.
wsl --import MyFixedDistro c:\Linux\Ubuntu c:\temp\ubuntu.tar --version 2
Presto! You can now log into your newly imported (and fixed) distro - remember that your old one is still broken, so don't log into that one and think you did it wrong. You can actually just delete that by running wsl --unregister MyFaultyDistro
Fixing default user
If, when logging into your shell, you get root instead of your expected user - do the following:
- Run
id -u <your user>and take note of the id - Open
regeditand navigate toHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\<id of the distro> - Change the
DefaultUidvalue from (presumably)0to your user id from above. Remember to set the editor to decimal, as it defaults to hexadecimal which will not match your user id