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