1. 程式人生 > >kvm虛擬化之guest映象檔案的掛載

kvm虛擬化之guest映象檔案的掛載

實際應用中的KVM主機也會遇到像物理機一樣的情況,如系統崩潰、無法引導等情況。物理機會現該情況時,我們可以通過光碟引導、單使用者模式、PE引導、修復或升級安裝等方式獲取系統內的檔案和資料,KVM中也不但同樣也可以使用上述方法,而且可以利用KVM 本身為我們提供的特性將分割槽掛載到物理機的分割槽上進行分析、檢視、甚至資料提取。這裡還是以raw、qcow2兩種格式的掛載為例進行說明。

一、raw磁碟映象的掛載

由於raw格式簡單原始,所以其通常做為多種格式互相轉換的中轉格式。所以對raw格式的img檔案會做重點篇幅的一個介紹。raw格式的分割槽掛載也有兩種方法。

方法一:offset偏移計演算法

該方法的思路為找出分割槽開始的開始位置,使用mount命令的offset引數偏移掉前面不需要的,即可得到真正的分割槽。其具體步驟如下:
1. 用“fdisk -lu my.img”查詢image資訊;

  1. [[email protected] file]# fdisk -lu /file/centos.img
  2. You must set cylinders.
  3. You can do this from the extra functions menu.
  4. Disk/file/centos.img:0 MB,0 bytes
  5. 255 heads,63 sectors/track,0 cylinders, total 0 sectors
  6. Units= sectors of 1*512=512 bytes
  7. Sector size (logical/physical):512 bytes /512 bytes
  8. I/O size (minimum
    /optimal):512 bytes /512 bytes
  9. Disk identifier:0x0001905c
  10. DeviceBootStartEndBlocksIdSystem
  11. /file/centos.img1 *2048102604751200083Linux
  12. Partition1 does not end on cylinder boundary.
  13. /file/centos.img2 102604862914559309442568eLinux LVM
  14. Partition2 has different physical/logical endings:
  15. phys=(1023,254,63) logical=(3916
    ,63,51)

從上面不難看出,centos.img檔案有兩個分割槽。

2. 計算image內分割槽開始的地方(計算offset),用從N號sector(扇區)開始,則offset=N*M (M為一個sector的大小,一般為512)

  1. [[email protected] file]# echo $((2048*512))
  2. 1048576
  3. [[email protected] file]# echo $((1026048*512))
  4. 525336576
  5. [[email protected] file]#

這兩個值是上面fdisk 檢視的分割槽start的位置 。

3. 使用mount命令掛載為loop裝置

  1. [[email protected] file]# mount -o loop,offset=1048576 centos.img /mnt/
  2. [[email protected] file]# ls /mnt/
  3. config-2.6.32-279.el6.x86_64 efi grub initramfs-2.6.32-279.el6.x86_64.img lost+found symvers-2.6.32-279.el6.x86_64.gz System.map-2.6.32-279.el6.x86_64 vmlinuz-2.6.32-279.el6.x86_64
  4. [[email protected] file]# umount /mnt
  5. [[email protected] file]# mount -o loop,offset=525336576 /file/centos.img /mnt
  6. mount: unknown filesystem type 'LVM2_member'

注:普通分割槽可以正常掛載,LVM分割槽需要再特殊處理,後面會單獨列出。

方法二:kpartx分割槽對映法

  1. [[email protected] file]# kpartx -av centos.img
  2. add map loop2p1 (253:4):01024000 linear /dev/loop2 2048
  3. add map loop2p2 (253:5):061888512 linear /dev/loop2 1026048
  4. [[email protected] file]# mount /dev/mapper/loop2p1 /mnt/
  5. [[email protected] file]# ls /mnt/
  6. config-2.6.32-279.el6.x86_64 initramfs-2.6.32-279.el6.x86_64.img System.map-2.6.32-279.el6.x86_64
  7. efi lost+found vmlinuz-2.6.32-279.el6.x86_64
  8. grub symvers-2.6.32-279.el6.x86_64.gz

使用完成後,解除安裝掛載點,刪除對映關係

  1. [[email protected] file]# umount /mnt/
  2. [[email protected] file]# kpartx -d centos.img
  3. loop deleted :/dev/loop2

LVM分割槽的處理

  1. [[email protected] file]# fdisk -lu centos.img
  2. You must set cylinders.
  3. You can do this from the extra functions menu.
  4. Disk centos.img:0 MB,0 bytes
  5. 255 heads,63 sectors/track,0 cylinders, total 0 sectors
  6. Units= sectors of 1*512=512 bytes
  7. Sector size (logical/physical):512 bytes /512 bytes
  8. I/O size (minimum/optimal):512 bytes /512 bytes
  9. Disk identifier:0x0001905c
  10. DeviceBootStartEndBlocksIdSystem
  11. centos.img1 *2048102604751200083Linux
  12. Partition1 does not end on cylinder boundary.
  13. centos.img2 102604862914559309442568eLinux LVM
  14. Partition2 has different physical/logical endings:
  15. phys=(1023,254,63) logical=(3916,63,51)
  16. [[email protected] file]# echo $((1026048*512))
  17. 525336576
  18. [[email protected] file]# losetup /dev/lo
  19. log loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7
  20. [[email protected] file]# losetup /dev/loop0 centos.img -o 525336576
  21. losetup:/dev/loop0: device is busy
  22. [[email protected] file]# losetup /dev/loop centos.img -o 525336576
  23. loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7
  24. [[email protected] file]# losetup /dev/loop1 centos.img -o 525336576
  25. losetup:/dev/loop1: device is busy
  26. [[email protected] file]# losetup /dev/loop3 centos.img -o 525336576
  27. [[email protected] file]# pvscan
  28. PV /dev/mapper/loop0p2 VG VolGroup lvm2 [29.51GiB/0 free]
  29. Total:1[29.51GiB]/in use:1[29.51GiB]/in no VG:0[0]
  30. [[email protected] file]# vgchange -ay VolGroup
  31. 2 logical volume(s)in volume group "VolGroup" now active
  32. [[email protected] file]# lvs
  33. LV VG AttrLSizePoolOriginData%MoveLogCpy%SyncConvert
  34. lv_root VolGroup-wi-a-----27.54g
  35. lv_swap VolGroup-wi-a-----1.97g
  36. [[email protected] file]# mount /dev/VolGroup/lv_root /mnt/
  37. [[email protected] file]# ls /mnt/
  38. bin dev home lib64 media opt root selinux sys usr
  39. boot etc lib lost+found mnt proc sbin srv tmp var
  40. [[email protected] file]# cat /mnt/etc/sysconfig/network-scripts/
  41. ifcfg-eth0 ifdown-post ifup-eth ifup-routes
  42. ifcfg-lo ifdown-ppp ifup-ippp ifup-sit
  43. ifdown ifdown-routes ifup-ipv6 ifup-tunnel
  44. ifdown-bnep ifdown-sit ifup-isdn ifup-wireless
  45. ifdown-eth ifdown-tunnel ifup-plip init.ipv6-global
  46. ifdown-ippp ifup ifup-plusb net.hotplug
  47. ifdown-ipv6 ifup-aliases ifup-post network-functions
  48. ifdown-isdn ifup-bnep ifup-ppp network-functions-ipv6
  49. [[email protected] file]# cat /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
  50. DEVICE="eth0"
  51. BOOTPROTO="dhcp"
  52. HWADDR="52:54:00:3C:FB:2A"
  53. NM_CONTROLLED="yes"
  54. ONBOOT="no"
  55. TYPE="Ethernet"
  56. UUID="68b2bc1a-3b8b-4bb9-9796-b049197a1489"
  57. [[email protected] file]# cat /etc/sysconfig/network-scripts/ifcfg-
  58. ifcfg-br0 ifcfg-em1 ifcfg-em2 ifcfg-lo ifcfg-p1p1 ifcfg-p1p2

上例中,最後幾步,是通過檢視配置檔案區確實是否是某臺KVM主機。掛載使用完成後,可以通過下面的方法進行解除安裝和刪除

  1. [[email protected] file]# umount /mnt/
  2. [[email protected] file]# vgchange -an VolGroup
  3. 0 logical volume(s)in volume group "VolGroup" now active
  4. [[email protected] file]# losetup -d /dev/l
  5. log loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7 lp0 lp1 lp2 lp3
  6. [[email protected] file]# losetup -d /dev/lo
  7. log loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7
  8. [[email protected] file]# losetup -d /dev/loop3

windows img分割槽的掛載

  1. [[email protected] file]# kpartx -av win7.img
  2. add map loop2p1 (253:4):0204800 linear /dev/loop2 2048
  3. add map loop2p2 (253:5):062705664 linear /dev/loop2 206848
  4. [[email protected] file]# mount /dev/mapper/loop2p2 /mnt/
  5. mount: unknown filesystem type 'ntfs'

報錯提示已說明的非常明白,未知的分割槽型別ntfs,此時需要通過安裝軟體使系統支援ntfs分割槽的識別和支援。需要的軟體是ntfs-3g,安裝前需要先安裝依賴包fuse

  1. [[email protected] file]# yum -y install fuse

接著這安裝ntfs-3g,需要注意的是sourceforge上也有該包,不過不是最新的,建議去其官網tuxera.com上去下載。具體安裝和掛載過程如下:

  1. [[email protected] file]# wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2014.2.15.tgz
  2. [[email protected] file]# tar zxvf ntfs-3g_ntfsprogs-2014.2.15.tgz
  3. [[email protected] file]# cd ntfs-3g_ntfsprogs-2014.2.15
  4. [[email protected] ntfs-3g_ntfsprogs-2014.2.15]#./configure
  5. [[email protected] ntfs-3g_ntfsprogs-2014.2.15]#make && make install
  6. [[email protected] ntfs-3g_ntfsprogs-2014.2.15]# mount -t ntfs-3g /dev/mapper/loop2p2 /mnt/
  7. The disk contains an unclean file system (0,0).
  8. The file system wasn't safely closed on Windows. Fixing.
  9. [[email protected] ntfs-3g_ntfsprogs-2014.2.15]# ls /mnt/
  10. Documents and Settings PerfLogs Program Files Recovery System Volume Information Windows
  11. pagefile.sys ProgramData Program Files (x86) $Recycle.Bin Users
  1. [[email protected] file]# umount /mnt/
  2. [[email protected] file]# kpartx -dv /dev/loop2
  3. del devmap : loop2p2
  4. del devmap : loop2p1
  5. [[email protected] file]# losetup -d /dev/loop2

二、qcow2格式下的映象掛載

首先可以嘗試使用掛載raw映象檔案的方式處理下qcow2:

  1. [[email protected] file]# qemu-img convert -f raw -O qcow2 centos.img centos.qcow2
  2. [[email protected] file]# kpartx -av centos.qcow2
  3. 不會有任何資訊輸出

進行到第二步的時候,發現沒有任何資訊輸出,而在raw映象下會有分割槽和loop掛載關係的輸出,由此可以確定,raw的方式不適用qcow2映象格式。

qcow2格式的映象可以通過先轉換成raw的格式進行處理,也可以通過libguestfs-tools工具處理,還可以使用qemu-nbd直接掛載。就速度上而言qemu-nbd的速度肯定是最快的。不過由於centos/redhat原生核心和rpm源裡並不含有對nbd模組的支援及qemu-nbd(在fedora中包含在qemu-common包裡)工具,所以想要支援需要編譯重新編譯核心並安裝qemu-nbd包 。如果僅僅是出於測試的目的,建議還是使用fedora去測試 。

通過make menuconfig的方式進行編譯核心的話,可以依次選擇:”Device Drivers –> Block devices –> Network block device support” 。也可以按下面的方式直接編譯:

  1. yum install kernel-devel kernel-headers
  2. cd /tmp
  3. wget http://vault.centos.org/6.3/updates/Source/SPackages/kernel-2.6.32-279.22.1.el6.src.rpm
  4. rpm -ivh /kernel-2.6.32-279.22.1.el6.src.rpm
  5. cd ~/rpmbuild/SOURCES
  6. tar jxf linux-2.6.32-220.4.2.el6.tar.bz2 -C /usr/src/kernels/
  7. cd /usr/src/kernels
  8. mv $(uname -r) $(uname -r)-old
  9. mv linux-2.6.32-220.4.2.el6 $(uname -r)
  10. cd $(uname -r)
  11. make mrproper
  12. cp ../$(uname -r)-old/Module.symvers .
  13. cp /boot/config-$(uname -r)./.config
  14. make oldconfig
  15. make prepare
  16. make scripts
  17. make CONFIG_BLK_DEV_NBD=m M=drivers/block
  18. cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
  19. depmod -a

編輯完成後,可以去http://sourceforge.net/projects/nbd/ 獲取nbd包並安裝。安裝完成後,可以通過下面的方式進行掛載:

  1. [[email protected] ndb]# qemu-nbd -c /dev/nbd0 centos.qcow2
  2. [[email protected] ndb]# ll /dev/nbd0*
  3. [[email protected] ndb]# mount /dev/nbd0p1 /mnt/
  4. [[email protected] ndb]# cd /mnt/
  5. [[email protected] mnt]# ls
  6. bin cgroup etc lib lost+found misc net proc sbin srv tmp var
  7. boot dev home lib64 media mnt opt root selinux sys usr

使用完成後,可以通過下面的操作解除安裝裝置:

  1. [[email protected] ndb]# umount /mnt/
  2. [[email protected] ndb]# qemu-nbd -d /dev/nbd0
  3. /dev/nbd0 disconnected

注:在centos/redhat下增加對nbd的支援過程中,在安裝nbd包時,可能會遇到與yum安裝的qemu包有衝突等情況,所以不建議在生產環境下重新編譯核心增加對qcow2的掛載 。如有需要,可以嘗試使用轉換成raw格式或使用libguestfs-tools工具包處理 。

相關推薦

kvm虛擬化guest映象檔案掛載

實際應用中的KVM主機也會遇到像物理機一樣的情況,如系統崩潰、無法引導等情況。物理機會現該情況時,我們可以通過光碟引導、單使用者模式、PE引導、修復或升級安裝等方式獲取系統內的檔案和資料,KVM中也不但同樣也可以使用上述方法,而且可以利用KVM 本身為我們提供的特性將分割槽

KVM虛擬化基礎概念

KVMKVM1.1 在認識虛擬化之前,聊聊在業務中,我們想要實現什麽?1. 滿足性能前提下,保證業務穩定可靠,其次是安全性2. 最大程度的平衡調度資源,提高資源的利用率,節省成本3. 靈活快速,可以針對並發數量對架構實現動態伸縮4. 擴展靈活的機櫃,集群5.

KVM虛擬化基本命令管理虛擬機

file local 容量 開始 method 兩種 size conf .... KVM基本功能管理 查看KVM的配置文件存放目錄(c01.xml 是虛擬機系統實例的配置文件) [root@localhost ~]# ls /etc/libvirt/qemu c01.x

CentOS7.1 KVM虛擬化虛擬機器記憶體、CPU調整

一、調小虛擬機器記憶體 調小虛擬機器記憶體可以動態實現,不用關機 1.檢視當前記憶體大小 [plain] view plain copy [[email protected] ~]# virsh dominfo vm1-clone | gr

CentOS7.1 KVM虛擬化虛擬機器快照(5)

這裡用之前克隆的虛擬機器vm1-clone進行快照操作 注: 1.快照實際上做的是虛擬機器的XML配置檔案,預設快照XML檔案在/var/lib/libvirt/qemu/snapshot/虛擬機器名

kvm虛擬化IO虛擬化

(文章來自作者維護的社群微信公眾號【虛擬化雲端計算】)    QEMU-KVM作為一個VMM提供了全虛擬化環境,guest不經過任何修改就能執行在KVM環境中。不過KVM在IO虛擬化方面,使用QEMU純

CentOS7.1 KVM虛擬化常用管理虛擬機器命令(3)

一、檢視虛擬機器列表及狀態 [root@kvm01 ~]# virsh list --all Id Name State --------

KVM硬件輔助虛擬化 EPT in Nested Virtualization

family mil 虛擬 target adding 多層嵌套 top 方法 執行 在嵌套虛擬環境(Nested Virtualization)下,執行在hypervisor上的Virtual Machine仍能夠作為hypervisor去執行其他的Virutal

Linux部署KVM虛擬化平臺

duyuheng linux之部署kvm虛擬化平臺 Linux之部署KVM虛擬化平臺案例需求:1、安裝KVM所需軟件,驗證。2、設置KVM網絡,將網絡設置為橋接模式。3、使用virt-manager安裝linux系統。4、kvm基本管理的命令(1)查看虛擬機的狀態(2)虛擬機的關機,強制關機和開機(3)虛擬

linux運維、架構路-KVM虛擬化技術

sna 運維 3.1 png 配置 tools 關閉 wall ati 一、雲計算概述 雲計算:是一種資源使用和交付模式 虛擬化:一種具體的技術,用來將物理機虛擬成為多個相互獨立的虛擬機。雲計算不等於虛擬化,雲計算是使用了虛擬化的技術做支撐 二、KV

kvm虛擬化學習筆記(十四)kvm虛擬機靜態遷移

虛擬主機 kvm 虛擬機遷移 kvm虛擬化 這裏提到的靜態遷移同是基於KVM虛擬主機之間的遷移,非異構虛擬化平臺的靜態遷移。1.靜態遷移就是虛擬機在關機狀態下,拷貝虛擬機虛擬磁盤文件與配置文件到目標虛擬主機中,實現的遷移。(1)虛擬主機各自使用本地存儲存放虛擬機磁盤文件本文實現基於本地磁盤存儲

kvm虛擬化學習筆記(十八)ESXi到KVMv2v遷移

虛擬化 kvm v2v kvm虛擬機遷移 1.ESXi到KVM之v2v情況說明(1).配置任務列表:1)VMwareESXi虛擬平臺下linux系統遷移到KVM虛擬平臺。2)VMwareESXi虛擬平臺下windows系統遷移到KVM虛擬平臺。提示:本文只介紹以上兩種遷移過程,KVM到ESXi

虛擬化KVM

san style 選擇 進行 基本 混合雲 私有雲 hybrid 界面 一、走進雲計算 雲計算:雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源能夠被快速提供,

Linux學習總結(七十二)虛擬化kvm

虛擬機克隆 sel rap hat 額外 模塊 destroy start -s 一 虛擬化介紹 1 常見虛擬化軟件VMware系列VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac) Xen 開

虛擬化KVM(上)

一:傳統的物理機部署方案、虛擬化與雲端計算定義: 伺服器選型及採購—IDC選擇及上架-系統選擇及安裝–應用規劃及部署–域名選擇及註冊–DNS對映–外網訪問: 工信部備案-公安部備案–ICP備案(電子商務網站–>ICP證經營性ICP備案),遊戲公司文化部(文網文)備案等,在備案沒有成功之前網站是不能上

yum源掛載映象iso映象檔案

1.yum相對於rpm來說:rpm為基礎包管理器,yum為rpm的前端工具。yum無法獨立存在的。 系統中時不允許兩個yum命令同時執行的,這是為了防止yum執行之間起衝突。 2.yum 命令: yum -y 自動回答為yes list 列出所有倉庫中的程式包 all 所有程式包 ins

img檔案掛載成一個檔案系統,修改樹莓派的映象檔案,寫入映象———後續

昨天寫了一篇文章。但是當時對於這個的理解還不夠,以至於我後面又遇到了一些問題。這裡再重新整理一下,供大家參考。 我先重述一下我要做的事情。 我電腦系統是windows,裡面安裝了一個Ubuntu虛擬機器。我從官網上下載了一個樹莓派img映象。但是因為工作的需要,我得修改這個i

把一個img檔案掛載成一個檔案系統,修改樹莓派的映象檔案

這裡不僅僅是針對樹莓派,還有其他的系統也可以使用。 前言: 因為工作需要,現在需要對樹莓派的映象做一個修改。 這裡有一個難點就是我這個映象修改之後,是可以拷貝給其他人直接使用的。所以,第一步我不能直接把映象直接拷貝到u盤/cf卡之類的儲存空間上。因為一旦啟動,系統本身會做一些分割槽,

KVM虛擬化技術使用Qemu-kvm建立和管理虛擬機器

一 .KVM 簡介 KVM (名稱來自英語: Kernel-basedVirtual Machine 的縮寫,即基於核心的虛擬機器) , 是一種用於Linux核心中的虛擬化基礎設施,可以將Linux核心轉化為一個hyper

Docker主機拷貝檔案到docker映象容器

上一篇《Docker之自定義映象製作與執行(一)》我們已經知道怎麼執行自定義映象了,但是我們的專案執行環境一般都是會帶有配置檔案的,那麼這麼將這些配置檔案拷貝到映象中呢?我們就來實踐一下:首先啟動自定義映象容器:jpressdocker run -d -p 8888:8080