#!/bin/bash # Admin https://www.yuque.com/lwmacct # 2023-01-18 17:00:13 # 此脚本用于多个教程中的磁盘格式化脚本,不可直接修改, 需要另起版本文件 # 格式化并挂载磁盘,适配 centos __init_args() { # 是否格式化所有磁盘 if [[ "${REMKFS}" == "" ]]; then REMKFS=0; fi if [[ "${ROOTFS_DISK}" == "" ]]; then _rootfs_disk=$(lsblk 2>/dev/null | grep '\s/$' -B10 | tac | grep '\sdisk\s' | head -1 | awk '{print $1}') # 取得系统盘所在盘符 ROOTFS_DISK=$_rootfs_disk fi echo "SHELL 配置变量" echo -e "\t REMKFS \t $REMKFS" echo -e "\t ROOTFS_DISK \t $_rootfs_disk" if [[ "$ROOTFS_DISK" == "" ]]; then echo "未识别到系统盘, 请联系脚本管理员" exit 0 fi } __mkfs() { # label 标记为 kuaicdn 的只是为了兼容旧版框架 echo -e "识别系统盘为: $_rootfs_disk" echo -e '开始初始化磁盘...' _blkid=$(blkid) # 虚拟机已挂载的磁盘打上标签 cat /etc/libvirt/qemu/*.xml 2>/dev/null | grep "" | grep '/dev/[0-9a-z]{1,19}' -Eo | xargs -I{} xfs_admin -L virtio {} >/dev/null 2>&1 _all_disk=$(lsblk -dn | grep -E 'sd|vd|nvme' | awk '{print $1}' | grep -Ev "^$_rootfs_disk$") for _dev in $_all_disk; do if [[ "$(echo "$_blkid" | grep "/dev/${_dev}.*\sLABEL=.(data|virtio|kuaicdn).\s" -Ec)" == "0" || "$REMKFS" == "1" ]]; then echo "正在格式化磁盘: $_dev 请稍后..." echo "$_blkid" | grep "^/dev/$_dev.*" -Eo | awk -F ':' '{print $1}' | xargs -r lsof -t | xargs -r -n1 -P0 kill -9 echo "$_blkid" | grep "^/dev/$_dev.*" -Eo | awk -F ':' '{print $1}' | xargs -r umount -f dd if=/dev/zero of="/dev/$_dev" bs=512K count=20 >/dev/null 2>&1 dd if=/dev/zero of="/dev/$_dev" bs=512 seek=$(($(blockdev --getsz "/dev/$_dev") - 63)) count=63 >/dev/null 2>&1 mkfs.xfs -f "/dev/$_dev" >/dev/null 2>&1 xfs_admin -L data "/dev/$_dev" >/dev/null 2>&1 fi done } __mount() { # 清理挂载 sed -i '\/disk\/\S/d' /etc/fstab sed -i '\/data[0-9]\{1,2\}.*/d' /etc/fstab if [[ "$(virt-what)" == "kvm" ]]; then _mount_label="virtio" else _mount_label="data|kuaicdn" fi blkid -s "LABEL" -s "UUID" -s 'TYPE' | grep -E "$_mount_label" | sed -r 's@.*UUID="([0-9a-z-]+?)".*TYPE="(\w+?)"+?"@\1-\2@g' | awk -F '-' '{print "echo \"UUID=" $1"-"$2"-"$3"-"$4"-"$5 " /disk/"$1 " " $6 "defaults,nofail,noatime,nodiratime 0 0\" >> /etc/fstab; mkdir -p /disk/"$1}' | sh # cat /etc/fstab mount -a } __confirm() { echo "高危操作,请确认!!!" read -r -p "是否继续? [Y/n] " input case $input in [yY][eE][sS] | [yY]) echo "Yes" ;; [nN][oO] | [nN]) echo "放弃了高危操作..." exit 1 ;; *) echo "放弃了高危操作..." exit 1 ;; esac } __main() { if [[ "${REMKFS}" == "1" ]]; then __confirm; fi if [[ "$(which lsof | wc -l)" == "0" ]]; then yum install -y jq bc lsof; fi __init_args __mkfs __mount echo "已初始化磁盘数量: $(grep /dev/null <<"EOF" REMKFS=0 bash -c "$(curl -sSL https://gitea.kuaicdn.cn/shell/lts-v230301/raw/branch/main/disk/mkfs/v3-2023011801.sh)" EOF }