最近一直在折腾完全虚拟化的家庭服务器,其中虚拟 Xpenology 一直是一个头疼的问题。按照 Xpenology 论坛给出的虚拟化安装方式,将 loader 做成一块 SATA 硬盘挂载,结果就是在系统更新的时候总会出现代号 13 错误(安装包已损坏)。
另外一个解决方案,先制作实体 USB 启动盘,然后在 ESXi 中将 USB 直通给 Xpenology 虚拟机。但是还要在机器上插一个 U 盘太麻烦,遇到 U 盘故障的话,恢复系统也是一个麻烦事。如果能虚拟 USB 启动盘就好了。但是,ESXi 虚拟机设置里面并没有虚拟 USB 存储设备的选项。
设置页面里面没有,不代表不能做!
经过几天的研究,终于在 VMware 官方论坛中发现了一个未公开的功能,可以将 vmdk 虚拟盘挂载成 USB 存储设备。
1. 准备 USB 引导盘
>> 懒人包
下载 VMware 专用的 Jun's DSM 6.2 loader 虚拟 USB 引导盘
使用懒人包的话可以跳过下面的分解步骤,直接进行下一步。
>> 分解步骤
首先,下载 Jun's DSM 6.2 loader。
注意,因为 ESXi 虚拟机仅在 UEFI 模式下支持从 USB 存储设备引导系统,所以,在写下这篇文章时,只能选择 1.04b 版本的引导盘。
然后,用 OSFMount 挂载引导盘镜像的第一分区,修改 grub/grub.cfg 文件,写入正确的 USB 设备 VID/PID。
# VMware virtual USB mass storage
set vid=0x0e0f
set pid=0x0005
如果有正版 Synology DS918+ 的机器序列号和网卡 MAC 地址(旧机器上抄一下),也可以在这一步设好。没有的话可以忽略,在 DSM 系统设置完成之后也可以重新设置序列号和 MAC。
之后,用 StarWind V2V Converter 将引导镜像转成 vmdk 格式。(网上有很多教程)
2. 建立虚拟机
在 ESXi 中建立一个虚拟机,添加 USB 控制器并设置成 USB 3.0 模式。
将虚拟机操作系统选成 Other 4.x or later Linux (64-bit)。
启动模式选择 EFI,去掉 Secure boot,并且勾选 Force BIOS setup 选项。
根据需要设置 SAS 卡直通,或者建立虚拟硬盘。如果使用虚拟硬盘的话,需要将硬盘模式设置成 Independent - persistent,并且挂载到 SATA controller 上面。
虚拟机建立好之后先不要开机。
3. 挂载虚拟 USB 存储设备
在 ESXi 存储管理下面打开 Datastore browser,将 synoboot 上传至虚拟机文件夹。
- 如果在第 1 步使用 StarWind V2V Converter 转换 vmdk,则需要上传 synoboot.vmdk 和 synoboot-flat.vmdk 两个文件
- 如果使用懒人包,则需要上传 synoboot.vmdk 和 synoboot.img 两个文件
然后将 .vmx(虚拟机设置文件)下载回本地编辑。
首先确认 .vmx 文件中存在下面一行。没有的话给加到文件最下方。
usb_xhci.present = "TRUE"
在 .vmx 文件最下方加入下面四行。
usb_xhci:3.present = "TRUE"
usb_xhci:3.deviceType = "disk"
usb_xhci:3.fileName = "synoboot.vmdk"
usb_xhci:3.readonly = "FALSE"
保存 .vmx 文件,并上传回 ESXi。
4. 设置从 USB 设备启动
第一次开启虚拟机之后,首先进入 UEFI BIOS 设置界面。选择 Enter setup -> Configure boot option -> Enable or disable boot option。将除了 EFI USB Device 以外的选项都设置成 Disabled。
选择 Commit changes and exit -> Exit the Boot Maintenance Manager -> Reset the system。
虚拟机重启之后会自动从虚拟 U 盘引导系统。然后就可以通过 Synology Web Assistant 查找并设置 NAS 了。
5. 修改序列号和 MAC 地址
在 DSM 上线,完成所有初始化设置(设置用户名/密码)之后,依然可以通过 SSH 后台挂载 synoboot 的方式修改机器序列号和 MAC 地址。
首先,在 DSM 的 控制面板 -> 信息中心 -> 服务 里面开启 SSH。
然后通过 SSH 登录 DSM(可以使用 Windows 命令行、PowerShell 或者 PuTTY)。用户名密码就是之前设置 DSM 时建立的账号。
登录之后先转成 root 账户。密码依旧是刚才的登录密码(不是 root 账户的密码)。
sudo -i
然后挂载 synoboot。
mkdir -p /tmp/synoboot
cd /dev
mount -t vfat synoboot1 /tmp/synoboot
cd /tmp/synoboot
编辑 grub/grub.cfg。
vi grub/grub.cfg
修改下面几行。
set sn=xxxxxxxxxxxx
set mac1=001122334455
set mac2=001122334466
重启 DSM 之后会有个 NAS 数据迁移的过程(系统认为已将硬盘移到另外一台 NAS),按照提示操作即可。
博主您好,按照您的方法安装了 DSM,发现了一个问题,每次重启的时候 usb 设备会被识别成一个外部设备,并且挂载为 usbshare,并没有变成 synoboot1 和 synoboot2,这也导致在升级系统的时候会出现 (错误 21),检查日志发现是 挂载 /dev/synoboot1 失败
然后我将usb 设备 link 到了 synoboot1
ln /dev/sdq1 /dev/synoboot1
ln /dev/sdq2 /dev/synoboot2
再更新,还是更新失败,日志显示还是挂载失败,只不过不是 mount 命令报错了
看上去应该是vid/pid不对,如果使用的不是ESXi的话,需要把vid/pid改成对应平台的虚拟USB存储设备