Skip to content

Instantly share code, notes, and snippets.

@slowpeek
Last active February 8, 2024 22:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slowpeek/8fdc3528e2a6e09e3e0b0619197ce5fa to your computer and use it in GitHub Desktop.
Save slowpeek/8fdc3528e2a6e09e3e0b0619197ce5fa to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -eu
bye () {
printf '%s\n' "$1"
exit 1
}
blkid_type=
blkid_label=
blkid_load () {
local k v
blkid_type=
blkid_label=
while IFS='=' read -r k v; do
case $k in
LABEL)
blkid_label=$v ;;
TYPE)
blkid_type=$v ;;
esac
done < <(blkid --output export "$1")
}
# --
(( $# )) ||
bye "usage: ${0##*/} /dev/sdX"
(( ! EUID )) ||
bye 'run as root'
disk=$1
[[ "$disk" == /dev/sd? ]] ||
bye "'${disk}': expected format is /dev/sdX"
[[ -b $disk ]] ||
bye "${disk}: no such disk"
for part in ${disk}{1..2}; do
[[ -b $part ]] ||
bye "$part: no such partition"
done
part=${disk}1
blkid_load "$part"
[[ $blkid_label == RPICFG && $blkid_type == vfat ]] ||
bye "$part: wrong fstype/label"
part=${disk}2
blkid_load "$part"
[[ $blkid_label == armbi_root && $blkid_type == f2fs ]] ||
bye "$part: wrong fstype/label"
# --
PS4='[run] '
set -x
dd if="$disk" of=header.img bs=512 count=8192
partclone.vfat -c -s "$disk"1 -o part1.pclone
partclone.f2fs -c -s "$disk"2 -o part2.pclone
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment