1. 程式人生 > >在qemu kvm虛擬機器中掛載硬碟分割槽的方法總結

在qemu kvm虛擬機器中掛載硬碟分割槽的方法總結

方法一,通過對qemu的系統映象直接擴充容量

qemu-img resize 你的映象.img +10G

然後通過qemu-system-x86_64命令啟動你的虛擬機器(或者virsh),到磁碟管理下面,就可以看到有一個為初始化的磁碟,就可以分配給c盤。
這個方法就是給原有的img新增容量,在使用虛擬機器的過程中如果映象出問題,那麼資料也會跟著丟失(如果沒有快照的話)。因此下面幾個方法,就脫離的系統映象,直接掛載分割槽或者卷。

方法二、新建映象或者本地分割槽直接載入

這個方法是兩種操作,一是利用qemu-img建立一個磁碟映象,掛載到虛擬機器裡面去,二是直接將本地的真實分割槽掛載進去
A。掛載真實分割槽,在qemu-sys tem-x86_64啟動虛擬機器的命令裡面直接新增引數

-hdb /dev/sda4  //不能使用hda,這個已經被虛擬機器的系統盤使用,目前可以使用的是好的hdc hdd,在虛擬機器內對應的就是DE、F盤

啟動虛擬機器後,如果是第一次連線這個分割槽,則需要右擊“我的電腦”-> “管理” -> “磁碟管理”,找到新建的磁碟,右擊格式化,如下所示這裡寫圖片描述
注意要使用NTFS格式記性格式化,這樣windows和linux是相容的,即同一個磁碟無論是在linux還是windows下操作的東西都能看的到
這樣兩邊都可以使用這塊分割槽了。也可以通過ssh遠端掛載如下:

這裡寫程式碼片

這種方法的缺點就是這塊分割槽不能移動,因為是真實的分割槽,下面的方法就可以將建立的虛擬磁碟映象隨便移動到其他pc

B。建立虛擬磁碟映象,這種方法類似上面的方法,就是建立一個img檔案,方便移動。

qemu-img create -f qcow2 disk.img 10G //建立一個10G的虛擬磁碟映象,只有真正用完10G,這個映象的大小彩繪師10G
//或者
dd if=/dev/zero of=test.img bs=1M count 128
//bs=bytes #同時設定讀寫塊的大小為 bytes ,可代替 ibs 和 obs 。

在虛擬機器啟動命令裡面新增引數:

-hdc /你的路徑/disk.img // hdb 已經被上面的方法用過了,因此此處就使用hdc

啟動虛擬機器載入硬碟的過程和上面的方法一樣,請參考A
導致此虛擬機器裡面硬碟是整理好了,那麼需要吧這個img檔案掛載到本地才能在宿主機上使用,把建立好的disk.img檔案進行本掛載和格式化

mkfs.ext3 -q disk.img //格式化為ext3的格式,不能是NTFS,會報錯
mount -o loop disk.img /mnt  //這樣就把disk.img掛載到mnt下面了

方法三,使用iSCSI來掛載遠端硬碟

使用iSCSI來掛載分割槽有很多方法,網上也很多,在這裡我使用的是iscsitarget服務和iscsi initiator客戶端

  1. 首先就是伺服器端的安裝與配置,.搭建iscsitarget服務 (target)

a.安裝iscsitarget

sudo apt-get install iscsitarget

b.啟動服務

vim /etc/default/iscsitarget //編輯配置檔案
ISCSITARGET_ENABLE=true //預設是false,修改為使能
//重新啟動iscsitarget 服務
service iscsitarget restart
//檢視狀態
service iscsitarget status

當執行完上面兩個命令後就會看到如下狀態,則是執行成功:
這裡寫圖片描述

c.建立分卷,用於共享磁碟

mkdir -p /media/volume0 //建立分卷位置
dd if=/dev/zero of=/media/volume0/vmlun0.bin count=0 obs=1 seek=1G
//dd命令需要學習一下,不然不知道這是在幹嘛
if=file 輸入檔名,預設為標準輸入
of=file 輸出檔名,預設為標準輸出
obs=bytes 一次寫 bytes 個位元組(即一個塊大小為 bytes 個位元組)
seek=blocks 從輸出檔案開頭跳過 blocks 個塊後再開始複製。(通常只有當輸出檔案是磁碟或磁帶時才有效)也就是你開闢的空間大小,在虛擬機器裡面會顯示的大小,此處開闢1G
count=blocks 僅拷貝 blocks 個塊,塊大小等於 ibs 指定的位元組數
dd命令有很多內容,也很有用,可以系統的學習一下 

d.建立好卷後,開始配置target

vim /etc/iet/ietd.conf //開啟編輯配置檔案
//找到Target這一行
Target iqn.2017-05.local.mynet:storage.sys0
//iqn(iSCSI Qualified Name)指定名字,而且iqn必須在全域性是唯一的
//格式 iqn.<日期>.<域名要顛倒寫>:<裝置字串> 域名內可以包含點,裝置自負也可以包括點
//例如上面時間是2017-05 , 域名是mynet.local ,裝置名是storage.sys0
//找到LUN 0行
Lun 0 Path=/media/volume0/vmlun0.bin,Type=fileio,ScsiId=lun0,ScsiSN=lun0
//如果是有一個分割槽如/dev/sdc也可以直接取消掉本檔案中該行的註釋
//Type為介面型別,主要是兩種fileio和blockio,可以檢視上面的網站
//然後重啟服務。
sudo service iscsitarget restart

到此伺服器端酒配置好了,下面配置客戶端

2.iscsi initiator客戶端(也就是虛擬機器裡面),這個配置有兩種不同的平臺,linux和windows
A。linux(Ubuntu)下的配置,不一定是虛擬機器,在遠端的其他機器上也能使用
安裝安裝open-scsi

sudo  apt-get install open-iscsi open-iscsi-utils

查詢介面,發現iscsi target

sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.9

就會找到如下圖所示目標ip上的iscsi target:
這裡寫圖片描述

顯示上面的資訊後就可以使用這個Target了預設埠為3260

sudo iscsiadm -m node --targetname iqn.2017-05.local.mynet:storage.sys0 -p 192.168.1.9 --login
//其實 -p  192.168.1.9可以去掉
//刪除這個分割槽
sudo iscsiadm -m node --targetname iqn.2017-05.local.mynet:storage.sys0 -p 192.168.1.9 -u

如果想要開機西氣東輸載入,則需要一下命令:

iscsiadm -m node -T iqn.* -p 192.168.1.9 --op update -n node.startup -v automatic

執行完上面的載入分割槽的操作後就會在你的ubuntu右邊欄出現一個硬碟,就可以在硬盤裡面操作了。
B。在windows下使用這個target,其操作如下
開啟iSCSI發起程式
這裡寫圖片描述
開啟之後以此點選 發現->發現門戶->輸入ip地址和埠號
這裡寫圖片描述
然後選擇 目標選項卡,選中目標,然後點選連線
這裡寫圖片描述
出現對話方塊點選確定,上圖的“不活動”就會變成“已連結”
這裡寫圖片描述
如果是第一次連線這個分割槽,則需要右擊“我的電腦”-> “管理” -> “磁碟管理”,找到新建的磁碟,右擊格式化,如下所示
這裡寫圖片描述
需要注意的是格式化的格式一定要NTFS,不然在linux就沒辦法看到windows下操作讀寫的東西。這樣每次開啟windows的時候這個分割槽就會自動載入。