虚拟机出现“操作文件.PhysicalDrive1失败”的解决方法

今天打算利用U盘给虚拟机装系统做实验,中途遇到了“操作文件.PhysicalDrive1失败”的错误,试了网上的方法都没有成功,最后自己试了很久总算弄出来了。鉴于本人的基础水平有限,如果后面解释哪里有问题请各位兄弟指出来,在这里先说声谢谢了。

在这里顺便给大家介绍下用U盘给虚拟机装系统的大致流程,后面再给出具体的问题出在哪里。

一、新建虚拟机,如下图



1.选择典型模式,点击下一步



2.如果是想用硬盘上的ios装系统,则选择第二个,在这里我们选择第三个,点击下一步



3.选择虚拟机预装系统的版本,点击下一步



4.选择存放的位置,点击下一步



5.设置磁盘大小,在这里我们选择默认大小,下一步



6.单击完成,一个虚拟机就新建完成



二、新建成功后,右键点击刚刚建好的虚拟机选择设置,如下界面



1.接下来我们需要添加一个硬盘(既你的启动U盘,后面出现问题的原理就在这里),添加方法如下



2.默认点击下一步



3.选择物理磁盘(第三个),下一步



4.第一个是虚拟磁盘(PhysicalDrive0),第二个是启动U盘(PhysicalDrive1),在这里我们选择第二个



5.点击完成



三、添加成功后,点击菜单栏的虚拟机-》电源-》启动时进入BIOS(也可以在开机的界面时按F2进入)



1.进入BIOS界面后,在BOOT下将上图红色框移到最上面,按F10保存退出。



2.接下来就可以用U盘给虚拟机装系统了



现在我们打开菜单栏,选择虚拟机-》可移动设备-》Kingston DT 101 G2(我的启动U盘),在这里是没有打勾的,所以前面才能成功进入U盘启动界面,后面我将我的理解大致说一下:



因为我们在前面添加了一个新的硬盘(既你的U盘),用来引导虚拟机进入系统启动盘,如果你在“可移动设备”中将选择“连接(断开与主机的连接)”,那么你的U盘就作为虚拟机的移动盘(U盘),而不是作为虚拟机的硬盘来处理,所以虚拟机会报错,“不能操作文件 . PhysicalDrive1 ”(虚拟机不支持U盘启动,只能将U盘作为硬盘来处理)。反过来,当你没有选择连接,那么你的U盘还是作为你本地主机的U盘,而对于虚拟机来说就是作为它的外置硬盘。
 
用下面的图大概描绘下:



 希望对大伙们有帮助,有什么不对的地方请指出,谢谢。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
以下是一个C++程序示例,用于在物理磁盘上保护MBR并在被修改时回滚。 ```cpp #include <iostream> #include <fstream> #include <Windows.h> // MBR结构体定义 #pragma pack(push, 1) struct MBR { // MBR代码 unsigned char code[446]; // 分区表 unsigned char partitionTable[64]; // MBR签名 unsigned short signature; }; #pragma pack(pop) int main() { // 打开物理磁盘 HANDLE hDisk = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDisk == INVALID_HANDLE_VALUE) { std::cerr << "无法打开物理磁盘!" << std::endl; return -1; } // 读取原始MBR备份 MBR originalMBR; DWORD bytesRead; if (!ReadFile(hDisk, &originalMBR, sizeof(MBR), &bytesRead, NULL)) { std::cerr << "无法读取原始MBR备份!" << std::endl; CloseHandle(hDisk); return -1; } // 读取当前的MBR MBR currentMBR; if (!ReadFile(hDisk, &currentMBR, sizeof(MBR), &bytesRead, NULL)) { std::cerr << "无法读取当前MBR!" << std::endl; CloseHandle(hDisk); return -1; } // 检查MBR是否被修改 bool modified = false; for (int i = 0; i < sizeof(MBR); i++) { if (currentMBR.code[i] != originalMBR.code[i]) { modified = true; break; } } if (modified) { std::cout << "MBR已被修改,正在回滚..." << std::endl; // 回滚MBR DWORD bytesWritten; if (!WriteFile(hDisk, &originalMBR, sizeof(MBR), &bytesWritten, NULL)) { std::cerr << "无法回滚MBR!" << std::endl; CloseHandle(hDisk); return -1; } // 进行其他回滚操作... std::cout << "MBR回滚完成!" << std::endl; } else { std::cout << "MBR未被修改。" << std::endl; } CloseHandle(hDisk); return 0; } ``` 这个程序使用了Win32 API的`CreateFile`,`ReadFile`和`WriteFile`函数来打开、读取和写入物理磁盘上的MBR。它首先读取原始的MBR备份,然后读取当前的MBR。接下来,它逐个字节比较当前的MBR和原始备份MBR的代码部分,以检查是否有任何不同之处。如果有差异,它会将原始备份的MBR回滚到物理磁盘中。 请注意,这个程序需要管理员权限才能访问物理磁盘。在运行程序之前,请确保以管理员身份运行。 同样地,这只是一个简单示例,实际的MBR保护和回滚程序可能需要更复杂的逻辑和更全面的错误处理。在操作系统层面上进行MBR操作是非常敏感和危险的,因此请谨慎操作,并确保你了解自己在做什么。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌狼爱爪爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值