IT. POST LIST

POST ALL LABEL

nbd (qcow2 이미지 마운트 with kernel builde , modprobe: FATAL: Module nbd not found.) 생성 및 사용법

By 때찌때찌맴매 - 7월 02, 2021

nbd (qcow2 이미지 마운트 with kernel builde , modprobe: FATAL: Module nbd not found.) 생성 및 사용법 

loop device :  qcow2 이미지 파일의  파티션을 인식하지 못함.  raw type 이미지 파일만 인식 가능. 단, 정상적인 파티션이 있을경우에만 연결이 가능.

nbd device : 이미지 파일 모두 가능. nbd 모듈이 있어야 하며, OS 설치를 minimal 로 했을경우 커널 컴파일이 필요.

[ 해결 방법 ] 
I. qcow2 => raw 이미지 파일로 변환해 loop device 에 연결하여 마운트.
II. qemu-nbd 명령어를 통해 nbd device 에 연결하여 마운트.


convert qcow2 to raw format
yum install qemu-img

qcow2 to raw
qemu-img convert -f qcow2 -O raw {{img_name}}.qcow2 {{img_name}}.img

raw to qcow2
qemu-img convert -f raw -O qcow2 {{img_name}}.img {{img_name}}.qcow2
##mount losetup /dev/loop0 /{{path}}/{{img_name}}.img
kpartx -a /dev/loop0 mount /dev/mapper/loop0p3 /{{path}}/{{mount_point}} losetup -a
##unmount umount /{{path}}/{{mount_point}} kpartx -d /dev/loop0 losetup -d /dev/loop0 losetup -a
[ 시나리오 I ]
[root@new-kvm08 13:54:30:/home/test]# ll
합계 2927556
drwxr-xr-x  2 root root         24  7월  2 13:54 .
drwxr-xr-x. 6 root root         57  7월  2 13:54 ..
-rw-r--r--  1 root root 2997878784  7월  2 13:53 test.qcow2
[root@new-kvm08 13:54:31:/home/test]# losetup /dev/loop7 test.qcow2
[root@new-kvm08 13:54:47:/home/test]# kpartx -a /dev/loop7
[root@new-kvm08 13:55:05:/home/test]# mount /dev/mapper/loo
## 해당 위치에서 아무리 tab을 눌러도 넘어 가지 않음. 파티션이 매핑이 안되었기 때문

[root@new-kvm08 13:55:05:/home/test]# ll /dev/mapper/
합계 0
drwxr-xr-x  2 root root      60  7월  2 12:16 .
drwxr-xr-x 19 root root    3820  7월  2 12:16 ..
crw-------  1 root root 10, 236  7월  1 15:36 control
## 매핑된 loop device 없음
[root@new-kvm08 14:01:57:/home/test]# kpartx -d /dev/loop7
[root@new-kvm08 14:02:05:/home/test]# losetup -d /dev/loop7
##loop 해제 후 컨버팅 진행

[root@new-kvm08 14:02:54:/home/test]# qemu-img convert -f qcow2 -O raw test.qcow2 test.img
[root@new-kvm08 14:03:30:/home/test]# ll
합계 5770500
drwxr-xr-x  2 root root         40  7월  2 14:03 .
drwxr-xr-x. 6 root root         57  7월  2 13:54 ..
-rw-r--r--  1 root root 8589934592  7월  2 14:03 test.img
-rw-r--r--  1 root root 2997878784  7월  2 13:53 test.qcow2

[root@new-kvm08 14:03:31:/home/test]# losetup /dev/loop7 test.img
[root@new-kvm08 14:03:58:/home/test]# kpartx -a /dev/loop7
[root@new-kvm08 14:04:01:/home/test]# mkdir img_mount
[root@new-kvm08 14:04:15:/home/test]# mount /dev/mapper/loop7p3 img_mount/
[root@new-kvm08 14:04:32:/home/test]# df -Th | grep img_mount
/dev/mapper/loop7p3 xfs             6.2G  2.0G  4.3G  31% /home/test/img_mount
## 정상적으로 연결

[root@new-kvm08 14:06:09:/home/test]# umount img_mount/
[root@new-kvm08 14:08:04:/home/test]# kpartx -d /dev/loop7
[root@new-kvm08 14:08:07:/home/test]# losetup -d /dev/loop7
## 작업 후 해제.
## 이미지를 raw 형태로 사용 가능 하면 그대로 사용 해도 되고, 아니면 다시 역으로 컨버팅해서 사용.

###########################################################################################
## 만약 loop device 자체가 없다면 loop 모듈이 없어서 그렇기 때문에 모듈 로드및 장치 활성화 하여 사용.
[root@new-kvm08 14:08:11:/home/test]# vi /etc/modprobe.d/loop-local.conf
## 파일이 없다면 생성.

options loop max_loop=10
##  내용 삽입. 숫자는 장치 개수.

[root@new-kvm08 14:21:24:/home/test]# modprobe loop
[root@new-kvm08 14:21:29:/home/test]# lsmod | grep loop
loop                   28072  0

[root@new-kvm08 14:43:07:/home/test]# ll /dev/loop
loop-control  loop0         loop1         loop2         loop3         
loop4         loop5         loop6         loop7         loop8         loop9


nbd device mount
yum install qemu-common
modprobe nbd

qemu-nbd -c /dev/nbd0 /{{path}}/{{img_name}}.qcow2
mount /dev/nbd0p3 /{{path}}/{{mount_point}}


[ 시나리오 2-1 ]
[root@new-kvm08 15:04:32:/home/test]# qemu-nbd -c /dev/nbd0 test.qcow2
[root@new-kvm08 15:04:36:/home/test]# mount /dev/nbd0p3 img_mount/
[root@new-kvm08 15:04:50:/home/test]# df -Th | grep img
/dev/nbd0p3        xfs             6.2G  2.0G  4.3G  31% /home/test/img_mount



[ 시나리오 2-2 ]
[root@new-kvm08 15:19:13:/home/kvm]# modprobe nbd
modprobe: FATAL: Module nbd not found. ## os설치 시 minimal로 설치 하게 되면 nbd 모듈이 없기 때문에 커널을 재컴파일을 해야함. [root@new-kvm08 ]# yum install rpm-build [root@new-kvm08 ]# uname -r 3.10.0-1160.31.1.el7.x86_64 [root@new-kvm08 ]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) ## 본인의 os버전과 커널 버전 확인 후 다운. [root@new-kvm08 ]# cd /usr/local/src [root@new-kvm08 ]# wget http://vault.centos.org/7.9.2009/updates/Source/SPackages/ kernel-3.10.0-1160.31.1.el7.src.rpm
[root@new-kvm08 ]# rpm -ivh kernel-3.10.0-1160.31.1.el7.src.rpm ## rpm 설치 [root@new-kvm08 ]# mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} [root@new-kvm08 ]# echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros [root@new-kvm08 ]# cd ~/rpmbuild/SPECS [root@new-kvm08 ]# rpmbuild -bp --target=$(uname -m) kernel.spec ## build 진행시 의존성 문제로 패키지가 나오면 해당 패키지 설치 [root@new-kvm08 ]# yum install gcc xmlto asciidoc hmaccalc python-devel newt-devel perl pesign elfutils-devel binutils-devel bison audit-libs-devel java-devel numactl-devel pciutils-devel ncurses-devel python-docutils flex perl-ExtUtils-Embed [root@new-kvm08 ]# cd ~/rpmbuild/BUILD/kernel-3.10.0-1160.31.1.el7/linux-3.10.0-1160.31.1.el7.centos.x86_64 [root@new-kvm08 ]# sed -i 's/REQ_TYPE_SPECIAL/REQ_TYPE_DRV_PRIV/' drivers/block/nbd.c ## 빌드 준비 [root@new-kvm08 ]# make menuconfig # Device Driver -> Block devices -> Set “M” On “Network block device support ## 메뉴가 나오면 위에 메뉴를 순차적으로 들어가 “Network block device support” 장치에서 "M"을 눌러 활성화. [root@new-kvm08 ]# make prepare && make modules_prepare && make [root@new-kvm08 ]# make M=drivers/block -j8 [root@new-kvm08 ]# modinfo drivers/block/nbd.ko [root@new-kvm08 ]# cp drivers/block/nbd.ko /lib/modules/3.10.0-1160.31.1.el7.x86_64/extra/ [root@new-kvm08 ]# depmod -a && modprobe nbd ## nbd.ko 모듈 복사 및 모듈 활성화. [root@new-kvm08 ]# qemu-nbd -c /dev/nbd0 test.qcow2 [root@new-kvm08 ]# mount /dev/nbd0p3 img_mount/ [root@new-kvm08 ]# df -Th | grep img /dev/nbd0p3 xfs 6.2G 2.0G 4.3G 31% /home/test/img_mount ## 정상적으로 연결 ########################################################################################### ## 만약 nbd 장치가 없다면 loop 장치 처럼 conf 파일 생성 후 모듈 다시 적용 시키면됨. [root@new-kvm08 ]# vi /etc/modprobe.d/nbd.conf ## options nbd max_part=16 nbds_max=128
## [root@new-kvm08 ]# modprobe nbd [root@new-kvm08 ]# ll /dev/nbd nbd0 nbd1 nbd10 nbd11 nbd12 nbd13 nbd14 nbd15 nbd2 nbd3 nbd4 nbd5 nbd6 nbd7 nbd8 nbd9 또는 modprobe nbd nbds_max=128






  • Share:

You Might Also Like

0 개의 댓글