续上回,虽然现在能自动挂载硬盘到WSL上了,但是配置远程SSH访问和挂载磁盘到指定目录还需要手动配置,或者说手动运行脚本。今天windows更新重启后,看着茫茫多(不是)的配置项,于是决定干脆写一个脚本开机自动运行好了。
首先,是配置SSH的内容。众所周知,由于WSL的实现方式,WSL自己的ip地址不是固定的,因此当需要从外部通过SSH访问WSL时十分不便。因此除了需要重新安装WSL的SSH外,还需要对WSL的网络进行配置。这里可以使用如下的两行代码在powershell
中直接进行配置:
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
其中第一行是给windows添加一个虚拟网卡,第二行则是为WSL配置一个新的ip。之后,只需要设置一次端口转发就能通过SSH到指定端口来访问WSL,视情况可能还需要开启防火墙。在这里,端口转发设置一次就可以,但以上两行命令需要每次开机都执行一次,而第二行甚至每次WSL重启后也需要执行一次。
这还没完。由于WSL默认是不启动SSH服务的,需要手动启动SSH服务器才行,这也很麻烦。所幸可以在powershell
中执行如下代码,在不进入WSL的情况下启动SSH:
wsl -d Ubuntu-20.04 -u root -e /etc/init.d/ssh start
因此,最后可以使用这样的脚本来配置WSL的SSH服务:
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
wsl -d Ubuntu-20.04 -u root -e /etc/init.d/ssh start
其次,是挂载硬盘的内容。虽然在上一篇文章中,已经能够自动在windows中挂载虚拟硬盘,但还是需要每次手动将虚拟硬盘挂载到WSL中,并在WSL中挂载到指定目录下。因此,这里首先将在windows中挂载虚拟硬盘和将硬盘挂载到WSL中的命令整合为一个脚本:
diskpart /s E:\vhdxAutoLoad
wsl --mount \\.\PHYSICALDRIVE3 --bare
wsl --mount \\.\PHYSICALDRIVE4 --bare
其中,E:\vhdxAutoLoad
是diskpart
程序(windows提供的用于通过命令行管理硬盘的程序)执行的命令文件,其内容为:
select vdisk file=E:\data.vhdx
attach vdisk
select vdisk file=D:\data.vhdx
attach vdisk
exit
即选择相应的虚拟磁盘,并挂载到windows中。剩下的两个命令在之前已经见过,不再赘述。
之后,需要设置WSL自动挂载。这里仿照在一般的Ubuntu中(因为笔者使用的WSL是Ubuntu-20.04)的方法,编辑/etc/fstab
文件实现。首先,通过blkid
命令查看需要挂载的硬盘的UUID,这里需要先挂载一次硬盘进行查看,不过设置好之后就一劳永逸了。
user@localhost:/etc$ sudo blkid /dev/sde
/dev/sde: UUID="xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb" TYPE="ext4"
这里之所以使用UUID来标识硬盘,主要是因为/dev/sde
这样的标识与硬盘本身并不是强关联的,当挂载硬盘的顺序不同时,这个标识也会发生变化。之后,编辑/etc/fstab
文件:
sudo vim /etc/fstab
在该文件添加所有需要自动挂载到指定目录的硬盘(这里仅举一例):
# something esle
UUID=xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb /data ext4 defaults 0 2
其中,第一列是硬盘的UUID;第二列是挂载点;第三列是文件系统类型;第四列是挂载配置,default
就行,第五列用于系统检查指定备份频率,0是不需要备份;第六列网上的说法众说纷纭,这里姑且采信是用于指定分区类型的,0是交换分区,1是启动分区,2是普通分区。
完成后,就可以实现自动挂载硬盘到指定目录。
总归起来,在windows下需要执行的脚本(暂且称为wsl.bat
)是:
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
wsl -d Ubuntu-20.04 -u root -e /etc/init.d/ssh start
diskpart /s E:\vhdxAutoLoad
wsl --mount \\.\PHYSICALDRIVE3 --bare
wsl --mount \\.\PHYSICALDRIVE4 --bare
其中还需要建立一个diskpart
的命令文件:
select vdisk file=E:\data.vhdx
attach vdisk
select vdisk file=D:\data.vhdx
attach vdisk
exit
最后,将wsl.bat
添加到自动任务中,设置开机自动执行和以最高权限运行(亦即需要运行此任务的账户拥有管理员权限),配合之前编辑的/etc/fstab
,就能实现自动配置好WSL,不需要自己再费劲输入命令了。
Comments NOTHING