#!/bin/bash##filename:cleardisk.sh##function:把硬盘置为 空盘DISK_NAME="$1"#################################
#!/bin/bash##filename:cleardisk.sh##function:把硬盘置为 空盘DISK_NAME="$1"#################################################### 显示帮助###################################################function show_help(){ echo "Usage: $0 /dev/sdx"}#################################################### 参数检查###################################################function chk_params(){ for cmd in lsscsi parted do if [ -z "$cmd" ]; then continue fi #检查命令是否存在 which $cmd > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "${cmd} not exist" return 1 fi done #参数不能为空 if [ -z "${DISK_NAME}" ]; then show_help return 1 fi #参数必须为块设备 if [ ! -b "${DISK_NAME}" ]; then echo "${DISK_NAME} is not a block device." show_help return 1 fi #入参必须在硬盘列表中 lsscsi | grep "//dev" | grep -v DVD | grep -v -i Floppy | grep " ${DISK_NAME} " > /dev/null if [ $? -ne 0 ]; then echo "Error: ${DISK_NAME} is not disk." show_help return 1 fi return 0}#################################################### 判断硬盘是否正在使用###################################################function disk_is_used(){ #mount 中不能包含 该设备 mount | grep "^/dev/" | awk '{print $1}' | grep "${DISK_NAME}" > /dev/null if [ $? -eq 0 ]; then echo "Error: ${DISK_NAME} is used by mount." return 1 fi #df 中不能包含 该设备 df -P -h | grep "^/dev" | awk '{print $1}' | grep "${DISK_NAME}" > /dev/null if [ $? -eq 0 ]; then echo "Error: ${DISK_NAME} is used by df." return 1 fi #swap 中不能包含 该设备 swapon -s | grep "^/dev" | awk '{print $1}' | grep "${DISK_NAME}" > /dev/null if [ $? -eq 0 ]; then echo "Error: ${DISK_NAME} is used by swap." return 1 fi #正在格式化的硬盘 ps -wwef | grep -E "/ mkfs/.|//mkfs/." | grep "${DISK_NAME}" > /dev/null if [ $? -eq 0 ]; then echo "Error: ${DISK_NAME} is used by mkfs." return 1 fi #lvm 中不能包含 该设备 which pvs > /dev/null 2>&1 if [ $? -eq 0 ]; then pvs | grep "${DISK_NAME}" > /dev/null if [ $? -eq 0 ]; then echo "Error: ${DISK_NAME} is used by lvm." return 1 fi fi return 0}#################################################### 把硬盘置为 空盘###################################################function clear_disk(){ #删除硬盘分区 parted -s ${DISK_NAME} mklabel gpt if [ $? -ne 0 ]; then echo "parted -s ${DISK_NAME} mklabel gpt failed." return 1 fi sleep 1 #刷新系统信息 partprobe ${DISK_NAME} if [ $? -ne 0 ]; then echo "partprobe ${DISK_NAME} failed." return 1 fi sleep 1 #删除硬盘分区表 dd if=/dev/zero of=${DISK_NAME} count=10 > /dev/null if [ $? -ne 0 ]; then echo "dd if=/dev/zero of=${DISK_NAME} count=10 failed." return 1 fi return 0}#################################################### 主函数###################################################function main(){ #参数检查 chk_params if [ $? -ne 0 ]; then return 1 fi #判断硬盘是否正在使用 disk_is_used if [ $? -ne 0 ]; then return 1 fi #把硬盘置为 空盘 clear_disk if [ $? -ne 0 ]; then return 1 fi echo "Set ${DISK_NAME} to blank successfully." return 0}main "$@"exit $?