首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用qemu-img从原始映像生成VMDK映像时设置UUID。

使用qemu-img从原始映像生成VMDK映像时设置UUID。
EN

Unix & Linux用户
提问于 2020-06-23 05:35:13
回答 1查看 1.1K关注 0票数 1

可以使用这样的qemu-img将原始映像转换为VMDK映像:

代码语言:javascript
运行
AI代码解释
复制
qemu-img convert -O vmdk "$_raw" "$_vmdk"

我知道可以用以下方式设置生成的VMDK映像的UUID:

代码语言:javascript
运行
AI代码解释
复制
VBoxManage internalcommands sethduuid "$_vmdk" "$_uuid"

在用qemu-img转换磁盘时,是否有一种方法可以设置它的UUID (如果该解决方案在FreeBSD上工作的话)?

EN

回答 1

Unix & Linux用户

发布于 2020-06-24 06:29:24

这个答案是从我的头顶,没有测试。如果您测试它,请随时更新答案。

不幸的是,这个问题没有什么背景来解释我们为什么要这样做。从表面上看,我们只需参考undefined并给出答案:不。

但那会很无聊的。相反,让我们做一些疯狂的假设,然后继续做下去。

您所描述的解决方案可以在FreeBSD上使用来自模拟器/qemu-utilsqemu-img和来自仿真器/虚拟盒-ose的vboxmanage。也许这就是你要做的?但是您没有说明为什么这是一个问题(也许只想少使用一个工具?)。

有趣的是,这仅仅意味着:您正在磁盘上使用GUID划分表(GPT)qemu-img并不真正关心磁盘上的内容,而vboxmanage足够好,可以有一个助手函数。

作为磁盘

因此,如果您有/dev/ada0的完整原始副本为ada0.dd (或者仅仅是在Qemu中生成的原始文件),那么您可以将该映像用作虚拟内存磁盘:

代码语言:javascript
运行
AI代码解释
复制
# mdconfig -a -t vnode -u 0 -f /home/johndoe/ada0.dd

这将给我们/dev/md0,这应该是您的完整磁盘。

然后你可以检查一切看起来都很好。

代码语言:javascript
运行
AI代码解释
复制
# fdisk /dev/md0

这张应该和你的旧磁盘一模一样。

代码语言:javascript
运行
AI代码解释
复制
# glabel status

在使用GPT时,您可能更喜欢使用gpart

代码语言:javascript
运行
AI代码解释
复制
# gpart create -s gpt /dev/md0

UUID是使用此命令自动创建的。我不知道它是否真的触及了分区表中的条目。在这种情况下,首先进行备份。也许毁了完整的表格-创建然后恢复?您需要在这里做一些测试。但关键是你现在可以完全访问驱动器。

您也可以使用这种方法挂载文件系统。

作为文件

当我们检查来自维基百科的GUID分区表示意图时,我们被告知,我们在分区表标头中的偏移量56处发现了混合endian中的磁盘GUID。

因此,与其挂载磁盘映像,我们可以简单地将它们视为一组字节。我假设您使用的是512字节扇区,但可能需要对4K扇区进行调整。标头位于LBA 1,我们对偏移量56感兴趣,因此512 + 56 = 568。

代码语言:javascript
运行
AI代码解释
复制
$ hexdump -v -s 568 -n 16 -e '1/1 "%.2x\n"' /home/johndoe/ada0.dd

然后,我们可以简单地更改所需的字节。对于这一点,Hexdump是不够的,您应该看看xxd,它是编辑/vim附带的。乌伊琴可以帮助您生成一个正确的GUID。

如果你沿着这条路走,请注意:

  • 在编写任何东西之前,通过检查签名"EFI部件“使您的脚本重新生效。
  • 请记住,您有标头的第二份副本,也需要更正(通过偏移量32找到它)。

这将是一个有趣的小脚本编写。

我有一个偷偷摸摸的怀疑,你真正想要的是保持原始的原始形象,并在飞行中做事情。我们在一定程度上是因为xxd同时支持stdinstdout,这样我们就可以通过管道输送。不幸的是,qemu-img似乎不支持stdin

那么我们必须在磁盘上有一个文件。实用的解决方案是将原始文件作为备份,并使用新的副本进行修改。这只会增加磁盘空间的成本。

但是当您在FreeBSD上时,您有一种快速的方法来保存磁盘空间,避免复制。您可以将ZFS用于您的优势。只需创建一个新的数据集,就可以放置原始图像文件并执行快照。然后,您可以直接修改文件,但它只会影响已更改的字节(或者更确切地说,影响已更改的扇区)。完成后,可以通过回滚快照来快速恢复这些扇区。

因为我们不想快照所有的东西,所以我们创建了一个特定的数据集

代码语言:javascript
运行
AI代码解释
复制
# zfs create zroot/rawfiles

我们将需要的任何数据放置到/rawfiles中,并为干净的状态创建快照。

代码语言:javascript
运行
AI代码解释
复制
# zfs snapshot zroot/rawfiles@cleanstate

然后,我们可以在潜在的大图像文件中修改几个字节。当我们想回到干净的状态时,我们就会后退。

代码语言:javascript
运行
AI代码解释
复制
# zfs rollback zroot/rawfiles@cleanstate

如果你有空间限制,那么这是一个快速可行的选择。如果你做了这样的事情,那么如果你继续后退的话,要小心比赛条件。

如果将其作为备份“以防万一”,则可以跳过创建单独的数据集,只需执行zfs snapshot zroot@hailmary。如果一切都破裂了,那就只有cp /.zfs/snapshot/hailmary/......

手动

如果你有影响的形象创作过程,我们有一些有趣的选择,以及。

我们可以使用qemu-img创建一个新映像,挂载它并创建GPT (使用一个新GUID)。

代码语言:javascript
运行
AI代码解释
复制
# qemu-img create -f raw VM10G.raw 10G
# mdconfig -a -t vnode -u 0 -f VM10G.raw
# gpart create -s gpt /dev/md0

但是,由于它只是一个文件,所以我们不需要qemu-img

代码语言:javascript
运行
AI代码解释
复制
# truncate -s 10g VM10G.raw
# mdconfig -a -t vnode -u 0 -f VM10G.raw
# gpart create -s gpt /dev/md0

请参阅从头构建可引导的UFS映像

我为什么要展示这个?好吧,也许你在做些什么。然后,我们在FreeBSD:mkimg(1)上有了一个非常巧妙的技巧。

这样您就可以在FreeBSD上创建磁盘映像,它支持QCOW、QCOW2、动态VHD、固定VHD、VMDK和RAW。这意味着您可以直接访问VMDK。

代码语言:javascript
运行
AI代码解释
复制
mkimg -f vmdk -s gpt -b /boot/pmbr -p freebsd-boot:=/boot/gptboot -p freebsd-ufs:=root-file-system.ufs -p freebsd-swap::1G -o gpt.vmdk

示例以FreeBSD为中心,但它使用的是原始分区。因此,如果您将源从原始的完整磁盘映像更改为仅分区映像,则应该有一个可行的路径。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/594587

复制
相关文章
oracle用户更改密码_修改system用户密码
前几天通过plsql登录数据库时,提示密码过期,需要修改密码,那就修改呗。改完过了会,再登录,发现用户被锁了。那就去解锁下吧。
全栈程序员站长
2022/09/19
2.9K0
oracle用户更改密码_修改system用户密码
oracle更改用户的密码
1、以system或者sys的身份登录。登录语句sqlplus system/psw@ora_name或者sqlplus sys/psw@ora_name as sysdba。
全栈程序员站长
2022/09/19
2.5K0
oracle数据库用户更改密码_oracle用户密码忘记了
1.WIN+R打开运行窗口,输入cmd进入命令行: 输入sqlplus ,输入用户名,输入口令(如果是超级管理员SYS的话需在口令之后加上as sysdba)进入sql命令行;
全栈程序员站长
2022/09/19
2.7K0
oracle数据库用户更改密码_oracle用户密码忘记了
mysql 如何修改用户密码_MySQL如何更改用户密码
2、正在更改密码的用户正在使用该应用程序,因为如果在不更改应用程序的连接字符串的情况下更改密码,则应用程序将无法连接到数据库服务器。
全栈程序员站长
2022/09/07
4.8K0
linux oracle修改密码_linux 更改用户密码
大家好,又见面了,我是你们的朋友全栈君。 Linux环境中修改Oracle用户密码
全栈程序员站长
2022/09/19
12.2K0
09-4 更改用户密码
五、更改用户密码 本章最后一个主题,将介绍用户如何为自己设置密码(如果拥有超级用户权限,那么也可以为其它用户设置密码)。 1.passwd-设置或更改密码 使用 passwd 命令可以设置或更改密码。 (1)语法格式 passwd [user] ''' 功能: 设置或更改密码. 参数: ① user : 可选参数,通过指定一个用户名作为 passwd 命令的参数来为其设置密码(前提是**具有超级用户权限**)。 (若不指定 user 参数,也就是直接输入passwd 命令,更改的是**
见贤思齊
2020/08/11
9970
09-4 更改用户密码
linux修改用户密码命令_linux更改用户密码的命令
使用的Linux版本是:ubuntu-18.10-live-server-amd64
全栈程序员站长
2022/10/04
14.6K0
linux修改用户密码命令_linux更改用户密码的命令
Ubuntu更改密码和用户名步骤
Ubuntu是一个Linux操作系统,修改密码和用户名是有危险的动作,请谨慎修改。
葆宁
2019/04/18
74.7K2
Ubuntu更改密码和用户名步骤
Ubuntu 中更改默认的 root 用户密码,以及怎样修改用户密码
如题,相信许多刚接触 Ubuntu 系统的新手大多会遇到这个问题,那么我们该如何解决这个问题呢?Ubuntu 在安装过程中并没有让我们设置 root 用户密码,但当我们需要获取 root 用户的权限时,就会让我们输入 root 用户的密码,如下图,
村雨遥
2022/06/15
6.7K0
Ubuntu 中更改默认的 root 用户密码,以及怎样修改用户密码
通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)
1、用户名和密码的存储位置存储帐号的文件:/etc/passwd存储密码的文件:/etc/shadow2、可以使用cat、more、head、tail以及vim等命令查看或者修改,如下图所示:比如要查找系统中admin普通用户的密码,则执行:cat/etc/shadow|grep"admin"3、注意:/etc/shadow文件中的密码不是明文密码.如上图所示,第1个“:”号后面的即为“口令”字段,存放的是加密后的用户口令字,长度为13个字符.如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登录.
全栈程序员站长
2022/06/24
88.2K0
通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
在MySQL中,可以使用3种不同的语句更改用户帐户密码:UPDATE statementSET PASSWORD statementALTER USER statement.
全栈程序员站长
2022/09/21
5.9K0
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
域用户忘记密码,如何通过winpe重置密码
1、进入救援模式(winpe),导航到系统盘system32目录下,重命名osk.exe为osk_bak.exe,后续还需要改回来
Windows技术交流
2022/07/26
14.4K0
mysql8.0修改用户密码_sql数据库更改用户登录密码
示例:修改mysql数据库中的user表中的test用户的登录密码。 MySQL版本号:8.0.15
全栈程序员站长
2022/09/21
3.4K0
mysql8.0修改用户密码_sql数据库更改用户登录密码
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 c
入门笔记
2022/06/02
3.6K0
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 ch
玖柒的小窝
2021/10/21
2.9K0
linux命令行修改用户名_linux 更改用户密码
一、《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在 Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。
全栈程序员站长
2022/09/30
5.7K0
confluence更改admin密码
在做confluence数据迁移之后,出现了使用admin账户无法登录,日志报错信息如下:
dogfei
2020/07/31
5.5K0
Mysql 5.7更改密码
如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。
用户5760343
2022/05/23
3.9K0
更改 MySql root 密码
回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
onety码生
2018/11/21
12.9K1
13.1 设置更改root密码
设置更改root密码目录概要 /usr/local/mysql/bin/mysql -uroot 更改环境变量PATH,增加mysql绝对路径 mysqladmin -uroot password '123456' mysql -uroot -p123456 密码重置 vi /etc/my.cnf//增加skip-grant 重启mysql服务 /etc/init.d/mysqld restart mysql -uroot use mysql; update user set password=passwo
运维小白
2018/02/06
3K0

相似问题

在Java/Scala中复制CouchDB 1.2.0密码哈希函数

11

更改密码Bitnami CouchDB

13

通过api更改CouchDB1.2中的密码?

12

CouchDB::客户端用户/密码

17

通过JDBC更改用户密码

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档