Script : Automatic RPi Image Downsizer

Script : Automatic RPi Image Downsizer

Nicht jede Micro-SD-Karte hat die gleiche Speichergröße, das musste ich jetzt feststellen, als ich mein Image einer libreelec Version auf eine gleichgroße Karte kopieren wollte.

Ich habe mir auf 16-GB-Micro-SD ein Image erstellt, dieses konnte ich problemlos auf Karten kopieren.
Jetzt habe ich mir ebenfalls 16-GB-Micro-SD-Karten bestellt.

Beim Zurückschreiben auf diese Karten erhalte ich folgenden Fehler:

CODE: ALLES AUSWÄHLEN
Error mounting /dev/sdc2 at /media/stefan/f2c26989-d7ab-4c16-9d6a-36e40c02035b: Command-line `mount -t „ext4“ -o „uhelper=udisks2,nodev,nosuid“ „/dev/sdc2“ „/media/stefan/f2c26989-d7ab-4c16-9d6a-36e40c02035b“‚ exited with non-zero exit status 32: mount: wrong fs type, bad option, bad superblock on /dev/sdc2,
missing codepage or helper program, or other error

 

Da die Hersteller bei Mirco-SD-Karten große Toleranzen des Speichervolumens haben, kann es vorkommen, dass man bei einem Image von einer 16-GB-Karte Probleme bekommt, wenn man diese auf eine angeblich ebenfalls 16-GB-Karte schreiben möchte. Es gibt mehrere Möglichkeiten, Image auf passender Weise zu erstellen.

Ich möchte euch den Weg zeigen, den ich gefunden habe.  

Auf der Webseite http://sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/

habe ich dieses Script gefunden:

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

 

Die Datei downloaden und ausführbar machen

chmod -c u+x autosizer.sh

Starten kann man das Script mit ./autosizer.sh Image.img

./autosizer.sh raspberry-pi-libreelec.img

Bei mir machte ein Code-Teil Probleme:

if [[ ! -e $1 || ! $(file $1) =~ „x86“ ]]; then
echo „Error : Not an image file, or file doesn’t exist“
exitecho „Usage: ./autosizer.sh
exit

Ich habe diesen aus dem Script entfernt, diesen kann man hier Downloaden.

Das Image wird in-place ersetzt.  Das Image, das du als Parameter dem Skript übergeben hast, wird direkt verändert. Das verkleinerte Image ist also am gleichen Ort zu finden wie das alte und es hat den gleichen Namen.

Jetzt kann man das Image auch auf kleinere Karten spielen.

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.