Initial Commit
This commit is contained in:
commit
ca4de5aa4e
|
@ -0,0 +1,23 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Drew Bonasera
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# PiShrink #
|
||||||
|
PiShrink is a bash script that automatically shrink a pi image that will then resize to the max size of the SD card on boot.
|
||||||
|
`Usage: ./pishrink imagefile.img`
|
||||||
|
|
||||||
|
## Example ##
|
||||||
|
```bash
|
||||||
|
[user@localhost PiShrink]$ sudo ./shrink.sh pi.img
|
||||||
|
e2fsck 1.42.9 (28-Dec-2013)
|
||||||
|
Pass 1: Checking inodes, blocks, and sizes
|
||||||
|
Pass 2: Checking directory structure
|
||||||
|
Pass 3: Checking directory connectivity
|
||||||
|
Pass 4: Checking reference counts
|
||||||
|
Pass 5: Checking group summary information
|
||||||
|
/dev/loop1: 88262/1929536 files (0.2% non-contiguous), 842728/7717632 blocks
|
||||||
|
resize2fs 1.42.9 (28-Dec-2013)
|
||||||
|
resize2fs 1.42.9 (28-Dec-2013)
|
||||||
|
Resizing the filesystem on /dev/loop1 to 773603 (4k) blocks.
|
||||||
|
Begin pass 2 (max = 100387)
|
||||||
|
Relocating blocks XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
|
Begin pass 3 (max = 236)
|
||||||
|
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
|
Begin pass 4 (max = 7348)
|
||||||
|
Updating inode references XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
|
The filesystem on /dev/loop1 is now 773603 blocks long.
|
||||||
|
|
||||||
|
Shrunk pi.img from 30G to 3.1G
|
||||||
|
```
|
||||||
|
|
||||||
|
## Credits ##
|
||||||
|
Thanks to SirLagz for the code to shrink http://sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/
|
|
@ -0,0 +1,57 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#Args
|
||||||
|
img=$1
|
||||||
|
|
||||||
|
#Usage checks
|
||||||
|
if [[ -z $img ]]; then
|
||||||
|
echo "Usage: $0 imagefile.img"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
if [[ ! -e $img ]]; then
|
||||||
|
echo "ERROR: $img is not a file..."
|
||||||
|
exit -2
|
||||||
|
fi
|
||||||
|
if (( EUID != 0 )); then
|
||||||
|
echo "ERROR: You need to be running as root."
|
||||||
|
exit -3
|
||||||
|
fi
|
||||||
|
|
||||||
|
#Gather info
|
||||||
|
beforesize=`ls -lah $img | cut -d ' ' -f 5`
|
||||||
|
partinfo=`parted -m $img unit B print`
|
||||||
|
partnumber=`echo "$partinfo" | grep ext4 | awk -F: ' { print $img } '`
|
||||||
|
partstart=`echo "$partinfo" | grep ext4 | awk -F: ' { print substr($2,0,length($2)-1) } '`
|
||||||
|
loopback=`losetup -f --show -o $partstart $img`
|
||||||
|
|
||||||
|
#Make pi expand rootfs on next boot
|
||||||
|
mountdir=`mktemp -d`
|
||||||
|
mount $loopback $mountdir
|
||||||
|
mv $mountdir/etc/rc.local $mountdir/etc/rc.expand.tmp
|
||||||
|
cat <<\EOF > $mountdir/etc/rc.local
|
||||||
|
#!/bin/sh
|
||||||
|
/usr/bin/raspi-config --expand-rootfs; mv -f /etc/rc.expand.tmp /etc/rc.local; reboot
|
||||||
|
exit 0
|
||||||
|
EOF
|
||||||
|
chmod +x $mountdir/etc/rc.local
|
||||||
|
umount $loopback
|
||||||
|
|
||||||
|
#Shrink filesystem
|
||||||
|
e2fsck -f $loopback
|
||||||
|
minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
|
||||||
|
minsize=`echo $minsize+20000 | bc`
|
||||||
|
resize2fs -p $loopback $minsize
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
#Shrink partition
|
||||||
|
losetup -d $loopback
|
||||||
|
partnewsize=`echo "$minsize * 4096" | bc`
|
||||||
|
newpartend=`echo "$partstart + $partnewsize" | bc`
|
||||||
|
part1=`parted $img rm 2`
|
||||||
|
part2=`parted $img unit B mkpart primary $partstart $newpartend`
|
||||||
|
|
||||||
|
#Truncate the file
|
||||||
|
endresult=`parted -m $img unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)-1) } '`
|
||||||
|
truncate -s $endresult $img
|
||||||
|
aftersize=`ls -lah $img | cut -d ' ' -f 5`
|
||||||
|
|
||||||
|
echo "Shrunk $img from $beforesize to $aftersize"
|
Loading…
Reference in New Issue