创建虚拟机

1.创建一个没有硬盘的windows虚拟机,与已安装在物理硬盘上的系统一致。
2.通过命令行在创建的虚拟机目录下创建一个指向物理硬盘的虚拟硬盘
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,2,3,4,5,8 -relative
3.在创建的虚拟机中加载刚创建的vmdk虚拟硬盘。
4.正常启动虚拟机,一切搞定。
5.当然,要在虚拟机里用得爽,就要把配置搞好,并安装上extension包里的guest additions。

过程中的问题
看似简单的过程,还是有些问题会出现。
1.创建好的vmdk虚拟硬盘无法使用,报 VERR_ACCESS_DENIED 错误。
:首先找到了一往篇windows下的文章 http://blog.csdn.net/dewafer/article/details/41366441 ,其中提到了同样的错误。但windows下的问题出在,博主没有用管理员权限创建虚拟硬盘,博主通过用管理员权限创建之后解决了他的问题。而我是用linux,而且是sudo创建的(创建完之后会是两人个文件,一个是你创建的文件名加上.vmdk,另一个是文件名加上-pt,然后才是.vmdk,不知这两个文件分别是什么作用?),所属用户已经是root了。但我还把用户改成了自己,把文件的组归属到了vboxusers(virtualbox的用户组),并设置了664的权限,问题依旧。再看了一遍官方文档,发现自己没有完全按文档中写,我写成了VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,2,3,4,5,8 少了-relative参数!加上之后,再运行virtualbox,一切正常!

P.S.
要使系统开机之后直接能使用物理硬盘上的windows,要在系统加载时就添加对这些物理盘的读写权限,在/etc/ude/rules.d下创建一个新的文件61-vbox-vmdk.rules,其内容为

# Full disk needs to be readable by vboxusers
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="disk", GROUP="vboxusers", MODE="0640"
# sda2, 6 need to be R/W by vboxusers
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="1", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="2", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="3", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="4", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="5", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="TF655BWH163KLR", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="8", GROUP="vboxusers", MODE="0660"

而其中的TF655BWH163KLR是硬盘的标识,可以以下命令来获取

hdparm -I /dev/sda | grep Serial

而其中的数字表示了硬盘的分区,1表示第一个分区,sda1,依次类推。

参考链接:
https://cnzhx.net/blog/opensuse-tw-virtualbox/#i-5
https://cnzhx.net/blog/boot-linux-partition-on-physical-hd-with-vm-in-windows/
http://www.virtualbox.org/manual/ch09.html#rawdisk

P.S.P.S.
其实,这一次的目的是想在virtualbox中通过passthrough来实现物理机在virtualbox里流畅运行的,但在买电脑的时候只注意了CPU是否支持vt-d(amd叫IOMMU)而忽略了主机对vt-d(北桥芯片,详见http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf)的支持性,结果本本是intel的HM77(http://ark.intel.com/products/64339),官方已经确认不支持vt-d。后来又了解到,即便是主板芯片组支持了该功能,但生产厂商的BIOS中没有相关的开启项,也是惘然,除非主机默认打开了vt-d功能。所以要使用vt-d这个高级功能还真是要费点心思。当然,使用vt-d,你还得有两块显卡(一般的独显本本都能满足的吧,一个是CPU的集显,一个是独显)以及两个显示器(如果没有,也可以用VNC来远程使用,据说只损失5%的性能)。好了,如果之后有机会换上了全套功能的电脑,再来一发passthrough的文章。

最后给一篇半虚拟化的文章,以供扩展阅读。

http://smilejay.com/2012/11/kvm-vtd-overview/

Linux下VirtualBox启动物理硬盘上已安装的Window 8系统的更多相关文章

  1. linux下如何查看某软件是否已安装

      因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm - ...

  2. 【软件是否安装】linux下如何查看某软件是否已安装

    因为Linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa ...

  3. linux下查看cpu物理个数和逻辑个数 - chw1989的专栏 - 博客频道 - CSDN.NET

    body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLi ...

  4. linux下后台启动springboot项目

    linux下后台启动springboot项目 我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn p ...

  5. Linux下手动备份还原硬盘主引导记录MBR跟硬盘分区表DPT教程

    Linux下手动备份还原硬盘主引导记录MBR跟硬盘分区表DPT教程 二 18 奶牛 Linux, Ubuntu, Windows 1,885 views查看评论 最近奶牛一直在折腾linux下的gru ...

  6. linux下后台启动springboot项目(转载)

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  7. linux 下 apache启动、停止、重启命令

    原文:linux 下 apache启动.停止.重启命令 基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/u ...

  8. VirtualBox 使用物理硬盘

    /******************************************************************************* * VirtualBox 使用物理硬盘 ...

  9. Linux下的启动oracle的EM的命令

    Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...

随机推荐

  1. Java垃圾回收机制 入门

    对于Java虚拟机的了解,我认为是一个Java程序员已经入门的重要标志,而JVM中的垃圾回收机制(Garbage Collection,简称GC)又是JVM中的重点,所以hans在这里用篇文章时间和大 ...

  2. 书单.md

    0823 John Hoskin, An Ilustrated History of Thailand.Asia Books Co., Ltd.2015 0729 Gerald Graff, Cath ...

  3. 简例 一次执行多条mysql insert语句

    package com.demo.kafka;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prep ...

  4. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  5. thinkphp model模块

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

  6. HTML5 --照抄书里的代码但函数无法执行、求分析( Uncaught ReferenceError: xxx is not defined)

    在js文件里写一个方法传参数: moveElement(id,name,price) { alert("id:"+id+"name:"+name+"p ...

  7. sql server数据库操作

    --插入整行数据 , '1983-08-29', 'A', 'A', 'A') --插入部分列数据 , '1983-08-29') --删除行记录 delete from person where n ...

  8. NSArray转json字符串

    func arrayToJson(arr:NSArray) -> String { let jsonData: NSData = try! NSJSONSerialization.dataWit ...

  9. Java(类与对象)

    1>对象判等 请输入并运行以下代码,得到什么结果? public class Test { public static void main(String[] args) { // TODO Au ...

  10. mongkeyrunner实现循环随机输入值的方法

    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImagedevice= MonkeyRunner.waitF ...