qemu-nbd挂载虚拟机镜像文件系统

article/2025/11/1 10:29:13

qemu-nbd挂载虚拟机镜像文件系统

  • 基本原理
  • 操作步骤
    • 1.加载NBD驱动
    • 2. 连接 qemu-nbd
    • 3.挂载
    • 4.解挂
  • 虚机文件系统为LVM实例
    • 1.加载驱动
    • 2.连接qemu-nbd
    • 3.挂载lvm分区
    • 4.卸载盘符
  • 虚机文件系统为非LVM
  • 虚机文件系统为NTFS

基本原理

nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。
  展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上。
  NBD与NFS有所不同:NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式;而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区,更便于用户的使用。
  NBD是一个内核模块,大部分Linux发行版都已包含它。
  在centos中, 编译成模块NBD, 保存在 /lib/modules/$version/kernel/driver/block/
  远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程。
图1. NBD在本地客户端代表远程资源

图1.NBD在本地客户端代表远程资源

文件系统能被挂载到NBD上(上图),而且NBD设备也能够用来组成冗余磁盘阵列(RAID)。在本地Linux上挂载一个EXT2文件系统到NBD,其传输率要比在同样的远程机器上挂载一个NFS快。
图2. 使用NBD的冗余磁盘阵列

图2.使用NBD的冗余磁盘阵列

操作步骤

1.加载NBD驱动

某些版本的 Linux 不加 max_part 参数会导致没有设备节点 /dev/nbd0p{1,2,3,4…} 等。用 kpartx 也不行。
查看有没有加载nbd模块 sudo lsmod |grep nbd
加载nbd模块 sudo modprobe nbd max_part=16

备注信息:查看Linux 模块信息(modinfo),例如查看nbd模块的参数【执行命令modinfo nbd】 。 加载后,在/dev/目录下,根据参数创建nbdxx块设备文件。

2. 连接 qemu-nbd

qemu-nbd -c nbd设备路径 虚拟机镜像路径 [$ sudo qemu-nbd -c /dev/nbd0 centos.qcow2]
这里注意查看分区: sudo fdisk -l nbd设备[sudo fdisk -l /dev/nbd0],可能虚拟机不止一个分区(一般还会有一个boot分区)

3.挂载

sudo mount nbd分区 挂载路径 [$ sudo mount /dev/nbd0p1 /mnt/test1 ]

4.解挂

sudo qemu-nbd -d nbd分区[$ sudo qemu-nbd -d /dev/nbd0p1]

虚机文件系统为LVM实例

1.加载驱动

#查看加载的nbd模块
lsmod |grep nbd
#加载nbd模块
modprobe nbd max_part=16

2.连接qemu-nbd

云课堂中,从日志查看镜像路径 vi /var/log/qemu/vmmagent.log

#连接命令qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
qemu-nbd -f qcow2 -c /dev/nbd9 /opt/lessons/images/local_img.qcow2
#更新lvm分区
pvscan --cache
lvscan
vgscan
vgchange -a y
#查看新增文件系统结构
lsblk -f

root@RainOS:/opt/lessons/images# qemu-nbd -f qcow2 -c /dev/nbd9 /opt/lessons/images/local_img.qcow2
root@RainOS:/opt/lessons/images# pvscan --cache
root@RainOS:/opt/lessons/images# lvscaninactive          '/dev/vg202105200202373534/lv1' [33.20 GiB] inherit
root@RainOS:/opt/lessons/images# vgscanReading all physical volumes.  This may take a while...Found volume group "vg202105200202373534" using metadata type lvm2
root@RainOS:/opt/lessons/images# vgchange -a y 1 logical volume(s) in volume group "vg202105200202373534" now active
root@RainOS:/opt/lessons/images# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop7                          7:7    0   700M  0 loop /var/log
sda                            8:0    0 238.5G  0 disk 
├─sda4                         8:4    0   4.5G  0 part /
├─sda2                         8:2    0   100M  0 part 
├─sda5                         8:5    0 231.5G  0 part /opt/lessons
├─sda3                         8:3    0   2.3G  0 part 
└─sda1                         8:1    0   100M  0 part /boot/efi
nbd9                          43:288  0    40G  0 disk 
├─nbd9p1                      43:289  0   300M  0 part 
├─nbd9p4                      43:292  0  33.2G  0 part 
│ └─vg202105200202373534-lv1 253:0    0  33.2G  0 lvm  
├─nbd9p2                      43:290  0   1.5G  0 part 
└─nbd9p3                      43:291  0     5G  0 part 

3.挂载lvm分区

#挂载分区mount /dev/vgname/lvname /your/mount/point
mount /dev/kylinvg2021042901/lv1 /tmp/test/
mount /dev/nbd9p3 /tmp/boot/

4.卸载盘符

#取消挂载
umount /tmp/test/
vgchange -an
#断开NBD连接qemu-nbd -d /dev/your/nbddev
qemu-nbd -d /dev/nbd9
pvscan --cache

虚机文件系统为非LVM

#连接镜像
qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
#查看新增文件系统结构
lsblk -f
#挂载分区
mount /dev/[yournbddev][pn] /your/mount/point # 其中pn代表你要挂载的时镜像里的分区n
#卸载分区
umount /your/mount/point
#断开nbd连接
qemu-nbd -d /dev/your/nbddev

虚机文件系统为NTFS

#连接镜像
qemu-nbd -f qcow2 -c /dev/your/nbddev /image/path
lsblk -f #查看新增文件系统结构

#挂载分区
mount -t ntfs-3g /dev/[yournbddev][pn] /your/mount/point # 其中pn代表你要挂载的时镜像里的分区n

#卸载分区
umount /your/mount/point

#断开nbd连接
qemu-nbd -d /dev/your/nbddev

注意

  1. 一般如果虚机在运行中突然断电关机(比如直接杀死qemu进程或者用virsh destroy命令关闭),此时虚机文件系统可能损坏,这时候直接mount一般会出错,建议用-o ro,norecovery选项挂载
  2. 在卸载过程中需要考虑是否有进程正在占用文件,一般用fuser -k
  3. 注意mount和umount命令的用法

参考
挂载qcow2文件,qcow2里边还有个lvm
linux nbd & qemu-nbd
QEMU-NBD
通过qemu-nbd方式挂载qcow2镜像格式
基于LVM和NBD实现网络远程LVM镜像方法
How to Mount Guest Qcow2 Virtual disk Image containing LVM on KVM Host Machine


http://chatgpt.dhexx.cn/article/eUhh6Uh2.shtml

相关文章

linux qemu-nbd介绍

1. 介绍 NBD(Network Block Device),即网络块设备。可以将一个远程主机的磁盘空间,当作一个块设备来使用。就像一块硬盘一样使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上。NBD与NFS有所不同&am…

centos7 nbd 挂在qcow2或qcow,raw,虚机镜像,virsh,virt,使用qemu-nbd挂载qcow2镜像文件

基本原理 nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。   展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,你可以很…

linux nbd模块,Centos7.3 安装编译nbd模块-Go语言中文社区

未安装nbd模块 [zhaojqlocalhost ~]$modprobe nbd modprobe: FATAL: Module nbd not found. 查看linux版本 [zhaojqlocalhost ~]$cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [zhaojqlocalhost ~]$uname -r 3.10.0-514.26.2.el7.x86_64 安装 [rootlocalhost…

linux nbd模块,Centos7.3 安装编译nbd模块

未安装nbd模块 [[email protected] ~]$ modprobe nbd modprobe: FATAL: Module nbd not found. [[email protected] ~]$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [[email protected] ~]$ uname -r 3.10.0-514.26.2.el7.x86_64 安装 [[email protected] …

NBD(Network Block Device)简介及基本使用

NBD指的是Network Block Device,正如其名字的意思,NBD让用户可以通过网络访问到某个块设备,或者设备镜像。 你可能会想NFS(Network File System)不是已经可以实现通过网络挂载各种文件系统并进行访问了吗,…

微信开放平台开发者认证

1.邮箱注册,激活账号 2.企业认证 3.登陆微信开放平台,进行开发者认证 4.填写认证信息 5.发票选择,可以选择不开发票 6. 支付费用300 备注:如有疑问,请联系作者!

微信开放平台开发(3) 移动应用微信登录

在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现移动应用微信登录的功能。 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号&#x…

微信开放平台之第三方平台开发,模板小程序如何提交?

大家好,我是悟空码字 12月25日,天气晴朗,阳光普照,今天是圣诞节。因为疫情影响,小羊人的增多,街上放眼望去,人烟稀少。楼下除了几个十一二岁的小男孩在玩耍,也没有像往日老人悠闲打…

微信开放平台第三方开发,注册试用小程序,一整套流程

大家好,我是小悟 对服务商来说,试用小程序的好处不言而喻,主打一个先创建后认证的流程。只需要提供小程序名称和openid便可快速注册一个试用小程序,在认证之前,有效期14天,大致流程如下。 注册试用小程序 …

微信开放平台开发第三方授权登陆(五):微信小程序

微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三)&a…

微信开放平台开发-授权、全网发布(PHP)

这两天做了微信开发平台的开发,梳理下。。。 先看看授权的流程: 第一步:接收component_verify_ticket: 1、微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,拿到后需要在本地做好存储&…

微信开放平台开发——网页微信扫码登录(OAuth2.0)

转自 http://www.cnblogs.com/0201zcr/p/5133062.html 1、OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表)&am…

微信开放平台-第三方平台开发配置及常见的问题

目录 概述 参考文档 开源项目&工具 第三方平台设置 问题及解决方法 概述 本实例:第三方平台微信公众号(服务号) 微信开放平台-第三方平台,为广大公众号和小程序提供运营服务和行业解决方案。分两种类型,定制…

微信第三方平台开发(一)

个人感觉微信在第三方平台开发者这块的开发文档写的很不友好,很隐晦,我在开发的过程总结的一些东西,写出来给大家分享一下。恩,就这样吧。 一、注册第三方平台账号 打开https://open.weixin.qq.com/cgi-bin/index?thome/index&…

微信开放平台开发第三方授权登陆(三):Android客户端

微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三)&a…

微信开放平台开发第三方授权登陆(二):PC网页端

微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三)&a…

.md文件用什么软件打开

记事本-------体验感差 效果: Notepad 毫无疑问的完胜记事本 官网下载地址:https://notepad-plus.en.softonic.com/download (下载速度比较慢) 这是百度网盘:(会快一点点) 链接:ht…

md文件打开方式推荐

MD文件介绍 以下介绍来自于百度: md文件是Markdown语法编写的文件,Markdown是一款轻量级的标记语言,可以使用语法来代替排版,插入公式和图片等都非常的容易,目前很多博客都可以使用该语法去编辑。使用Markdown的好处…

md文件如何打开?

阅读md文件时 常常会手足无措 今天教大家如何打开md文件 当在阅览md文件时,一般系统默认是记事本: 阅览效果极其不佳且编辑体验极差! 今天推荐一款软件:Typora 直接上链接:下载地址(官网) …

Windows下右键新建.md文件教程(转)

Windows下右键新建.md文件教程 转载自Keavnn’Blog,并有些许修正 原本创建.md文件需要首先打开markdown文本编辑器,如Typora,或者新建.txt文件然后修改后缀名,本文介绍了如何在Windows操作系统中添加右键创建.md文件的方法。 环…