VirtualBox 7.0.12下如何将VBoxManage clonemedium的输出通过管道传递给dd并写入/dev/sda
VirtualBox 7.0.12下如何将VBoxManage clonemedium的输出通过管道传递给dd并写入/dev/sda
我完全懂你的困扰——本地只有128GB磁盘,根本存不下2TB的中间RAW文件,想直接把VBoxManage的转换输出管道给dd写入硬盘,但VirtualBox 7.x已经砍掉了老版本里用-指定标准输出的功能,确实挺棘手的。不过别慌,我们可以用**命名管道(Named Pipe)**绕开这个限制,全程不需要生成中间文件,也不会占用额外磁盘空间。
下面是具体操作步骤:
- 先创建一个临时的命名管道,名字随便取,比如
vdi_transfer_pipe:mkfifo vdi_transfer_pipe - 后台启动dd命令,让它从这个管道读取数据并写入目标硬盘
/dev/sda(bs=4M是为了提升读写速度,status=progress能实时显示进度):dd if=vdi_transfer_pipe of=/dev/sda bs=4M status=progress & - 紧接着运行VBoxManage的转换命令,把
box.vdi转换成RAW格式写入刚才创建的命名管道:VBoxManage clonemedium box.vdi vdi_transfer_pipe --format=RAW - 等转换和写入全部完成后,删掉这个临时管道即可:
rm vdi_transfer_pipe
原理说明
命名管道本质是内存中的数据通道,VirtualBox会把它当成普通文件来写入,但实际数据不会落到磁盘上,而是直接通过管道实时流给dd,完美解决了你磁盘空间不足的问题。
注意事项
- 所有命令都需要root权限执行,记得加上
sudo或者切换到root用户。 - 一定要确认
/dev/sda是你要写入的目标硬盘,别写错设备名导致数据丢失! - 如果一开始dd的进度条没动,别着急,等VBoxManage开始输出转换数据后,进度条就会正常更新了。
备注:内容来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

