Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 lsblk #"
- 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 "############################################################"
- lsblk -f
- 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 lsblk -f parancs megmutatja."
- echo ""
- losetup -D
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement