惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

LY 的博客

AX1800 路由器折腾记录 ZJUCTF 2025 writeup 将 iPad 与 Apple Pencil 作为数位屏使用 Linux 修改 WiFi 监管数据 提取上交 jAccount 动态口令(TOTP) 机械革命无界 15X Pro 暴风雪使用 Arch Linux 使用硬件密钥解锁 KeePass 数据库 Linux 自制鼠标指针 Windows 使用 USB/IP 通过网络共享 USB 设备
基于 RawDisk,将双系统挂载为虚拟机
LY · 2025-07-20 · via LY 的博客

不知不觉就高考完一个多月了啊。

最近在配置新电脑,打算和往常一样用Arch Linux,但又担心有的商业软件只有Windows能用。刚好之前网上冲浪的时候看到Kiri的一篇教程,硬件配置又足够,于是就去折腾了。

总之,这篇教程的目的是:在Arch Linux上,使用VirtualBox,把同一硬盘上的Windows系统作为虚拟机启动。

据说使用KVM的话,还可以做到直接映射整个硬盘,从而得到更好的性能,但我现在暂时没有这个需求。感兴趣的可以搜索kvm disk pass-through

先大概讲下最终效果:剪贴板共享正常,剪贴板文件共享仅Linux到Windows正常,拖放传输文件不正常,声音延迟1秒左右。

准备

首先先装一堆包:sudo pacman -S pipewire pipewire-pulse virtualbox virtualbox-guest-iso

创建RawDisk

(官方文档并没有出现RawDisk的规范写法,你写成rawdisk一类的也没问题)

注意,继续阅读本文前请先浏览官方文档!过时的命令可能导致问题!本文最后更新时间为2025年7月20日。

以下内容基本只用于记录与补充,如果不明白可以去看开头提到的那篇教程

首先看看你的分区结构(不重要的信息略去)(sd{x}nvme{x}类似):

niko-mech-arch% sudo fdisk -l
Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disklabel type: gpt

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048    1050623    1048576   512M EFI System
/dev/nvme0n1p2    1050624 1511000063 1509949440   720G Linux filesystem
/dev/nvme0n1p4 1578108928 1578141695      32768    16M Microsoft reserved
/dev/nvme0n1p5 1578141696 1998243839  420102144 200.3G Microsoft basic data
/dev/nvme0n1p7 1998858240 2000406527    1548288   756M Windows recovery environment

我在nvme0n1p1这个分区已经安装了systemd-boot,可以正常识别Windows。

接下来把这两个分区做成RawDisk:

// 临时给用户 niko 赋予直接访问磁盘权限,用于创建RawDisk
$ sudo setfacl -m u:niko:rw /dev/nvme0n1{,p1,p5}
// 生成 RawDisk
$ VBoxManage createmedium disk --filename win11-rawdisk-rootless.vmdk --format=VMDK --variant RawDisk --property RawDrive=/dev/nvme0n1 --property Partitions=1,5 --property Relative=1
// 将临时授予的权限取消
$ sudo setfacl -b /dev/nvme0n1{,p1,p5}

顺带一提,如果要移除已经创建的RawDisk,可以使用VBoxManage closemedium disk win11-rawdisk-rootless.vmdk --delete

这里我遇到了如下问题:

niko-mech-arch% VBoxManage createmedium disk --filename win11-rawdisk-rootless.vmdk --format=VMDK --variant RawDisk --property RawDrive=/dev/nvme0n1 --property Partitions=1,5 --property Relative=1

0%...VBOX_E_FILE_ERROR
VBoxManage: error: Failed to create medium
VBoxManage: error: Could not create the medium storage unit '/home/niko/win11-rawdisk-rootless.vmdk'.
VBoxManage: error: VMDK: Image path: '/home/niko/win11-rawdisk-rootless.vmdk'. Failed to open the raw drive '/dev/nvme0n1' for reading (VERR_ACCESS_DENIED) (VERR_ACCESS_DENIED).
VBoxManage: error: VMDK: could not create raw descriptor for '/home/niko/win11-rawdisk-rootless.vmdk' (VERR_ACCESS_DENIED)
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component MediumWrap, interface IMedium
VBoxManage: error: Context: "RTEXITCODE handleCreateMedium(HandlerArg*)" at line 630 of file VBoxManageDisk.cpp

怀疑是因为ESP已经被挂载到了/boot,于是umount后重试,报错内容相似。于是换了下文的方法。

找个空闲空间创建一个新的ESP(300MB就够),进入Windows,为这个分区指定一个盘符(比如H:),进入cmd执行bcdboot C:\Windows /s H:,随后可以移除盘符。以下假设该分区在Linux中表示为nvme0n1p6

修改上面的命令重新运行。成功后,得到win11-rawdisk-rootless-pt.vmdkwin11-rawdisk-rootless.vmdk两个文件。

挂载磁盘

以普通用户身份打开VirtualBox,创建一个Windows 11虚拟机,不分配硬盘。创建完成后,进入设置,执行以下更改:

  • General -> Extended Features 中,启用EFI,禁用Secure Boot
  • Storage -> Devices 中,添加上一步创建的RawDisk
  • Audio -> Host Audio Driver 由Default改为PulseAudio

启动虚拟机

可能会提示“未激活”,原因可能是Windows检测到的硬件改变了,可以用某个工具一次性永久激活。

一些优化

安装Guest Additions就不用我说了吧。

为了获取USB设备列表,VirtualBox提示要用这条命令把用户加入对应组:sudo groupmems -g vboxusers -a niko

使用setfacl -m临时授予的权限会在重启后失效,我让DeepSeek老师给了个解决方案:

$ cat << EOF | sudo tee /etc/udev/rules.d/99-persistent-acl-for-virtualbox-windows.rules
ACTION=="add", KERNEL=="nvme0n1p5", SUBSYSTEM=="block", RUN+="/bin/sh -c '/usr/bin/setfacl -m u:niko:rw /dev/nvme0n1p5'"
ACTION=="add", KERNEL=="nvme0n1p6", SUBSYSTEM=="block", RUN+="/bin/sh -c '/usr/bin/setfacl -m u:niko:rw /dev/nvme0n1p6'"
EOF
$ sudo udevadm control --reload-rules
// 下两行用于立即触发规则
$ sudo udevadm trigger --action=add --sysname-match=nvme0n1p5
$ sudo udevadm trigger --action=add --sysname-match=nvme0n1p6

某次更新后,VirtualBox内的Windows虚拟机会在进入桌面前Abort,关闭3D加速可以暂时解决。

另外的话

上海交通大学招生组的话一个字都别信。