Skip to content

Instantly share code, notes, and snippets.

@shirayu
Last active May 27, 2023 06:52
Show Gist options
  • Save shirayu/8f54a16ce0de315908f1fdb419479aa8 to your computer and use it in GitHub Desktop.
Save shirayu/8f54a16ce0de315908f1fdb419479aa8 to your computer and use it in GitHub Desktop.
Tips to run on Linux in Windows WSL2

Tips to run on Linux in Windows WSL2

WSL version

CUDA setup

Memory setting

C:\Users\YOUR_ID\.wslconfig

[wsl2]
memory=12GB
swap=0

Port open setup

  1. Save the following script as start-wsl2.bat

    wsl -u root -- service cron restart
    
    FOR /F "usebackq" %%i in (`wsl -d Ubuntu exec hostname -I`) do set IP=%%i
    
    netsh interface portproxy delete v4tov4 listenport=22
    
    rem Mount disks
    wsl --mount \\.\PHYSICALDRIVE1 --bare
     
    rem ssh
    netsh interface portproxy add v4tov4 listenport=22 connectaddress=%IP% connectport=22 listenaddress=<WINDOWS_MACHINE_IP_ADFRESS>
    
    rem App port
    netsh interface portproxy add v4tov4 listenport=8000 connectaddress=%IP% connectport=8000 listenaddress=<WINDOWS_MACHINE_IP_ADFRESS>
  2. Add the task as Administrator to run the script to Windows task scheduler at Windows start

  3. If you restart WSL2 manually, run wsl --shutdown in the command prompt as Administrator and run the script as Administrator

  4. Port open

    %%; https://zenn.dev/solufa/articles/accessing-wsl2-from-mobile
    
    $ports = @(2000, 8000) # Webアプリで使うポートを配列で指定
    $fwRuleName = "WSL 2 Firewall Unlock"
    $wsl2Address = wsl -e hostname -I | ForEach-Object { $_.trim() }
    
    New-NetFireWallRule -DisplayName $fwRuleName -Direction Inbound -LocalPort $ports -Action Allow -Protocol TCP
    
    for ($i = 0; $i -lt $ports.length; $i++) {
      $port = $ports[$i]
      netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=$wsl2Address
    }
    

Mount external disk

  1. On windows

    $ wmic diskdrive get deviceID,Caption
    $ wsl --mount \\.\PHYSICALDRIVE0 --bare
  2. On WSL console

    $ lsblk
    $ sudo mkdir -p /mnt/disk/ssd0
    $ vi /etc/fstab
    /dev/sdb1       /mnt/disk/ssd0  ext4    defaults,user,nofail,noauto     0       0
    $ sudo mount /mnt/disk/ssd0
  3. Add the following line to .zshenv (or .bashenv) to mount automatically

    mount | grep -q '/mnt/disk/ssd0 ' || mount /mnt/disk/ssd0 2>/dev/null

Make WSL disk space compact

Open Powershell by Admin

$ wsl --shutdown
$ ls $HOME\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_●●●●\LocalState\ext4.vhdx
$ diskpart
    select vdisk file=C:\Users\●●●●\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_●●●●\LocalState\ext4.vhdx
    attach vdisk readonly
    compact vdisk
    detach vdisk
    exit

Initialize

$ sudo parted /dev/sdb
parted) mkpart
Partition name?  []? DISK_NAME_HERE
File system type?  [ext2]? ext4
Start? 0%
End? 100%

$ sudo  mkfs -t ext4 /dev/sdb1

Auto mount

$ sudo visudo
●●● ALL=NOPASSWD: /usr/bin/apt, /usr/bin/mount
$ mount /mnt/disk/ssd0
$ echo 'mount /mnt/disk/ssd0 2>/dev/null' >> 

hdparm

$ sudo vi /etc/hdparm.conf
/dev/sdb {
    spindown_time = 120
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment