Если снять новый образ с sd карты raspberry которая ни разу не запускалась, то образ будет невозможно обрезать shrink, этот скрипт позволяет принудительно обрезать по размеру
- находит последний сектор второго раздела (p2) в .img;
- рассчитывает нужный размер;
- делает безопасную обрезку .img с запасом.
#!/bin/bash set -euo pipefail IMG="$1" SAFETY_MB=4 [[ ! -f "$IMG" ]] && echo "❌ Файл не найден: $IMG" && exit 1 echo "📂 Анализируем: $IMG" END_SECTOR=$(fdisk -l "$IMG" | awk '/img2/ {print $3}') SECTOR_SIZE=$(fdisk -l "$IMG" | awk '/Sector size/ {print $4}') SECTOR_SIZE=${SECTOR_SIZE:-512} FINAL_BYTES=$(( (END_SECTOR + 1 + (SAFETY_MB * 1024 * 1024 / SECTOR_SIZE)) * SECTOR_SIZE )) FINAL_MB=$(( FINAL_BYTES / 1024 / 1024 )) echo "📏 Конец rootfs в секторе: $END_SECTOR" echo "📦 Новый размер: $FINAL_MB МБ" read -rp "✅ Обрезать .img до $FINAL_MB МБ? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || { echo "❎ Отменено."; exit 1; } truncate -s "$FINAL_BYTES" "$IMG" echo "✅ Готово: образ обрезан до $FINAL_MB МБ"
запуск
chmod +x hard_shrink_img.sh ./hard_shrink_img.sh /media/pi/DEXP_SSD/pi5_fresh.img