Edith: die gzip-Lösung dauert länger als ohne Packer, 600s contra 400s bei 8GB-SD
Normaler Weg
Backup
dd if=/dev/sdX bs=1M of=image.img
Restore
dd if=image.img of=/dev/sdX bs=1m
Backup GZ
dd if=/dev/sdX bs=1M | gzip > /pfad/image.gz
X=a/b/c/d… die Partition halt, herausfinden mit
cat /proc/partitions
oder
tail -f /var/log/syslog beim Einstecken
Restore
gzip -dc /pfad/image.gz | dd of=/dev/sdx bs=1M
gzip spart Platz, Zeit eher nicht, bs=1M spart Zeit, Lesen/Schreiben geht dreimal so schnell.
Edith zum folgenden Skript: geht nicht, die „neuen“ Images haben eine andere Partitionierung, leere Sektoren vor der ersten Partition.
Ein elegantes Skript zum nachträglichen Schrumpfen der erstellten Images gibt’s hier, die passen dann auch auf kleiner SD-Karten, die Images müssen auf der Festplatte liegen.
#!/bin/bash
# Automatic Image file resizer
# Written by SirLagz
strImgFile=$1
if [[ ! $(whoami) =~ "root" ]]; then
echo ""
echo "**********************************"
echo "*** This should be run as root ***"
echo "**********************************"
echo ""
exit
fi
if [[ -z $1 ]]; then
echo "Usage: ./autosizer.sh "
exit
fi
if [[ ! -e $1 || ! $(file $1) =~ "x86" ]]; then
echo "Error : Not an image file, or file doesn't exist"
exit
fi
partinfo=`parted -m $1 unit B print`
partnumber=`echo "$partinfo" | grep ext4 | awk -F: ' { print $1 } '`
partstart=`echo "$partinfo" | grep ext4 | awk -F: ' { print substr($2,0,length($2)-1) } '`
loopback=`losetup -f --show -o $partstart $1`
e2fsck -f $loopback
minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
minsize=`echo $minsize+1000 | bc`
resize2fs -p $loopback $minsize
sleep 1
losetup -d $loopback
partnewsize=`echo "$minsize * 4096" | bc`
newpartend=`echo "$partstart + $partnewsize" | bc`
part1=`parted $1 rm 2`
part2=`parted $1 unit B mkpart primary $partstart $newpartend`
endresult=`parted -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)-1) } '`
truncate -s $endresult $1