How to add/remove virtual disk from VM

點樣喺 XCP 裏面 remove virtual disk?係有啲麻煩,要啲手續。而加一隻 virtual disk,仲煩!

刪除 virtual disk

首先,搵出要刪除嘅 virtual disk。用呢個 command:

xe vbd-list vm-name-label=[VM Name]

跟著就係 unplug 佢,先要保證VM裏面無mount起隻disk!如果係 OS disk,代表你要刪除埋個 VM,遲啲至講。能成功unplug,就可以刪除VBD,用vbd-destroy。

xe vbd-unplug uuid=[vbd uuid]
xe vbd-destroy uuid=[vbd uuid]

如果你以為已經完事,咁就大獲。皆因儲存空間仲未釋放。大家記住儲存設備係VDI,VBD只係同VM嘅一個關係。咁點刪除 VDI呀?喺你第一個 command就有vdi-uuid。用佢嚟刪除 VDI就OK。

xe vdi-destroy uuid=[vdi uuid]

好啦,點睇都釋放嗮儲存空間啦。

 

添加 virtual disk

 先比個script大家睇睇再慢慢解釋:

xeadddisk {vm_name} {disk_size_gb} {storage_repos}

#!/bin/bash

[[ $# -lt 2 ]] && { echo "usage $0 {vm_host} {size_inGB} [{storage_repos_name}] "; exit 1; }

storage="StorageData"
host="$1"
size=$2

VMID=$(xe vm-list name-label="$host" --minimal)
[[ -z "$VMID" ]] && exit 2
[[ $# -ge 3 ]] && storage="$3"

echo Add data disk to vm $host

SID=$(xe sr-list name-label="$storage" --minimal)
[[ -z "$SID" ]] && exit 3
VDIID=$(xe vdi-create sr-uuid=$SID type=user name-label="${host}.data" name-description="${host} data disk" virtual-size=${size}GiB)
LASTDEV=$(xe vm-param-get uuid=$VMID param-name=allowed-VBD-devices | gawk -F '(; )' '{print $1}')
VBDID=$(xe vbd-create device=$LASTDEV vm-uuid=$VMID vdi-uuid=$VDIID bootable=false mode=RW type=Disk)
xe vbd-plug uuid=$VBDID 2>/dev/null
echo $VDIID

應用起嚟就好便利啦,只要VM Name同disk size就可以加隻disk,唔洗boot機就可以訪問啦。裏面核心係兩個command,vdi-create建立一個virtual disk。而vbd-create建立virtual disk同VM嘅關係。最後vbd-plug踢起隻disk,搞掂用得。

好啦,建立咗virtual disk後,喺VM裏面點用都好有哲學,我強力建議你用LVM,即係:

建立partition(唔好成隻disk用,避免OS問長問短)

  1. pvcreate /dev/xvdb1 建立PV
  2. vgcreate vg_data /dev/xvdb1 建立VG
  3. lvcreate -n lv_data -l 100%FREE vg_data
  4. mkfs.ext4 /dev/vg_data/lv_data
  5. blkid /dev/vg_data/lv_data 獲取EXT4 filesystem 嘅 UUID
  6. 加到 /etc/fstab,如果唔需要auto就用noauto options,通過fstab統一管理係好習慣

除非你誓神劈願打死唔會加大disk size可以用過世,如果唔係請你通過LVM嚟用。因為當再加大你個file system時就可以全程online,連application都唔洗停。

 

Tags: