从源PC上一次性p2v(qcow2)的构想
磁盘分区表,虚拟硬盘文件,操作系统引导
1. 基本概念和术语
源硬盘:一般就是客户的PC机的硬盘,硬盘里面包含了Windows分区。
源Windows:以源硬盘启动的Windows环境。
虚拟磁盘文件:文件格式有qcow2、vhd、vhdx等。一个虚拟磁盘文件模拟一个磁盘,要模拟两个磁盘得用两个虚拟磁盘文件。
分区表:常见就mbr和gpt两种。
分区(磁盘分区):给磁盘建立分区表后,可将一个磁盘的存储空间分成若干段落,每一段就是一个分区。
分区表表头:在给磁盘建立分区表后,磁盘初始位置的几百~几千字节的数据就是分区表表头,它索引了该磁盘分为几个分区,每个分区的头尾位置、大小、预设功能等。
gpt备份:磁盘若选用gpt分区表,则磁盘尾部的几百字节数据,它是gpt备份。
磁盘签名、磁盘guid:mbr的分区表表头里有一段数据是磁盘签名,gpt的分区表表头里有一段数据是磁盘guid。它们的诞生时机是新建分区表的时候。windows系统假定每个磁盘的磁盘签名(或磁盘guid)都不同。若两个磁盘的签名(或guid)相同,windows可能会把两个磁盘给弄混了。
引导方式:从bios程序寻找操作系统引导文件的方法,常见的就legacy和uefi两种。可以有mbr配legacy,mbr配uefi,mbr配双引导,gpt配uefi四种。
引导分区:存放系统引导文件的分区。一般是legacy场景下的活动分区和uefi场景下的EFI分区。
引导修复:创建(或找到)引导分区和Windows分区,建立正确的引导文件。
disk2vhd:微软出品的物理磁盘转vhd(x)的工具。
diskgenius:某公司出品的磁盘(分区)综合管理工具。
2. 1.x方案的p2v方案简述
2.1 流程
步骤A所在的环境为源Windows。步骤B(含)之后的操作所在环境简称为转换环境。转换环境一般选用源Windows即可,也可选其它机。
A. 在源Windows里执行disk2vhd,将C盘所在硬盘转为vhd(x)文件。
B. 用Windows自己的磁盘管理器,把vhd(x)像真实磁盘一样挂载到Windows环境里。
C. 根据云桌面对引导方式的需求,要求操作员手工执行mbr(gpt)转gpt(mbr)或自动执行mbr转gpt。
D. 用Windows自己的dism等工具把虚拟化设备的驱动(viosscsi、netkvm等)安装到vhd里的Windows。
E. 用Windows自己的diskpart工具,压缩分区,定制引导分区。
F. 用Windows自己的bcdboot工具修复引导。
G. 用qemu的qemu-img将vhd(x)转为qcow2。
H. 把qcow2所代表的磁盘的尾部的未分配空间砍减掉。
I. 就地启动qemu虚机,以qcow2文件作为磁盘,验证能否启动windows。
K. 上传qcow2到rcdc。
2.2 方案选型考虑
A. 为什么要mbr(gpt)转gpt(mbr)?
正规的配置方案是mbr配legacy,gpt配uefi。rcdc和idv启动镜像前,选取哪种引导方式就跟操作系统和分区表有关。假使源pc是Win10的mbr+legacy,所以我们得到的vhd也是Win10的mbr,但预期rcdc会以uefi启动这个镜像,所以要修正为gpt+uefi。
B. 为什么要经过vhd而不是直接从物理磁盘转为qcow2?
因为vhd能够很容易地像真实磁盘一样挂载出来,只要是挂载出来的磁盘,就能很容易用windows自有工具达成2.1的D、E、F的需求。
若想要qcow2像真实磁盘一样挂载出来,那么有方法但确实不如vhd那么容易。
C. 为什么要把qcow2尾部未分配空间砍减?
假设源硬盘(总量301GB)的分区布局如下:
| 分区表表头 | 引导分区(500MB) | D盘(160G) | C盘(30G) | 恢复分区(500MB) | E盘(110G) |
在disk2vhd运行时,尽管只转换C盘,但是得到的vhd依然是代表301GB的磁盘,分区空间也是划分好的,得到vhd如下布局:
| 分区表表头 | 引导分区(500MB) | raw文件系统分区(160G) | C盘(30G) | 恢复分区(500MB) | raw文件系统分区(110G) |
末尾的110.5GB空间都可以砍减的。如果不砍减,那么rcdc也不支持以301GB的qcow2来新建镜像。
纵使编辑镜像环境没有300GB的限制,如果不砍减,在IDV场景下,即使客户实际只需30G的C盘,那么110.5GB的空间shine模块总要预留出来给C盘扩展用,这个预留就是浪费了的。
3. 旧方案的缺陷
A. vhd文件的生成耗时也不灵活
C盘通常是大几十G,所以生成的vhd也有大几十G,大几十G的文件的生成总要十来分钟。若不经过vhd,直接从物理磁盘到qcow2,这十来分钟就能省下来。
见2.2.C。vhd会把分区表表头,分布布局,磁盘签名(或guid)都从源硬盘复制到vhd里。此时若在源Windows里就地挂载vhd,就会触发相同磁盘签名(或guid)的异常,进而导致转换环境蓝屏,mbr(gpt)转gpt(mbr)异常,引导修复异常等问题。
见2.2.C,vhd里中间160G的未分区部分,C盘不能利用上。这段空间可以新建D盘,但C盘的扩展方向只能往C盘的尾部方向扩展,不能往头部方向扩展。
B. mbr(gpt)转gpt(mbr)麻烦,还会经常失败
失败原因见A。
mbr转gpt可以用windows原生自带的mbr2gpt.exe。但gpt转mbr则需要操作员用diskgenius手工操作,显得操作不够流畅。
C. 砍减qcow2会砍减掉gpt备份
多数情况下没有问题。但是毕竟就使用了不正规的gpt分区形式,有隐患。
D. n个磁盘里的m个分区不能整合到一个qcow2里
n个磁盘就会生成n个vhd。1.x方案没法将n个vhd整合成一个qcow2。
4. 精进方案的构想
4.1 流程
A. 展示源硬盘
例如源硬盘有2个,p2v工具的ui直接展示出来:
| 分区表表头 | 引导分区(500MB) | D盘(160G) | C盘(30G) | 恢复分区(500MB) | E盘(110G) |
| 分区表表头 | F盘(100G) | G盘(50G) |
B. 勾选分区
用户在UI上勾选了若干分区,并要求组装成如下形式:
| 分区表表头 | 引导分区(500MB) | 恢复分区(500MB) | F盘(100G) | D盘(160G) | C盘(30G) |
C. 新建qcow2
p2v工具用qemu工具直接新建291G的qcow2。
D. 挂载qcow2
用TCI产品的rjvdisk的技术,把qcow2像物理磁盘一样挂载到Windows的磁盘管理器里。
E. 给qcow2磁盘新建分区表
如B样式划分分区位置和大小。
F. 分区拷贝
直接读取源磁盘各个分区的裸数据,拷贝到qcow2磁盘对应的分区位置里。
G. 其它流程
执行2.1的D、E、F、I、K。
4.2 新方案改良点
A. 跳过大几十G的vhd文件的生成
B. 天然规避了磁盘签名(guid)的雷同
由于4.1.E是新建的分区表,所以磁盘的mbr签名或者gpt的磁盘guid都是新建的,大概率不会跟源磁盘雷同。
C. 不需mbr转gpt或gpt转mbr
D. 镜像分区灵活
可以达成n个磁盘里的m个分区能整合到一个qcow2里。
可以保证C盘的末尾一定是磁盘的末尾,这样C盘就会有充分的扩展空间。
不会出现C盘前头存在未分配空间的情况。
5. 关于精进方案的初步的可行性验证
5.1 把qcow2像物理磁盘一样挂载
TCI产品的vdisk.sys程序就是在Windows开机的早期阶段,模拟一个achi磁盘控制器,再把qcow2当作真实磁盘一样挂载在磁盘控制器下,然后从这个磁盘启动Windows。本文方案在Windows启动之后再模拟一个achi磁盘控制器,再把qcow2挂载和卸载,应该是容易达成的,技术上充分具备的。
5.2 直接读取源磁盘各个分区的裸数据,拷贝到qcow2磁盘对应的分区位置里
直接读写磁盘某某段落的裸数据,p2v1.0已达成。
识别出某个分区的空间是从磁盘头偏移X字节到Y字节,那需要能解析并理解分区表。我也充分清楚了解。
相关文章:
从源PC上一次性p2v(qcow2)的构想
磁盘分区表,虚拟硬盘文件,操作系统引导 1. 基本概念和术语 源硬盘:一般就是客户的PC机的硬盘,硬盘里面包含了Windows分区。 源Windows:以源硬盘启动的Windows环境。 虚拟磁盘文件:文件格式有qcow2、vhd…...
数据结构:KMP算法
1.何为KMP算法 KMP算法是由Knuth、Morris和Pratt三位学者发明的,所以取了三位学者名字的首字母,叫作KMP算法。 2.KMP的用处 KMP主要用于字符串匹配的问题,主要思想是当出现字符串不匹配时,我们可以知道一部分之前已经匹配过的的文…...
小程序真机如何清除订阅数据
在做小程序订阅消息开发的过程中发现,真机上如果是选择了‘总是保持以上选择’,一旦用户授权后,后面就不会再弹出申请改订阅消息的授权弹窗,这对于开发过程中是很不方便的。 曾试过清除缓存,重进小程序也不能清除掉 解…...
基于ssm出租车管理系统的设计与实现论文
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本出租车管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…...
音视频转码
音视频转码是指: 容器中音视频数据编码方式转换,如由H.264编码转成mpeg-4编码,mp3转成AAC;音视频码率的转换,如4Mb视频码率降为2Mb,视频分辨率的转换,如1080P转换为720P,音频重采样…...
编解码异常分析
前言 最近在做的项目,有H264解码的需求。部分H264文件解码播放后,显示为绿屏或者花屏。 分析 如何确认是否是高通硬解码的问题 adb 指令 adb root adb remount adb shell setenforce 0 adb shell setprop vendor.gralloc.disable_ubwc 1 adb shell c…...
APISpace 热门好用的API推荐,含免费次数
短信验证码:可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商,3秒可达,99.99%到达率,支持大容量高并发。通知短信:短信通知支持三大运营商以及虚拟运营商,我们提供电信级运维…...
Qt/QML编程学习之心得:一个.qml文件调用另一个.qml文件(十七)
在c++中,一个文件调用另外一个文件最直接最快捷的方式就是#incldue<头文件>的使用,那么在元数据描述性语言QML中,如何从一个界面描述调用另外一个界面描述,一个.qml文件调用另外一个.qml呢?QML虽然有个import,但是用法可以说完全不同于#include。 引用方法1:直接…...
C++_单列模式介绍
介绍 (1)…什么是单例 1.只能有一个实例化的对象的类(2).单例有什么用 1.多线程的线程池的设计 2.系统中只需要一个窗口时才使用单例(无法重复创建) 3.一个操作系统只能有一个文件系统(3).单例怎么用 1.隐藏所有构造函数 2.静态成员内部调用构造函数实例化 3.提供一个静态函数来…...
油烟净化器如何做到高效净化?科技力量,清新餐饮生活
我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 油烟净化器的出现,为我们的餐饮生活注入了一抹清新的色彩。然而,它究竟是如何工作的?为何能…...
【HTML5】HTML5 语音合成
一、前言 前一段时间在项目中需要用到播报文字语音。找到了 HTML 5 有这样的功能。 现在有时间进行总结下。 二、SpeechSynthesis SpeechSynthesis 接口是语音服务的控制接口。它可以用于获取设备上关于可用的合成声音的信息, 开始、暂停语音,或者别…...
顺序表的实现
目录 一. 数据结构相关概念 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为: 3.2 接口实现: 四、基本操作实现 4.1顺序表初始化 4.2检查空间,如果满了,进行增容编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…...
深度学习中的池化
1 深度学习池化概述 1.1 什么是池化 池化层是卷积神经网络中常用的一个组件,池化层经常用在卷积层后边,通过池化来降低卷积层输出的特征向量,避免出现过拟合的情况。池化的基本思想就是对不同位置的特征进行聚合统计。池化层主要是模仿人的…...
Java面试整理-Java设计模式
Java中的设计模式通常是从更广泛的面向对象设计模式中借鉴而来的,这些模式旨在解决特定的设计问题和改善代码的可维护性、灵活性和可扩展性。设计模式大致可以分为三类:创建型、结构型和行为型。以下是这三类中一些常见的设计模式: 创建型模式 单例模式(Singleton):确保一…...
用CHAT了解更多知识点
问CHAT:什么是硅基生命和碳基生命? CHAT回复:硅基生命和碳基生命是两种理论性的生物体类型,这些生物体主要是由硅或碳元素以及其他元素构成的。 碳基生命是我们当前所熟知的生命形式。碳元素能够形成稳定且复杂的分子,…...
一个利用摸鱼时间背单词的软件
大家好,我是 Java陈序员。 最近进入了考试季,各种考试,英语四六级、考研、期末考等。不知道大家的英语四六级成绩怎么样呢? 记得大学时,英语四级都是靠高中学习积累的老本才勉强过关。 而六级则是考了多次ÿ…...
Matlab/Simulink的一些功能用法笔记(3)
01--引言 最近加入到一个项目组,有一些测试需要去支持,通过了解原先团队的测试方法后,自己作了如下改善,大大提高了工作效率。这也许就是软件开发的意义吧,能够去除一些重复的机械的人工操作并且结果还非常不可靠。 …...
Wafer晶圆封装工艺介绍
芯片封装的目的(The purpose of chip packaging): 芯片上的IC管芯被切割以进行管芯间连接,通过引线键合连接外部引脚,然后进行成型,以保护电子封装器件免受环境污染(水分、温度、污染物等)&…...
Mac OS 13+,Apple Silicon,删除OBS虚拟摄像头(virtual camera),
原文链接: https://www.reddit.com/r/MacOS/comments/142cv OBS为了捕获摄像头视频,将虚拟摄像头插件内置为系统插件了.如下 直接删除没有权限的,要删除他,在mac os 13以后,需要关闭先关闭苹果系统的完整性保护(SIP) Apple 芯片(M1,....)的恢复模式分为两种,回退恢复模式,和…...
精解 ES6 Promise 用法
🐱 个人主页:SHOW科技,公众号:SHOW科技 🙋♂️ 作者简介:2020参加工作,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏&#x…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
