Created
November 20, 2012 18:20
-
-
Save dash17291/4119812 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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