Skip to content

Instantly share code, notes, and snippets.

@dash17291
Created November 20, 2012 18:20
Show Gist options
  • Save dash17291/4119812 to your computer and use it in GitHub Desktop.
Save dash17291/4119812 to your computer and use it in GitHub Desktop.
#!/bin/bash
#GPL v3 Licensz érvényes erre a szkriptre. Író: CPT.Pirk
#Köszönet bambano, Jester01, vadoca és azbest kollégáknak a prohardver.hu fórumából.
#
#Nem vagyok se programozó, se informatikus, kérem ezek szerint kezelni a szkriptet.
#Azért született meg ez a szkript, mert nem találtam nekem megfelelő megoldást az image fájl
#méretének csökkentésére.
#deklarációk
PROGRAM=`basename $0`
SDCARD=`basename $1`
DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
WORKDIR="$DIR/rpi_shrink"
IMAGEFILE="$WORKDIR/RASPBERRY_PI_SHRINKED_IMAGE.IMG"
#root ellenőrzés
if [ "$(id -u)" != "0" ];
then
echo -e "$PROGRAM program futtatásához root jogokra van szükséged.\n"
exit 1
fi
#használati útmutató
function usage
{
clear
echo "#########################################################################"
echo "# Raspbery PI image shrink script #"
echo "# #"
echo "# Ez a szkript le fogja menteni a Raspberry PI memóriakártyájának #"
echo "# mindkét particióját egy image állományba, az üres terület mentése #"
echo "# nélkül, igy lehetőséged lesz az eredetinél kisebb memóriakártya #"
echo "# használatára, amikor kiirod újra az image-t. #"
echo "# #"
echo "# Első verzió, használd a saját felelőségedre, megeheti a hörcsögödet #"
echo "# #"
echo "#########################################################################"
echo ""
echo " SD kártya: $SDCARD"
echo " Munka könyvtár: $WORKDIR"
echo " Elkészitendő image fájl neve: $IMAGEFILE"
echo ""
echo " Kezdődhet a folyamat? (igen/nem):"
echo ""
read resp
if [ "$resp" = "i" ] || [ "$resp" = "igen" ]
then
clear
else
clear
echo "A program leállt."
exit 1
fi
#exit 0
}
#első használatkor ez jön be
if [ -z "$1" ]; then
clear
echo "#########################################################################"
echo "# Raspbery PI image shrink script #"
echo "# #"
echo "# Kérlek add meg az SD kártya elérési utját, amit az fstab #"
echo "# kimenetében látsz. Ez valószínüleg /dev/mmcblk0 lesz. #"
echo "# #"
echo "# formátum: sudo ./rpi_shrink.sh /dev/mmcblk0 #"
echo "# #"
echo "#########################################################################"
fdisk -l
exit 1
else
usage
fi
#munka könyvtár rendezése
if [ -f $IMAGEFILE ]; then
echo ""
echo "A korábbi munka könyvtár és tartalma törölve."
umount /dev/$SDCARD'p1'
umount /dev/$SDCARD'p2'
umount $LOOPDEVICE'p1'
umount $LOOPDEVICE'p2'
rm -rf -- $WORKDIR
losetup -D
fi
mkdir $WORKDIR
cd $WORKDIR
#átmeneti tároló mappák létrehozása
mkdir SRC_PART1 SRC_PART2 DST_PART1 DST_PART2
#felcsatoljuk az SD partíciókat a fájlrendszerbe a df -h számára és a későbbiekhez
sudo mount /dev/$SDCARD'p1' SRC_PART1
sudo mount /dev/$SDCARD'p2' SRC_PART2
#forrás partíciók adatainak beolvasása
SRC_PART1_MAX=`df -h $WORKDIR/SRC_PART1 | tail -1 | awk '{print $2}'`
SRC_PART1_USED=`df -h $WORKDIR/SRC_PART1 | tail -1 | awk '{print $3}'`
SRC_PART1_TYPE=`parted /dev/$SDCARD -ms p \ | grep "^1" | cut -f 5 -d:`
SRC_PART2_MAX=`df -h $WORKDIR/SRC_PART2 | tail -1 | awk '{print $2}'`
SRC_PART2_USED=`df -h $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3}'`
SRC_PART2_TYPE=`parted /dev/$SDCARD -ms p \ | grep "^2" | cut -f 5 -d:`
#IMG fájl méretének kiszámítása
DEST_PART2_MINIMUM_BYTE=`df $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3 + 10000}'`
DEST_PART2_MINIMUM=`df $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3 / 1024 + 5 + '$SRC_PART1_MAX'}'`
#IMG fájl áttekintő
clear
echo "#########################################################################"
echo " Raspberry PI image shrink script"
echo ""
echo "Az SD kártya 'boot' particiójának teljes mérete: $SRC_PART1_MAX ebből használt: $SRC_PART1_USED fájlrendszere: $SRC_PART1_TYPE "
echo "Az SD kártya 'root fájlrendszer' particiójának teljes mérete: $SRC_PART2_MAX ebből használt: $SRC_PART2_USED fájlrendszere: $SRC_PART2_TYPE "
echo ""
echo "Az iso fájl mérete $DEST_PART2_MINIMUM MB lesz."
echo ""
echo " Kezdődhet az image fájl készítése? (igen/nem):"
echo ""
read resp
if [ "$resp" = "i" ] || [ "$resp" = "igen" ]
then
clear
else
clear
umount /dev/$SDCARD'p1'
umount /dev/$SDCARD'p2'
echo "A program leállt."
exit 1
fi
#IMG fájl létrehozása, loop eszközként csatolása
echo ""
dd if=/dev/zero of=$IMAGEFILE bs=1 count=0 seek=${DEST_PART2_MINIMUM%%.*}'M'
dir
#megnézzük hol ér véget az első partíció, hogy azt követően indulhasson a második
echo ""
#P1_START=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p1' | awk '{print $2}'`
P1_END=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p1' | awk '{print $3}'`
#P2_START=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p2' | awk '{print $2}'`
#echo "$P1_START $P1_END $P2_START"
#exit 1
#partíciók létrehozása az IMG fájlban, boot flag, Fat32 LBA típus az első partíciónak
(echo n; echo p; echo 1; echo; echo $P1_END; echo w) | fdisk -c $IMAGEFILE #par1
(echo n; echo p; echo 2; echo; echo; echo w) | fdisk -c $IMAGEFILE #part2
(echo a; echo 1; echo t; echo 1; echo c; echo w) | fdisk -c $IMAGEFILE #fat32 LBA, boot flag
#nem biztos, hogy a loop modul be van töltve
echo ""
modprobe loop
#loop eszköz rögzítése a kimenetről
LOOPDEVICE=`losetup -f --show $IMAGEFILE`
echo "$LOOPDEVICE"
#partíciók fájlrendszerének kialakítása
echo ""
partx -a -v $LOOPDEVICE
echo ""
mkfs.vfat -F 32 -I $LOOPDEVICE'p1'
echo ""
mkfs.ext4 $LOOPDEVICE'p2'
#-n boot -L root
#csatoljuk a loop eszközt a másoláshoz
echo ""
mount $LOOPDEVICE'p1' DST_PART1
mount $LOOPDEVICE'p2' DST_PART2
echo "Másolás megkezdése"
rsync -vah SRC_PART1/ DST_PART1
echo ""
rsync -vah SRC_PART2/ DST_PART2
echo ""
echo "Másolás kész."
echo ""
umount $LOOPDEVICE'p1'
umount $LOOPDEVICE'p2'
umount /dev/$SDCARD'p1'
umount /dev/$SDCARD'p2'
rm -rf SRC_PART1 SRC_PART2 DST_PART1 DST_PART2
cd ..
clear
echo "#########################################################################"
echo " Raspberry PI image shrink script"
echo ""
echo " Másolás kész."
echo ""
echo ""
echo "Az imgage fájlt bármikor kiírhatod az alábbi paranccsal egy SD kártyára:"
echo "sudo dd bs=4M if=~/rpi_shrink/RASPBERRY_PI_SHRINKED_IMAGE.IMG of=/dev/mmcblk0"
echo "mmcblk0 helyére az SD kártyád nevét írd. A sudo fdisk -l parancs megmutatja."
echo ""
losetup -D
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment