V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jemz
V2EX  ›  Windows

Windows 使用虚拟机隔离不同生产环境,怎样做能兼顾性能与优雅?

  •  1
     
  •   jemz · 2023-06-10 22:01:28 +08:00 · 5034 次点击
    这是一个创建于 562 天前的主题,其中的信息可能已经有所发展或是发生改变。

    考虑到使用的程序类型比较杂,一方面很难在主系统中让它们保持“秩序”,即方便统一管理;另一方面也很难保证它们对系统的操作不会引发隐性问题。因此想要将不同生产环境下的软件隔离开来。

    例如,我想到的初步方案为,配置多个 Windows 虚拟机,在虚拟机 A 内只安装不得不装的国产软件(如 QQ 之类),在虚拟机 B 内只配置编程生产环境(如 VS Code, PyCharm 之类),在虚拟机 C 内只安装 LaTeX 编辑与编译相关软件,以此类推。考虑到性能,把游戏安装在主系统中。

    但是这样操作,不仅每台虚拟机都装一个 Windows 系统,会造成存储上的浪费;而且不符合我对优雅的期待(不然还不如不隔离,出问题直接用配置好的脚本重装)。

    大家有没有过这样的想法,是如何解决的?求教,谢谢!

    40 条回复    2024-06-20 08:51:19 +08:00
    wangkun025
        1
    wangkun025  
       2023-06-10 22:06:06 +08:00   ❤️ 5
    去精神科看一下,治好洁癖就可以了。
    wangkun025
        2
    wangkun025  
       2023-06-10 22:09:24 +08:00
    大哥,我错了。
    这几天了解到一个叫不可变操作系统的概念。大概跟 brew 的概念有点像。不过只针对 linux 。
    yekern
        3
    yekern  
       2023-06-10 22:10:26 +08:00
    纯环境 然后链接克隆,只是克隆一个链接 不占用空间 然后在每个虚拟机里安装软件就好了
    jemz
        4
    jemz  
    OP
       2023-06-10 22:24:48 +08:00
    @wangkun025 让子系统“不可变”是个很好的注意,但是感觉会丧失一些灵活性。不过可以考虑使用之前加个快照
    privil
        5
    privil  
       2023-06-10 22:28:51 +08:00
    微软貌似已经在开发软件沙箱隔离了。
    jemz
        6
    jemz  
    OP
       2023-06-10 22:30:25 +08:00
    @yekern 帮助很大,第一次听到这个概念(对虚拟机了解还是不完善)。
    刚刚看了 VMware 的手册,发现可以“[为链接克隆的父虚拟机启用模板模式]( https://docs.vmware.com/cn/VMware-Workstation-Pro/17/com.vmware.ws.using.doc/GUID-8C477788-7700-4030-8C4A-039C02AABB74.html)”,这样可以节省多个相同系统的存储浪费。
    再搭配 Unity 模式,我感觉是一个性价比高的解决方案了。
    crab
        7
    crab  
       2023-06-10 22:32:10 +08:00   ❤️ 1
    @jemz 但克隆模式下如果不同虚拟机有对操作系统磁盘的操作会产生兼容冲突问题吧?
    ztmzzz
        8
    ztmzzz  
       2023-06-10 22:36:16 +08:00 via iPhone
    @jemz 但是这样克隆出的虚拟机如果要系统更新或者软件更新会各自独立占用空间,省不了太多
    kkocdko
        9
    kkocdko  
       2023-06-10 22:46:00 +08:00
    hyperv 可以解决除了磁盘空间以外的问题,加钱解决磁盘空间问题。

    换 linux ,用 docker 解决上述问题,但是用 win 独占的软件又是一个问题。
    jemz
        10
    jemz  
    OP
       2023-06-10 22:51:59 +08:00
    @privil 期待系统沙箱早点成熟
    jemz
        11
    jemz  
    OP
       2023-06-10 23:19:58 +08:00   ❤️ 1
    @crab 刚刚创建虚拟机测试了一下,用父系统的快照创建了两个链接克隆子系统,两个子系统可以同时使用,且操作相互独立。
    我的试验方法是,子系统 A 删除了桌面的快捷方式,子系统 B 清空了回收站,之后两个子系统冷重启,没有发生冲突。
    我的理解是,链接克隆得到的系统是在父系统快照上的追加,这部分内容分别记录,因此不会产生冲突。
    jemz
        12
    jemz  
    OP
       2023-06-10 23:23:21 +08:00
    @ztmzzz 没错,我在 #11 提到的两个子系统的存储占用分别为 603 MB 和 1.33 GB 。不知道是因为初始化占用空间多,还是每次修改都会这样 XD
    jemz
        13
    jemz  
    OP
       2023-06-10 23:27:06 +08:00
    @kkocdko 1) 你说的 Hyper-V 指的是系统功能里的 Sandbox 吗?
    2) 我最初的想法就是在 Windows 上找到类似 docker 的平替,但最终没实现
    maggch97
        14
    maggch97  
       2023-06-10 23:31:23 +08:00 via Android
    gam2046
        15
    gam2046  
       2023-06-10 23:36:48 +08:00
    或许 docker 可以帮助你。各类开发环境和编译环境是一定的。Windows 也支持 docker 里 跑 Windows 环境(针对国产软件),但是不能同时使用 Linux 和 Windows docker

    虽然切换麻烦,但是终归比虚拟机还是方便的。
    zwl2012
        16
    zwl2012  
       2023-06-11 00:16:58 +08:00 via iPhone
    @jemz 如果没理解错的话 可用差分 vhd 启动不同的 Windows 环境 首先定制纯净母版系统 vhd 然后创建差分子系统 vhd 启动子系统后安装专用软件环境即可 不需要可直接删除子系统镜像 不污染母系统环境 对存储及性能的压力也不大 只是步骤略微繁琐
    codehz
        17
    codehz  
       2023-06-11 00:23:39 +08:00
    @jemz windows 确实有 docker ,原生的
    但是不能跑 gui(准确说是和服务那样,gui 可以用,只是显示不出
    clorischan
        18
    clorischan  
       2023-06-11 00:23:46 +08:00
    @kkocdko Hyper-V 自己建 VHD 差分磁盘就可以的, 要麻烦点
    ysc3839
        19
    ysc3839  
       2023-06-11 00:31:49 +08:00 via Android
    我只把我不信任的软件装到虚拟机里,信得过的开发工具我是装到主系统里的
    LoveMyself546
        20
    LoveMyself546  
       2023-06-11 01:05:36 +08:00
    @jemz #12 链接克隆的子虚拟机种,所有与父虚拟机不一致的文件都会生成一份新的快照(副本)。也就是说子系统用得越久,操作越多,子虚拟机的存储占用就会越来越多。链接克隆主要还是用于临时使用的;同时如果父虚拟机的磁盘文件损坏,那么所有子虚拟机都将不能正常使用
    yinmin
        21
    yinmin  
       2023-06-11 02:50:04 +08:00 via iPhone
    以前有一个软件 sandboxie 买过专业版用了好多年,比虚拟机轻很多。现在这个软件还在,只是换了维护者了。
    dogfight
        22
    dogfight  
       2023-06-11 03:31:09 +08:00
    没人关心 op 需要看下心理医生吗?还是我来到精神病院了??哈哈
    akira
        23
    akira  
       2023-06-11 06:15:19 +08:00
    存储 不值钱。。凡是通过加存储空间能解决的问题,这个方案一般都是最划算的方案了。。
    felixcode
        24
    felixcode  
       2023-06-11 08:22:38 +08:00 via Android
    就用个电脑都这么折腾,有什么优雅的
    deorth
        25
    deorth  
       2023-06-11 08:31:06 +08:00 via Android
    链接克隆
    jKpzPv20NjX56i44
        26
    jKpzPv20NjX56i44  
       2023-06-11 09:07:02 +08:00
    linux 的话有 docker 可以用...Windows 可能会麻烦一点
    ikas
        27
    ikas  
       2023-06-11 11:16:29 +08:00
    windows 自带沙盒加上配置文件
    每个配置指定不同的文件夹目录,配合 vhdx 挂载
    https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file

    <Configuration>
    <MappedFolders>
    <MappedFolder>
    <HostFolder>C:\SandboxScripts</HostFolder>
    <SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads\sandbox</SandboxFolder>
    <ReadOnly>true</ReadOnly>
    </MappedFolder>
    <MappedFolder>
    <HostFolder>C:\CodingProjects</HostFolder>
    <SandboxFolder>C:\Users\WDAGUtilityAccount\Documents\Projects</SandboxFolder>
    <ReadOnly>false</ReadOnly>
    </MappedFolder>
    </MappedFolders>
    <LogonCommand>
    <Command>C:\Users\WDAGUtilityAccount\Downloads\sandbox\VSCodeInstall.cmd</Command>
    </LogonCommand>
    </Configuration>
    documentzhangx66
        28
    documentzhangx66  
       2023-06-11 11:22:46 +08:00
    Windows 、虚拟机、生产环境,这几样不沾边的东西,放在一起,能优雅就奇怪了。

    正确的做法是:

    1.开发、调试的 Windows 环境,专机专用,不要与虚拟化服务器、生产环境混在一起。

    2.如果生产要用 Windows ,请使用 Windows Server 版本,同样也是专机专用。

    3.虚拟化,对于企业级生产,用 VMware vSphere ( ESXi )+ 存储备份一体机方案。个人用 PVE ( Proxmox Virtual Environment ),追求开关机速度与灵活性。
    1014982466
        29
    1014982466  
       2023-06-11 11:42:55 +08:00
    花里胡哨,追求干净国产软件用精简版 /去广告版就完事了。外国软件绝大部分都能便携化运行。
    而且善意提醒:Windows 开 Hyper-v 或者一切基于它的( sandbox, WSL, WSA )都会导致主系统也被虚拟化然后性能尿崩
    yijiangchengming
        30
    yijiangchengming  
       2023-06-11 12:48:51 +08:00
    我目前使用了 WSL+Hyper-v 虚拟机+Sandbox-Plus+WSA 。WSL 用于配置 Linux 和 docker 开发环境,各个环境之间互相隔离。Sandbox-Plus 用于安装国产毒瘤,Hyper-V 虚拟机用于软件 Win 测试以及 Win 开发环境。WSA 用于国产毒瘤。所有数据均在 D 盘,主系统 C 盘挂了不影响数据。
    MiketsuSmasher
        31
    MiketsuSmasher  
       2023-06-11 13:43:20 +08:00   ❤️ 1
    可以换 Linux 做主系统,国产软件用 Wine🐶
    Wine 在设计上就能满足楼主“隔离不同生产环境”的需求:使用 WINEPREFIX 环境变量决定 Wine 实例的位置,把国产软件放到一个 prefix 里面,把生产环境放到另一个 prefix 里面,日常使用靠 Shell 脚本设置环境变量来切换。
    虽然每一个 prefix 也都要占用空间,但也就每个 700MB~1GB 左右,存储占用会小很多(当然具体占用取决于你往里面装什么东西)。
    而且 Wine 不是虚拟机,是直接转换 Windows 程序的系统调用,只要不玩游戏,性能几乎没有损失。
    当然问题也是有的,Wine 的兼容性,以及楼主可能觉得换个主系统、配置上述内容要比去看心理医生麻烦🐶
    kenvix
        32
    kenvix  
       2023-06-11 18:20:36 +08:00
    @wangkun025 分情况讨论,有些程序不放到隔离环境真不行,比如深信服 aTrust 会把宿主的网络栈给炸了
    自定义 WSB 文件的 Windows Sandbox 做这个正合适
    chenjies
        33
    chenjies  
       2023-06-11 20:37:34 +08:00
    vmware 的 windows 虚拟机里面我用 cpu-z 测过单核和多核分数,和宿主机是一样的。日常用一个虚拟机装国产软件,除了硬件加速有问题外,日常使用没有感觉到问题。都上 vmware 虚拟机了,在路由设置下基于 mac 的 ip 段,在宿主机设置内网白名单。vmware 并不能隔绝内网扫描设备。
    boshok
        34
    boshok  
       2023-06-13 00:09:04 +08:00
    突然想起十几年前在网吧用过一个沙箱软件,可以把 QQ 、文档编辑器等常用软件带着走,生成的文件好像在云上,网吧机器重启不影响。
    ssdold
        35
    ssdold  
       2023-06-13 11:23:09 +08:00
    @boshok 冰点还原
    boshok
        36
    boshok  
       2023-06-13 15:12:00 +08:00
    @ssdold #35 冰点是网吧、学校机房用的。我说的是自己用的一个云端存储的软件,界面类似 QQ ,里面包含自己常用的软件,软件配置或文档的状态都是在云端,老高级了。
    czmbbbb
        37
    czmbbbb  
       2023-06-13 17:17:29 +08:00
    使用 sandboxie 吧。https://scoop.sh/#/apps?q=sandboxie
    可以做到一个 app 开一个虚拟路径,也可以好几个 app 共享一组虚拟路径。
    abc8678
        38
    abc8678  
       2023-06-15 15:40:48 +08:00 via Android
    最近在用银行笔试的客户端,不想装在主力系统上,于是装了双系统。平时备份了 VHDX ,直接添加到启动菜单,重启切换。没想到它检测磁盘环境是 vhdx ,也认为这是虚拟机
    ju0594
        39
    ju0594  
       2023-07-02 09:00:06 +08:00
    @boshok 云端软件平台
    guisheng
        40
    guisheng  
       186 天前 via iPhone
    还有后续吗 同样的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2493 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.