Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@duchenpaul
Last active November 1, 2019 15:29
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 duchenpaul/9ebaba466028ea5dbe5769fb00354300 to your computer and use it in GitHub Desktop.
Save duchenpaul/9ebaba466028ea5dbe5769fb00354300 to your computer and use it in GitHub Desktop.
Shrink the size of raspberry pi image.
#!/bin/bash
if [ $# -lt 1 ]; then
echo -e "Shrink the size of raspberry pi image.\nUsage: bash $0 xxx.img "
ls -l *.img
exit
fi
IMG=$1
check_result()
{
return_status=$?
if [ $return_status -ne 0 ]; then
print_log "Failed! Return Status = $return_status"
exit 1
else
print_log "Done! \n"
fi
}
print_log()
{
echo "`date '+%F %X'`: " $1
}
print_log "Started"
sudo modprobe loop
check_result
print_log "Get loop label"
loop_label=`sudo losetup -f`
check_result
print_log "loop label: ${loop_label}"
echo "\n"
print_log "Mount image"
sudo losetup ${loop_label} ${IMG}
check_result
print_log "probe partition info: "
sudo partprobe ${loop_label}
echo "\n"
print_log "Show partition info: "
fdisk -l ${IMG}
print_log "Start gparted..."
sudo gparted ${loop_label}
check_result
# sudo losetup -D
print_log "Unmount image"
sudo losetup -d ${loop_label}
check_result
print_log "Gather info:"
block_size=`fdisk -l ${IMG} | grep 'Units: sectors' | awk -F '=' '{print $2}' | awk -F 'bytes' '{print $1}' | xargs`
end_block=`fdisk -l ${IMG} | grep img2 | awk -F ' ' '{print $3}' | xargs`
print_log "block_size: ${block_size}"
print_log "end_block: ${end_block}"
print_log "Trim empty space:"
truncate --size=$[(${end_block}+1)*${block_size}] ${IMG}
check_result
print_log "Compress image..."
IMG_BASENAME=`basename $IMG .img`
7za a ${IMG_BASENAME}.7z $IMG
check_result
rm -fr $IMG
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment