给 Windows 加个 虚拟磁盘挂载服务,让 MBP 支持 D盘

新入一台 MBP,硬盘 256G 的仅用 MacOS 有点浪费,使用 Bootcamp 安装了 新版 Win10。用来做 日常的开发。

装好系统,又发现新问题了。Windows 2008 IIS 中的 PHP 设置,在 web.config 设置的,PHP安装在D盘,而通过 Bootcamp 安装好系统 只能有 一个 分区。

尝试分区时 发现 了 VHD,创建虚拟磁盘 后 实现了 Macbook Pro 通过 Bootcamp  增加多个分区的功能。

具体操作方法如下:

1、找到 磁盘管理,右键创建 VHD

2、选择 存放位置,磁盘大小。虚拟格式选择 VHD,虚拟磁盘类型选择 固定大小。动态扩展会产品大量碎片,影响性能。

3、等待创建 完毕,选择 固定大小会有点慢。可以看到 创建了 对应的虚拟磁盘文件。

4、创建完毕后,就可以像 正常的磁盘一样分区了。

5、分区完毕后,即可 看到新增加的 磁盘(比如:D盘)

6、重装系统或备份时,可以 分离VHD,保存到 移动硬盘 备份。

这样还有个缺点,重启系统后,需要重新挂载(数据不会丢失)。百度搜索后,发现可以通过diskpart.exe挂载。

之前配置 windows 下 nginx 用到了 winsw.exe,我用winsw.exe 配置了一个 vdisk-service-mqycn 的服务,可以在Windows系统启动时自动运行,支持多个虚拟磁盘。点击下载

使用方法非常简单,已经建好 Data.vhd 和 Web.vhd 的磁盘模板, 解压后放到:C:\disk,右键以管理员身份执行,即可自动安装到系统服务。每次开机自动运行。也可以参考 上面的步骤 1-6,手工创建更多 虚拟磁盘,点启动 虚拟磁盘自动挂载服务,会自动加载 C:\disk\vdisk 目录下的所有虚拟磁盘。

如果 不想安装服务,也可以 通过 main.cmd 手工 挂载 和 卸载。

核心的批处理脚本如下:

@echo off

set temp_file=C:\disk\log\config.txt

if "%1"=="" goto exit
if "%1"=="service" goto main2
if "%1"=="mount" goto main
if "%1"=="unmount" goto main
if "%1"=="config" goto config

:main2
call %0 unmount
call %0 mount
goto exit

:main
cd %~dp0
if "%2"=="mount" (
  echo 挂载虚拟磁盘中...
) else (
  echo 卸载虚拟磁盘中...
)
echo.>%temp_file%
for /r %%d in (vdisk\*.vhd) do call %0 config %1 %%d
echo exit>>%temp_file%
diskpart /s %temp_file% %2>nul
del %temp_file%
echo 执行完毕
goto exit

:config
echo 发现 %3 ...
echo select vdisk file=%3>>%temp_file%
if "%2"=="mount" (
  echo attach vdisk>>%temp_file%
) else (
  echo detach vdisk>>%temp_file%
)
echo.>>%temp_file%
goto exit

:exit