#!/bin/bash
function pt_error()
{
echo -e "\033[1;31mERROR: $*\033[0m"
}
function pt_warn()
{
echo -e "\033[1;31mWARN: $*\033[0m"
}
function pt_info()
{
echo -e "\033[1;32mINFO: $*\033[0m"
}
function install_package()
{
PACKAGE=${1}
if dpkg -s ${PACKAGE} 2>&1 | grep "not installed" > /dev/null; then
apt-get install ${PACKAGE} --force-yes -y
fi
}
if [ $UID -ne 0 ]
then
pt_error "Please run as root."
exit
fi
if [ $# -ne 1 ]; then
pt_error "Usage:./format_sd.sh device"
exit 1
fi
case $1 in
/dev/sd[a-z] | /dev/loop[0-9] | /dev/mmcblk1)
if [ ! -e $1 ]; then
pt_error "$1 does not exist."
exit 1
fi
DEV_NAME=`basename $1`
BLOCK_CNT=`cat /sys/block/${DEV_NAME}/size` ;;&
/dev/sd[a-z])
DEV_PART_NAME=${DEV_NAME}1
REMOVABLE=`cat /sys/block/${DEV_NAME}/removable` ;;
/dev/mmcblk1 | /dev/loop[0-9])
DEV_PART_NAME=${DEV_NAME}p1
REMOVABLE=1 ;;
*)
pt_error "Unsupported SD reader"
exit 0
esac
if [ $? -ne 0 ]; then
pt_error "Error: Can't find device ${DEV_NAME}"
exit 1
fi
if [ ${BLOCK_CNT} -le 0 ]; then
pt_error "Error: NO media found in card reader."
exit 1
fi
if [ ${BLOCK_CNT} -gt 64000000 ]; then
pt_error "Error: Block device size (${BLOCK_CNT}) is too large"
exit 1
fi
install_package dosfstools
umount /dev/${DEV_NAME}* >/dev/null 2>&1
pt_info "formatting ${DEV_NAME}, please wait..."
dd if=/dev/zero of=/dev/${DEV_NAME} bs=16M count=4
sync
fdisk /dev/$DEV_NAME <<EOF
o
n
p
w
EOF
mkfs.vfat /dev/${DEV_PART_NAME} -n SD
sync
pt_info "format success."
phoenixCard格式化失败,可用该脚本先格式化SD卡。使用方法:
sudo ./format_sd.sh 你的盘符
eg:
mod@archlinux sdcard $ sudo ./format_sd.sh /dev/sdb
INFO: formatting sdb, please wait...
记录了4+0 的读入
记录了4+0 的写出
67108864字节(67 MB,64 MiB)已复制,15.2602 s,4.4 MB/s
欢迎使用 fdisk (util-linux 2.36.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x00c807cc 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):创建了一个磁盘标识符为 0x476e6317 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):分区类型
p 主分区 (0 primary, 0 extended, 4 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):分区号 (1-4, 默认 1): 第一个扇区 (2048-60751871, 默认 2048): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-60751871, 默认 60751871):
创建了一个新分区 1,类型为“Linux”,大小为 29 GiB。
命令(输入 m 获取帮助):分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
mkfs.fat 4.2 (2021-01-31)
INFO: format success.