使用nbd设备挂载镜像进行内容修改




Centos系列发行版默认没有编译nbd内核模块,需要手工编译后加载上才可以使用。在这一点上还是Debian/Ubuntu系列好用。

加载nbd模块方法:

1. 确认内核版本号,执行命令:uname -r
3.10.0-327.el7.x86_64
只支持上述内核版本,其他未验证

2. 拷贝nbd.ko到/lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block目录下,nbd.ko下载地址:nbd.ko.zip

3. 执行命令:depmod -a

4. 加载nbd模块:modprobe nbd

5. 确认nbd加载成功:ls /dev/nbd*可以看到nbd设备,lsmod|grep nbd可以看到内核模块

附1. 编译nbd模块方法:

参考https://www.ljjjustin.xyz/2016/12/07/compile-nbd-module-on-centos7文章中kernel-devel源码包下载链接已失效,kernel-devel源码包下载链接:wget ftp://ftp.icm.edu.pl/vol/rzm6/linux-slc/centos/7.1.1503/updates/Source/SPackages/kernel-3.10.0-327.el7.src.rpm

附2. 使用nbd设备挂载镜像分区方法:

yum install ntfs-3g fuse      ### 安装ntfs文件系统依赖(挂载windows系统镜像需要ntfs文件系统支持)
qemu-nbd -c /dev/nbd10 win2k8r2-cn-qemu-10G.img       ### 挂载镜像到nbd设备,
# 有些镜像挂载到nbd设备之后直接就有分区了,可以通过查看是否出现/dev/nbd10p*来确认是否需要获取分区,如果没有需要用kpartx工具获取
kpartx -a /dev/nbd10     ### 获取镜像分区
ll /dev/mapper/nbd10p*   ### 分区在这个目录下,p1、p2表示第1、2个分区
mount /dev/mapper/nbd10p1 /mnt  ### 挂载镜像的第一个分区,Linux一般是vda1,windows一般是保留分区,而不是C盘
ll /mnt/
umount /mnt        ### umount
mount /dev/mapper/nbd10p2 /mnt  ### 挂载第2个镜像分区(可以直接挂载第2个分区,上面挂载第1个分区是为了演示)
cd /mnt/
ll
cd Program\ Files     ### 这次是C盘了
ll
cd Qemu-ga/      ### 切换到想修改的文件所在目录,之后可以替换、删除、修改等操作
umount /mnt         ### 操作结束后,umount挂载目录
kpartx -d /dev/nbd10        ### 卸载分区
qemu-nbd -d /dev/nbd10     ### 从nbd设备上卸载镜像

 

2018-11-15更新

在Centos7.5上编译可能报错:
Makefile:901: "Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev or elfutils-libelf-devel"
No rule to make target `tools/objtool/objtool'
可参考:https://blog.csdn.net/miaodichiyou/article/details/76050361