mirror of
https://github.com/RROrg/rr.git
synced 2025-09-20 18:57:13 +08:00
优化 pve.sh 脚本,添加存储参数支持,改进存储获取逻辑
This commit is contained in:
parent
ef6ed60c46
commit
4884158996
118
scripts/pve.sh
118
scripts/pve.sh
@ -12,23 +12,27 @@ REPO="https://github.com/RROrg/rr"
|
|||||||
ONBOOT=1 # 开机启动,默认1
|
ONBOOT=1 # 开机启动,默认1
|
||||||
EFI=1 # 启用 UEFI 引导,默认1
|
EFI=1 # 启用 UEFI 引导,默认1
|
||||||
BLTYPE="sata" # 引导盘类型, 支持 sata,usb,nvme 默认 sata
|
BLTYPE="sata" # 引导盘类型, 支持 sata,usb,nvme 默认 sata
|
||||||
NINEPPATH="" # 9p路径,默认空不添加
|
STORAGE="" # 存储,默认自动获取
|
||||||
|
V9PPATH="" # 添加 virtio9p 挂载目录,默认空不添加
|
||||||
|
VFSDIRID="" # 添加 virtiofs 挂载文件夹id,默认空不添加
|
||||||
TAG="" # 镜像tag,默认自动获取
|
TAG="" # 镜像tag,默认自动获取
|
||||||
IMG="" # 本地镜像路径,默认空
|
IMG="" # 本地镜像路径,默认空
|
||||||
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: $0 [--onboot <0|1>] [--efi <0|1>] [--bltype <sata|usb|nvme>] [--9ppath <path>] [--tag <tag>] [--img <path>]"
|
echo "Usage: $0 [--onboot <0|1>] [--efi <0|1>] [--bltype <sata|usb|nvme>] [--storage <name>]"
|
||||||
echo " --onboot <0|1> Enable VM on boot, default 1 (enable)"
|
echo " [--v9ppath <path>] [--vfsdirid <dirid>] [--tag <tag>] [--img <path>]"
|
||||||
echo " --efi <0|1> Enable UEFI boot, default 1 (enable)"
|
echo ""
|
||||||
echo " --bltype <sata|usb|nvme> Bootloader disk type, default sata"
|
echo " --onboot <0|1> Enable VM on boot, default 1 (enable)"
|
||||||
echo " --9ppath <path> Set to /path/to/9p to mount 9p share"
|
echo " --efi <0|1> Enable UEFI boot, default 1 (enable)"
|
||||||
echo " --tag <tag> Image tag, download latest release if not set"
|
echo " --bltype <sata|usb|nvme> Bootloader disk type, default sata"
|
||||||
echo " --img <path> Local image path, use local image if set"
|
echo " --storage <name> Storage name for images, as local-lvm, default auto get"
|
||||||
exit 1
|
echo " --v9ppath <path> Set to /path/to/9p to mount virtio 9p share"
|
||||||
|
echo " --vfsdirid <dirid> Set to <dirid> to mount virtio fs share"
|
||||||
|
echo " --tag <tag> Image tag, download latest release if not set"
|
||||||
|
echo " --img <path> Local image path, use local image if set"
|
||||||
}
|
}
|
||||||
|
|
||||||
ARGS=$(getopt -o '' --long onboot:,efi:,bltype:,9ppath:,tag:,img: -n "$0" -- "$@")
|
ARGS=$(getopt -o '' --long onboot:,efi:,bltype:,storage:,v9ppath:,vfsdirid:,tag:,img: -n "$0" -- "$@")
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
usage
|
usage
|
||||||
exit 1
|
exit 1
|
||||||
@ -51,21 +55,29 @@ while true; do
|
|||||||
echo "$BLTYPE" | grep -qvE '^(sata|usb|nvme)$' && BLTYPE="sata"
|
echo "$BLTYPE" | grep -qvE '^(sata|usb|nvme)$' && BLTYPE="sata"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
--storage)
|
||||||
|
STORAGE="$2"
|
||||||
|
[ -n "${STORAGE}" ] && pvesm status -content images | grep -qw "^${STORAGE}" || STORAGE=""
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--v9ppath)
|
||||||
|
V9PPATH="$2"
|
||||||
|
[ -d "${V9PPATH}" ] && V9PPATH="$(realpath "${V9PPATH}")" || V9PPATH=""
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--vfsdirid)
|
||||||
|
VFSDIRID="$2"
|
||||||
|
[ -n "${VFSDIRID}" ] && pvesh ls /cluster/mapping/dir | grep -qw "${VFSDIRID}" || VFSDIRID=""
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
--tag)
|
--tag)
|
||||||
TAG="$2"
|
TAG="$2"
|
||||||
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
|
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
--img)
|
--img)
|
||||||
IMG="$2"
|
IMG="$2"
|
||||||
[ ! -f "${IMG}" ] && IMG=""
|
[ -f "${IMG}" ] && IMG="$(realpath "${IMG}")" || IMG=""
|
||||||
[ -n "${IMG}" ] && IMG="$(realpath "${IMG}")"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--9ppath)
|
|
||||||
NINEPPATH="$2"
|
|
||||||
[ ! -d "${NINEPPATH}" ] && NINEPPATH=""
|
|
||||||
[ -z "${NINEPPATH}" ] || NINEPPATH="$(realpath "${NINEPPATH}")"
|
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
--)
|
--)
|
||||||
@ -129,6 +141,7 @@ echo "Creating VM with RR ... "
|
|||||||
# 获取可用的 VMID
|
# 获取可用的 VMID
|
||||||
VMID="$(($(qm list | awk 'NR>1{print $1}' | sort -n | tail -1 2>/dev/null || echo 99) + 1))"
|
VMID="$(($(qm list | awk 'NR>1{print $1}' | sort -n | tail -1 2>/dev/null || echo 99) + 1))"
|
||||||
ARGS=""
|
ARGS=""
|
||||||
|
SATAIDX=0
|
||||||
|
|
||||||
# 创建 VM
|
# 创建 VM
|
||||||
qm create ${VMID} --name RR-DSM --machine q35 --ostype l26 --vga virtio --sockets 1 --cores 2 --cpu host --numa 0 --memory 4096 --scsihw virtio-scsi-single
|
qm create ${VMID} --name RR-DSM --machine q35 --ostype l26 --vga virtio --sockets 1 --cores 2 --cpu host --numa 0 --memory 4096 --scsihw virtio-scsi-single
|
||||||
@ -138,11 +151,11 @@ if [ $? -ne 0 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 获取 存储
|
# 获取 存储
|
||||||
STORAGE=$(pvesm status -content images | awk 'NR>1 {print $1}' | grep local | tail -1)
|
[ -z "${STORAGE}" ] && STORAGE=$(pvesm status -content images | awk 'NR>1 {print $1}' | grep local | tail -1)
|
||||||
if [ -z "${STORAGE}" ]; then
|
if [ -z "${STORAGE}" ]; then
|
||||||
echo "No storage for images"
|
echo "No storage for images"
|
||||||
qm destroy ${VMID} --purge
|
qm destroy ${VMID} --purge
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 启用 UEFI 引导
|
# 启用 UEFI 引导
|
||||||
@ -164,37 +177,37 @@ if [ "${STATUS:-0}" -ne 0 ] || [ -z "${BLDISK}" ]; then
|
|||||||
fi
|
fi
|
||||||
[ -n "${IMG}" ] || rm -f "${IMG_PATH}"
|
[ -n "${IMG}" ] || rm -f "${IMG_PATH}"
|
||||||
case "${BLTYPE}" in
|
case "${BLTYPE}" in
|
||||||
usb)
|
usb)
|
||||||
ARGS+="-device nec-usb-xhci,id=usb-bus0,multifunction=on -drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=usb1 -device usb-storage,bus=usb-bus0.0,port=1,drive=usb1,bootindex=999,removable=on "
|
ARGS+="-device nec-usb-xhci,id=usb-bus0,multifunction=on -drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=usb1 -device usb-storage,bus=usb-bus0.0,port=1,drive=usb1,bootindex=999,removable=on "
|
||||||
;;
|
;;
|
||||||
nvme)
|
nvme)
|
||||||
ARGS+="-drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=nvme1 -device nvme,drive=nvme1,serial=nvme001 "
|
ARGS+="-drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=nvme1 -device nvme,drive=nvme1,serial=nvme001 "
|
||||||
;;
|
;;
|
||||||
sata)
|
sata)
|
||||||
qm set ${VMID} --sata0 "${BLDISK}"
|
qm set ${VMID} --sata$((SATAIDX++)) "${BLDISK}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Setting bootloader disk failed"
|
echo "Setting bootloader disk failed"
|
||||||
qm destroy ${VMID} --purge
|
qm destroy ${VMID} --purge
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
X86_VENDOR=$(awk -F: '/vendor_id/ {gsub(/^[ \t]+/, "", $2); print $2; exit}' /proc/cpuinfo)
|
X86_VENDOR=$(awk -F: '/vendor_id/ {gsub(/^[ \t]+/, "", $2); print $2; exit}' /proc/cpuinfo)
|
||||||
case "${X86_VENDOR,,}" in
|
case "${X86_VENDOR,,}" in
|
||||||
*intel*)
|
*intel*)
|
||||||
ARGS+="-cpu host,+kvm_pv_eoi,+kvm_pv_unhalt,+vmx,hv_vendor_id=${X86_VENDOR} "
|
ARGS+="-cpu host,+kvm_pv_eoi,+kvm_pv_unhalt,+vmx,hv_vendor_id=${X86_VENDOR} "
|
||||||
;;
|
;;
|
||||||
*amd*)
|
*amd*)
|
||||||
ARGS+="-cpu host,+kvm_pv_eoi,+kvm_pv_unhalt,+svm,hv_vendor_id=${X86_VENDOR} "
|
ARGS+="-cpu host,+kvm_pv_eoi,+kvm_pv_unhalt,+svm,hv_vendor_id=${X86_VENDOR} "
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "x86_vendor: Unknown"
|
echo "x86_vendor: Unknown"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ -d "${NINEPPATH}" ]; then
|
if [ -d "${V9PPATH}" ]; then
|
||||||
ARGS+="-fsdev local,security_model=passthrough,id=fsdev0,path=${NINEPPATH} -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare "
|
ARGS+="-fsdev local,security_model=passthrough,id=fsdev0,path=${V9PPATH} -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
qm set ${VMID} --args "${ARGS}"
|
qm set ${VMID} --args "${ARGS}"
|
||||||
@ -204,8 +217,13 @@ if [ $? -ne 0 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "${VFSDIRID}" ]; then
|
||||||
|
# pvesh create /cluster/mapping/dir --id "${VFSDIRID}" -map node=node1,path=/path/to/share1 --map node=node2,path=/path/to/share2
|
||||||
|
qm set ${VMID} --virtiofs0 dirid=${VFSDIRID},cache=always,direct-io=1
|
||||||
|
fi
|
||||||
|
|
||||||
# 添加 32G 数据盘
|
# 添加 32G 数据盘
|
||||||
qm set ${VMID} --sata1 ${STORAGE}:32
|
qm set ${VMID} --sata$((SATAIDX++)) ${STORAGE}:32
|
||||||
|
|
||||||
BRIDGE=$(awk -F: '/^iface vmbr/ {print $1}' /etc/network/interfaces | awk '{print $2}' | head -1)
|
BRIDGE=$(awk -F: '/^iface vmbr/ {print $1}' /etc/network/interfaces | awk '{print $2}' | head -1)
|
||||||
if [ -z "${BRIDGE}" ]; then
|
if [ -z "${BRIDGE}" ]; then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user