Advertisement
Guest User

Untitled

a guest
Mar 11th, 2016
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.70 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #GPL v3 Licensz érvényes erre a szkriptre. Író: CPT.Pirk
  4. #Köszönet bambano, Jester01, vadoca és azbest kollégáknak a prohardver.hu fórumából.
  5. #
  6. #Nem vagyok se programozó, se informatikus, kérem ezek szerint kezelni a szkriptet.
  7. #Azért született meg ez a szkript, mert nem találtam nekem megfelelő megoldást az image fájl
  8. #méretének csökkentésére.
  9.  
  10. #deklarációk
  11.  
  12. PROGRAM=`basename "$0"`
  13. SDCARD=`basename "$1"`
  14.  
  15. DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  16. WORKDIR="$DIR/rpi_shrink"
  17. IMAGEFILE="$WORKDIR/RASPBERRY_PI_SHRINKED_IMAGE.IMG"
  18.  
  19. #root ellenőrzés
  20. if [ "$(id -u)" != "0" ];
  21. then
  22. echo -e "$PROGRAM program futtatásához root jogokra van szükséged.\n"
  23. exit 1
  24. fi
  25.  
  26. #használati útmutató
  27. function usage
  28. {
  29. clear
  30. echo "#########################################################################"
  31. echo "# Raspbery PI image shrink script #"
  32. echo "# #"
  33. echo "# Ez a szkript le fogja menteni a Raspberry PI memóriakártyájának #"
  34. echo "# mindkét particióját egy image állományba, az üres terület mentése #"
  35. echo "# nélkül, igy lehetőséged lesz az eredetinél kisebb memóriakártya #"
  36. echo "# használatára, amikor kiirod újra az image-t. #"
  37. echo "# #"
  38. echo "# Első verzió, használd a saját felelőségedre, megeheti a hörcsögödet #"
  39. echo "# #"
  40. echo "#########################################################################"
  41. echo ""
  42. echo " SD kártya: $SDCARD"
  43. echo " Munka könyvtár: $WORKDIR"
  44. echo " Elkészitendő image fájl neve: $IMAGEFILE"
  45. echo ""
  46. echo " Kezdődhet a folyamat? (igen/nem):"
  47. echo ""
  48. read resp
  49. if [ "$resp" = "i" ] || [ "$resp" = "igen" ]
  50. then
  51. clear
  52. else
  53. clear
  54. echo "A program leállt."
  55. exit 1
  56. fi
  57. #exit 0
  58. }
  59.  
  60. #első használatkor ez jön be
  61. if [ -z "$1" ]; then
  62. clear
  63. echo "#########################################################################"
  64. echo "# Raspbery PI image shrink script #"
  65. echo "# #"
  66. echo "# Kérlek add meg az SD kártya elérési utját, amit az fstab #"
  67. echo "# kimenetében látsz. Ez valószínüleg /dev/mmcblk0 lesz. #"
  68. echo "# #"
  69. echo "# formátum: sudo ./rpi_shrink.sh /dev/mmcblk0 #"
  70. echo "# #"
  71. echo "#########################################################################"
  72. lsblk -f
  73. exit 1
  74. else
  75. usage
  76. fi
  77.  
  78. #munka könyvtár rendezése
  79. if [ -f $IMAGEFILE ]; then
  80. echo ""
  81. echo "A korábbi munka könyvtár és tartalma törölve."
  82. umount /dev/$SDCARD'p1'
  83. umount /dev/$SDCARD'p2'
  84. umount $LOOPDEVICE'p1'
  85. umount $LOOPDEVICE'p2'
  86. rm -rf -- $WORKDIR
  87. losetup -D
  88. fi
  89. mkdir $WORKDIR
  90. cd $WORKDIR
  91.  
  92. #átmeneti tároló mappák létrehozása
  93. mkdir SRC_PART1 SRC_PART2 DST_PART1 DST_PART2
  94.  
  95. #felcsatoljuk az SD partíciókat a fájlrendszerbe a df -h számára és a későbbiekhez
  96. sudo mount /dev/$SDCARD'p1' SRC_PART1
  97. sudo mount /dev/$SDCARD'p2' SRC_PART2
  98.  
  99.  
  100. #forrás partíciók adatainak beolvasása
  101. SRC_PART1_MAX=`df -h $WORKDIR/SRC_PART1 | tail -1 | awk '{print $2}'`
  102. SRC_PART1_USED=`df -h $WORKDIR/SRC_PART1 | tail -1 | awk '{print $3}'`
  103. SRC_PART1_TYPE=`parted /dev/$SDCARD -ms p \ | grep "^1" | cut -f 5 -d:`
  104. SRC_PART2_MAX=`df -h $WORKDIR/SRC_PART2 | tail -1 | awk '{print $2}'`
  105. SRC_PART2_USED=`df -h $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3}'`
  106. SRC_PART2_TYPE=`parted /dev/$SDCARD -ms p \ | grep "^2" | cut -f 5 -d:`
  107.  
  108. #IMG fájl méretének kiszámítása
  109. DEST_PART2_MINIMUM_BYTE=`df $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3 + 10000}'`
  110. DEST_PART2_MINIMUM=`df $WORKDIR/SRC_PART2 | tail -1 | awk '{print $3 / 1024 + 5 + '$SRC_PART1_MAX'}'`
  111.  
  112. #IMG fájl áttekintő
  113. clear
  114. echo "#########################################################################"
  115. echo " Raspberry PI image shrink script"
  116. echo ""
  117. 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 "
  118. 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 "
  119. echo ""
  120. echo "Az iso fájl mérete $DEST_PART2_MINIMUM MB lesz."
  121. echo ""
  122. echo " Kezdődhet az image fájl készítése? (igen/nem):"
  123. echo ""
  124. read resp
  125. if [ "$resp" = "i" ] || [ "$resp" = "igen" ]
  126. then
  127. clear
  128. else
  129. clear
  130. umount /dev/$SDCARD'p1'
  131. umount /dev/$SDCARD'p2'
  132. echo "A program leállt."
  133. exit 1
  134. fi
  135. #IMG fájl létrehozása, loop eszközként csatolása
  136. echo ""
  137. dd if=/dev/zero of=$IMAGEFILE bs=1 count=0 seek=${DEST_PART2_MINIMUM%%.*}'M'
  138. dir
  139.  
  140. #megnézzük hol ér véget az első partíció, hogy azt követően indulhasson a második
  141. echo ""
  142. #P1_START=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p1' | awk '{print $2}'`
  143. P1_END=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p1' | awk '{print $3}'`
  144. #P2_START=`fdisk -l /dev/$SDCARD | grep /dev/$SDCARD'p2' | awk '{print $2}'`
  145.  
  146. #echo "$P1_START $P1_END $P2_START"
  147.  
  148. #exit 1
  149. #partíciók létrehozása az IMG fájlban, boot flag, Fat32 LBA típus az első partíciónak
  150. (echo n; echo p; echo 1; echo; echo $P1_END; echo w) | fdisk -c $IMAGEFILE #par1
  151. (echo n; echo p; echo 2; echo; echo; echo w) | fdisk -c $IMAGEFILE #part2
  152. (echo a; echo 1; echo t; echo 1; echo c; echo w) | fdisk -c $IMAGEFILE #fat32 LBA, boot flag
  153.  
  154. #nem biztos, hogy a loop modul be van töltve
  155. echo ""
  156. modprobe loop
  157.  
  158. #loop eszköz rögzítése a kimenetről
  159. LOOPDEVICE=`losetup -f --show $IMAGEFILE`
  160. echo "$LOOPDEVICE"
  161.  
  162. #partíciók fájlrendszerének kialakítása
  163. echo ""
  164. partx -a -v $LOOPDEVICE
  165. echo ""
  166. mkfs.vfat -F 32 -I $LOOPDEVICE'p1'
  167. echo ""
  168. mkfs.ext4 $LOOPDEVICE'p2'
  169. #-n boot -L root
  170.  
  171. #csatoljuk a loop eszközt a másoláshoz
  172. echo ""
  173. mount $LOOPDEVICE'p1' DST_PART1
  174. mount $LOOPDEVICE'p2' DST_PART2
  175.  
  176. echo "Másolás megkezdése"
  177. rsync -vah SRC_PART1/ DST_PART1
  178. echo ""
  179. rsync -vah SRC_PART2/ DST_PART2
  180. echo ""
  181. echo "Másolás kész."
  182.  
  183. echo ""
  184. umount $LOOPDEVICE'p1'
  185. umount $LOOPDEVICE'p2'
  186. umount /dev/$SDCARD'p1'
  187. umount /dev/$SDCARD'p2'
  188.  
  189. rm -rf SRC_PART1 SRC_PART2 DST_PART1 DST_PART2
  190. cd ..
  191. clear
  192. echo "#########################################################################"
  193. echo " Raspberry PI image shrink script"
  194. echo ""
  195. echo " Másolás kész."
  196. echo ""
  197. echo ""
  198. echo "Az imgage fájlt bármikor kiírhatod az alábbi paranccsal egy SD kártyára:"
  199. echo "sudo dd bs=4M if=~/rpi_shrink/RASPBERRY_PI_SHRINKED_IMAGE.IMG of=/dev/mmcblk0"
  200. echo "mmcblk0 helyére az SD kártyád nevét írd. A sudo fdisk -l parancs megmutatja."
  201. echo ""
  202. losetup -D
  203. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement