DEVICE="" FS="" LABEL="" IMAGE="" COPYDIR="" WIPE=0 while [ $# -gt 0 ]; do case "$1" in --device) DEVICE="$2"; shift 2;; --fs) FS="$2"; shift 2;; --label) LABEL="$2"; shift 2;; --image) IMAGE="$2"; shift 2;; --copydir) COPYDIR="$2"; shift 2;; --wipe) WIPE=1; shift;; --help) usage; exit 0;; *) echo "Unknown: $1"; usage; exit 1;; esac done
# Partition: single primary spanning whole device log "Creating single partition..." parted -s "$DEVICE" mklabel msdos parted -s "$DEVICE" mkpart primary 1MiB 100% partprobe "$DEVICE" sleep 1
confirm() read -rp "$1 [y/N]: " ans [[ "$ans" =~ ^[Yy]$ ]] usb flash driver format tool ufixii repack hot
log() echo "[$(date +'%F %T')] $*";
if [ -z "$DEVICE" ] || [ -z "$FS" ]; then usage; exit 1; fi if [ ! -b "$DEVICE" ]; then echo "Device not found: $DEVICE"; exit 1; fi DEVICE="" FS="" LABEL="" IMAGE="" COPYDIR="" WIPE=0 while [
# Safety: require removable and >64MiB TRAN=$(lsblk -no TRAN "$DEVICE" || echo "") SIZE_BYTES=$(blockdev --getsize64 "$DEVICE") if [[ "$TRAN" != "usb" ]]; then echo "Warning: device transport not listed as usb ($TRAN). Continue?" confirm "Continue with non-USB device?" || exit 1 fi if [ "$SIZE_BYTES" -lt $((64*1024*1024)) ]; then echo "Device too small."; exit 1; fi
# Optional wipe if [ "$WIPE" -eq 1 ]; then log "Wiping first 1MiB..." dd if=/dev/zero of="$DEVICE" bs=1M count=1 conv=fsync status=progress fi confirm "Proceed formatting $DEVICE
log "Target device: $DEVICE" lsblk "$DEVICE" if ! confirm "Proceed formatting $DEVICE? This will erase all data."; then log "Aborted."; exit 0; fi