InputUtils.lua | ||
json.lua | ||
PortableVM.lua | ||
README.md | ||
Utils.lua | ||
VM.lua |
Portable VM
出甚么事了?
(本 Readme 用英文写对于我这种菜就很难,于是选择用中文。)
是这样的,我校有很多 Computer Labs,不管是上课和休息我都会用到,但是学校的电脑都是入域的,光是那些组策略就很烦人,还有恶心的杀毒软体,导致有些不爽的限制。我本人很讨厌这些限制,而且力所能及能破解,何乐而不为呢?于是为了破解这些限制,想了如下方案:
-
自带电脑:这个没得说,然而我并不会带电脑上学
-
用 Windows To Go:我以前用过一段时间,不过会有 老师轻易发觉、关机慢、无法轻松切换回去、没有学校电脑的软体,如 PS、AutoCad 等上课所需、如果不小心 Online 了本机硬盘做了修改,容易惹麻烦、U 盘速度慢(后面会讲) 等问题。
-
破解本机权限(DLL 注入等):我 太 菜 了
-
用虚拟机:仍然受到限制,不过自由一些。由于没有管理员权限,QEMU 似乎成了唯一选择,然而遇到如下麻烦:没有管理权限没法启用加速、U 盘速度慢,导致盘内的 qcow2 虚拟盘很慢,最终 VM 慢。
本文就是围绕最后一种方式,即虚拟机,速度慢的一个解决方案。什么?你还没理解? 没关系我知道你没理解 继续往下看。
刚才说道,用虚拟机(且 QEMU 可执行文件以及 3G 多的虚拟磁盘放在 U 盘)会很慢,具体是这两个原因:
-
没有管理员权限,导致没法使用加速器。这个看上去没有 Workaround (You tell me!)。
-
U 盘速度慢,导致 U 盘里的虚拟盘写入很慢,VM 卡。
没错,本 Repo 就是解决第二个问题的。我再展开说说。
U 盘是专门为了折腾 WTG 买的,SanDisk CZ73 64GB。这个盘宣称写入到 50M/s,读取 150M/s(大概),然而实测长时间写入会掉速。这就导致 WTG 和虚拟盘遭受 灭 顶 之 灾。然而读取速度应该没什么掉的(感觉),不过总之虚拟盘在 U 盘内,会掉速。怎么办呢?有三个解决方案:
-
干脆不用 U 盘。
加钱买 SSD 不可能的别想。把磁盘扔网上...? 别做梦了,哪个 Samba 网盘给你 150M/s 的写入速度。 -
每次使用前把档案复制到电脑,用完了再复制回来。这看上去可以解决,而且复制回来的时候不太掉速,不过太不优雅了(3G 的虚拟磁盘啊,想啥呢。)
-
用
Backing Store
功能。
第三种就是本 Repo 的重点。那么,Backing Store 是甚么?(README 硬生生写成了博客...)
这个概念我是在 VHD(X) 的时候听说的,总的来说就是一个母盘,一个子盘。当然子盘可以继续往下串小子盘然而本文不想那么麻烦就说一个儿子就得了。子盘可以理解成母盘的缓冲区,使用子盘的时候,读取操作从母盘读取,新的数据不会变动母盘而是写入子盘。字盘可以随时 Merge 到母盘。
可能说到这里你已经知道本 Repo 是做什么的了 ———— 启动前在本机硬盘创建一个基于 USB 内虚拟磁盘的子盘,VM 结束后 Merge 回去。这样做既可以减小写入大小,也可以缩短最后写入的时间,防止下课的时候匆忙,而且还能利用 U 盘很快的读取速度,不浪费。既然思路清楚了,就开始吧!
等下,还需要说明一下刚才为了方便理解,使用的不规范术语:
- 母盘 对应 QEMU 是 Backing file
- 子盘 对应 QEMU 是.. 我也不是很清楚,本项目暂且叫 Snapshot(不要和 QEMU 那个 Snapshot 搞混,本文不涉及那个)
- Merge 对应 QEMU 是 Commit
开始吧w
这项目做了点甚么
思路已经很清楚了,那么每次上课使用 VM 都需要进行如下步骤:
- 打开命令行
- 用
qemu-img
创建子盘 - 打开 VM
- VM 结束后 Commit 到母盘
- 删除子盘
会不会很罗嗦?想到上课的环境,最好自动完成。在用子母盘之前我用过批次档启动 VM。可是个人并不会些批次档,而且 Lua 是一门麻雀虽小、五脏俱全的语言,很适合做脚本,那么为甚么不试试呢?于是就有了本项目。
本项目会自动执行下列步骤:
- 创建子盘到用户目录(
%USERPROFILE%
或$HOME
) - 开启 VM
- 等 VM 结束 Commit 子盘
- 删除子盘
这一切都是自动的,而且针对不同情况,比如子盘已存在等,还有选项功能。为了实现上面功能,还需要一个保证、两个参数:
- 保证
qemu-img
在 PATH 中 - 参数 1:母盘绝对路径
- 参数 2:VM 启动命令
比如说..
C:\> lua PortableVM.lua E:\QEMU\disk.qcow2 qemu-system-i386 -hda %%s .....
这里的 VM 启动命令中可以用 %s
代替以前的母盘路径,它会被自动替换为字盘路径。注意,Windows 下要用 %%s
而不是 %s
。
调试选项
本项目会执行很多 Shell / CMD 程式,如果你想看清楚到底执行了甚么,可以设置 DEBUG
环境变量为 1
。
更多选项
支持修改默认的子盘路径(默认是 %USERPROFILE%\vm.format
)。只需要设置 SNAP_PATH
环境变量即可,支持用 %s
代替默认路径。
实际测试
家里电脑不精确测试结果是还不如直接写快(大雾
不过如果使用一会 VM 且写入东西比较多的话可能会有影响 吧(
感谢
License
WTFPL