test-definitions/blob/master/auto-test/disk-partitioning/disk-partitioning.sh

#!/bin/sh

# shellcheck disable=SC1091
#相对路径执行脚本,并给常量赋值
. ../../utils/sh-test-lib
OUTPUT="$(pwd)/output"
RESULT_FILE="${OUTPUT}/result.txt"
export RESULT_FILE
DISKLABEL="gpt"
FILESYSTEM="ext4"
#定义一个函数说明这个脚本该如何使用
usage() {
    echo "Usage: $0 [-d <device>] [-l <disklabel>] [-f <filesystem>] [-s <true|false>]" 1>&2
    exit 1
}
#通过while parse 可选参数
while getopts "d:l:f:r:s:" o; do
  case "$o" in
    # The existing disk label on the device will be destroyed,
    # and all data on this disk will be lost.
    d) DEVICE="${OPTARG}" ;;
    l) DISKLABEL="${OPTARG}" ;;
    f) FILESYSTEM="${OPTARG}" ;;
    s) SKIP_INSTALL="${OPTARG}" ;;
    *) usage ;;
  esac
done

create_disklabel() {
    echo
    echo "Creating ${DEVICE} disklabel: ${DISKLABEL}"
	#umount 这个parition
    umount "${DEVICE}*" > /dev/null 2>&1
    # If mklabel fails, skip the following tests.
    skip_list="create-partition format-partition mount-partition umount-partition"
	#执行parted 命令
    parted -s "${DEVICE}" mklabel "${DISKLABEL}"
    exit_on_fail "create-disklabel" "${skip_list}"

    sync
    sleep 10
}

create_partition() {
    echo
    echo "Creating partition: ${DEVICE}1"
    skip_list="format-partition mount-partition umount-partition"
	#通过parted -s 命令来创建新的partition
    parted -s "${DEVICE}" mkpart primary 0% 100%
    exit_on_fail "create-partition" "${skip_list}"

    sync
    sleep 10
}

format_partition() {
    echo
    echo "Formatting ${DEVICE}1 to ${FILESYSTEM}"
    skip_list="mount-partition umount-partition"
	#格式化partition,注意这里fat32的命令的参数和其他不同
    if [ "${FILESYSTEM}" = "fat32" ]; then
        echo "y" | mkfs -t vfat -F 32 "${DEVICE}1"
    else
        echo "y" | mkfs -t "${FILESYSTEM}" "${DEVICE}1"
    fi
    exit_on_fail "format-partition" "${skip_list}"
	#sysc 后然后等10s。
    sync
    sleep 10
}

disk_mount() {
    echo
    echo "Running mount/umount tests..."
	#由于要将device mount到/mnt .所以这里先把mnt umount掉
    umount /mnt > /dev/null 2>&1
    skip_list="umount-partition"
    mount "${DEVICE}1" /mnt
    exit_on_fail "mount-partition" "${skip_list}"

    umount "${DEVICE}1"
    check_return "umount-partition"
}

# Test run.
#如果不存在这个块设备的话就是输出错误日志
[ -b "${DEVICE}" ] || error_msg "Please specify a block device with '-d'"
#检查是否是root用户
! check_root && error_msg "You need to be root to run this script."
create_out_dir "${OUTPUT}"
#使用parted 命令需要安装的包
pkgs="parted e2fsprogs dosfstools"
install_deps "${pkgs}" "${SKIP_INSTALL}"
#分别执行前面的函数测试这个block device
create_disklabel
create_partition
format_partition
disk_mount

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值