ich hatte es, wie schon gesagt, mit einem 128GB USB Stick an der Beere versucht und kam nicht zum Erfolg. Frag aber nicht, was da für Fehlermeldungen waren. Ging auf jeden Fall nicht.
Image verkleinern mit pishrink
-
raspelman -
18. März 2017 um 14:58 -
Erledigt
-
-
Image verkleinern mit pishrink? Schau mal ob du hier fündig wirst!
-
Frag aber nicht, was da für Fehlermeldungen waren. Ging auf jeden Fall nicht.
Mit der Aussage 'Ging nicht' kann leider keiner was anfangen und helfen. Tip für's nächste Mal: Die Fehlermeldung(en) und was Du genau getan hast protokollmäßig in eine TextDatei schreiben und dann hier posten
-
Jawohl!
hatte gestern alles nicht so geklappt. Hätte nur mit Handy Bilder machen sollen. Alles andere war abgeklemmt. Aber ja, mache ich so
-
Stimmt. Mit dem Handy kann man ja auch gut Photos machen.
Allerdings hat das einen Nachteil: Man kann z.B. Fehlermeldungen nicht einfach per copy und paste kopieren sondern muss sie abtippen. Ist aber immer noch besser als 'Ging nicht'
-
Vielleicht gbts ja OCR-Apps um das abtippen zu vermeiden?
-
-
Viele Fehler werden auch in den Logfiles protokolliert. Das kann man copy+pasten.
Servus !
-
Hallo zusammen
Hier im Forum wird ja fleissig über das Script diskutiert und scheinbar haben es auch schon einige am laufen.
Bei mir will es nicht so recht, ich bekomme immer diese Meldung:
Console
unter /home/pi/backup ist mein NAS gemounted und dort liegt das Image welches ich verkleinern möchte.
Die Funktion -s habe ich ebenfalls probiert und bekomme das gleiche Ergebnis
Wäre echt froh, wenn ich PiShrink ans laufen bekäme.
Als System habe ich RASPBIAN JESSIE LITE.
Danke für eure Hilfe
-
-
Ich hatte mal einen PR gestellt bei dem mit der Option -d Debuginformationen geschrieben werden. Zeige doch mal was da rauskommt. Vielleicht gibt es irgendeine Indikation.
-
Hallo,
Frage: hast Du das Filesystem der SD-Karte expandiert?
Ich vermute mal ja,
Ich hole mal etwas aus.
Das Image (mit diversen Programmen) ist eines, welches mit Win32DiskImager auf eine SD Karte geschrieben wurde.
Nach deiner Frage habe ich das Filesystem einfach mal mit raspi-config expandiert.
Leider bekomme ich dan dem Prozedere keinen Zugiff (SSH) mehr auf den Pi.
Schau dort, ob es bei Dir die gleiche Ursache hat.
Das verstehe ich nicht, also die Ursache
Ich hatte mal einen PR gestellt bei dem mit der Option -d Debuginformationen geschrieben werden. Zeige doch mal was da rauskommt. Vielleicht gibt es irgendeine Indikation.
Also du meinst ich solle mal dieses Script versuchen?
Bash
Alles anzeigen#!/bin/bash version="v0.1" function info() { echo "$1..." } function error() { echo -n "ERROR occured in line $1: " shift echo "$@" } function cleanup() { if losetup $loopback &>/dev/null; then losetup -d "$loopback" fi if [ "$debug" = true ]; then local old_owner=$(stat -c %u:%g "$src") chown $old_owner "$LOGFILE" fi } function logVariables() { if [ "$debug" = true ]; then echo "Line $1" >> "$LOGFILE" shift local v var for var in "$@"; do eval "v=\$$var" echo "$var: $v" >> $LOGFILE done fi } usage() { echo "Usage: $0 [-sd] imagefile.img [newimagefile.img]"; exit -1; } should_skip_autoexpand=false debug=false while getopts ":sd" opt; do case "${opt}" in s) should_skip_autoexpand=true ;; d) debug=true;; *) usage ;; esac done shift $((OPTIND-1)) CURRENT_DIR=$(pwd) SCRIPTNAME="${0##*/}" LOGFILE=${CURRENT_DIR}/${SCRIPTNAME%.*}.log if [ "$debug" = true ]; then info "Creating log file $LOGFILE" rm $LOGFILE &>/dev/null exec 1> >(stdbuf -i0 -o0 -e0 tee -a "$LOGFILE" >&1) exec 2> >(stdbuf -i0 -o0 -e0 tee -a "$LOGFILE" >&2) fi echo "${0##*/} $version" #Args src="$1" img="$1" #Usage checks if [[ -z "$img" ]]; then usage fi if [[ ! -f "$img" ]]; then error $LINENO "$img is not a file..." exit -2 fi if (( EUID != 0 )); then error $LINENO "You need to be running as root." exit -3 fi #Check that what we need is installed for command in parted losetup tune2fs md5sum e2fsck resize2fs; do which $command 2>&1 >/dev/null if (( $? != 0 )); then error $LINENO "$command is not installed." exit -4 fi done #Copy to new file if requested if [ -n "$2" ]; then info "Copying $1 to $2..." cp --reflink=auto --sparse=always "$1" "$2" if (( $? != 0 )); then error $LINENO "Could not copy file..." exit -5 fi old_owner=$(stat -c %u:%g "$1") chown $old_owner "$2" img="$2" fi # cleanup at script exit trap cleanup ERR EXIT #Gather info info "Gatherin data" beforesize=$(ls -lh "$img" | cut -d ' ' -f 5) logVariables $LINENO beforesize if ! parted_output=$(parted -ms "$img" unit B print); then rc=$? error $LINENO "parted failed with rc $rc" exit -6 fi parted_output=$(tail -n 1 <<< $parted_output) logVariables $LINENO parted_output partnum=$(echo "$parted_output" | cut -d ':' -f 1) partstart=$(echo "$parted_output" | cut -d ':' -f 2 | tr -d 'B') logVariables $LINENO partnum partstart info "Mounting image" if ! loopback=$(losetup -f --show -o $partstart "$img"); then rc=$? error $LINENO "losetup failed with rc $rc" exit -7 fi if ! tune2fs_output=$(tune2fs -l "$loopback"); then error $LINENO "tunefs failed" exit -8 fi currentsize=$(echo "$tune2fs_output" | grep '^Block count:' | tr -d ' ' | cut -d ':' -f 2) blocksize=$(echo "$tune2fs_output" | grep '^Block size:' | tr -d ' ' | cut -d ':' -f 2) logVariables $LINENO tune2fs_output currentsize blocksize #Check if we should make pi expand rootfs on next boot if [ "$should_skip_autoexpand" = false ]; then #Make pi expand rootfs on next boot mountdir=$(mktemp -d) mount "$loopback" "$mountdir" if [ $(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1) != "0542054e9ff2d2e0507ea1ffe7d4fc87" ]; then echo "Creating new /etc/rc.local" mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" #####Do not touch the following lines##### cat <<\EOF1 > "$mountdir/etc/rc.local" #!/bin/bash do_expand_rootfs() { ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') PART_NUM=${ROOT_PART#mmcblk0p} if [ "$PART_NUM" = "$ROOT_PART" ]; then echo "$ROOT_PART is not an SD card. Don't know how to expand" return 0 fi # Get the starting offset of the root partition PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g') [ "$PART_START" ] || return 1 # Return value will likely be error for fdisk as it fails to reload the # partition table because the root fs is mounted fdisk /dev/mmcblk0 <<EOF p d $PART_NUM n p $PART_NUM $PART_START p w EOF cat <<EOF > /etc/rc.local && #!/bin/sh echo "Expanding /dev/$ROOT_PART" resize2fs /dev/$ROOT_PART rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local EOF reboot exit } raspi_config_expand() { /usr/bin/env raspi-config --expand-rootfs if [[ $? != 0 ]]; then return -1 else rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local reboot exit fi } raspi_config_expand echo "WARNING: Using backup expand..." sleep 5 do_expand_rootfs echo "ERROR: Expanding failed..." sleep 5 rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local exit 0 EOF1 #####End no touch zone##### chmod +x "$mountdir/etc/rc.local" fi umount "$mountdir" else echo "Skipping autoexpanding process..." fi #Make sure filesystem is ok info "Checking filesystem" if ! e2fsck -p -f "$loopback"; then rc=$? error $LINENO "fsck failed with rc $rc" exit -9 fi if ! minsize=$(resize2fs -P "$loopback"); then rc=$? error $LINENO "resize2fs failed with rc $rc" exit -10 fi minsize=$(cut -d ':' -f 2 <<< $minsize | tr -d ' ') logVariables $LINENO minsize if [[ $currentsize -eq $minsize ]]; then error $LINENO "Image already shrunk to smallest size" exit -11 fi #Add some free space to the end of the filesystem extra_space=$(($currentsize - $minsize)) logVariables $LINENO extra_space for space in 5000 1000 100; do if [[ $extra_space -gt $space ]]; then minsize=$(($minsize + $space)) break fi done logVariables $LINENO minsize #Shrink filesystem info "Shrinking filesystem" resize2fs -p "$loopback" $minsize if [[ $? != 0 ]]; then error $LINENO "resize2fs failed" mount "$loopback" "$mountdir" mv "$mountdir/etc/rc.local.bak" "$mountdir/etc/rc.local" umount "$mountdir" losetup -d "$loopback" exit -12 fi sleep 1 #Shrink partition partnewsize=$(($minsize * $blocksize)) newpartend=$(($partstart + $partnewsize)) logVariables $LINENO partnewsize newpartend if ! parted -s -a minimal "$img" rm $partnum; then rc=$? error $LINENO "parted failed with rc $rc" exit -13 fi if ! parted -s "$img" unit B mkpart primary $partstart $newpartend; then rc=$? error $LINENO "parted failed with rc $rc" exit -14 fi #Truncate the file info "Shrinking image" if ! endresult=$(parted -ms "$img" unit B print free); then rc=$? error $LINENO "parted failed with rc $rc" exit -15 fi endresult=$(tail -1 <<< $endresult | cut -d ':' -f 2 | tr -d 'B') logVariables $LINENO endresult if ! truncate -s $endresult "$img"; then rc=$? error $LINENO "trunate failed with rc $rc" exit -16 aftersize=$(ls -lh "$img" | cut -d ' ' -f 5) logVariables $LINENO aftersize info "Shrunk $img from $beforesize to $aftersize"
-
Ich hatte mal einen PR gestellt bei dem mit der Option -d Debuginformationen geschrieben werden. Zeige doch mal was da rauskommt. Vielleicht gibt es irgendeine Indikation.
So habe es gerade versucht. Leider das gleiche Ergebnis
Console
root@rpi-Pi-Ager:/usr/local/bin# sudo /usr/local/bin/pishrink1.sh -d /home/pi/backup/piager/beta.img
Creating log file /usr/local/bin/pishrink1.log...
pishrink1.sh v0.1
Gatherin data...
Mounting image...
Checking filesystem...
rootfs: 47483/118560 Dateien (0.2% nicht zusammenhängend), 371045/471040 Blöcke
resize2fs 1.43.4 (31-Jan-2017)
ERROR occured in line 225: Image already shrunk to smallest size
-
Ich fand dieses Tutotial recht hilfreich: https://linuxundich.de/raspberry-pi/p…erry-pi-images/
ERROR occured in line 225: Image already shrunk to smallest size
Sieht so aus, als wäre es schon maximal "geschrumpft". Woher hast Du das Image, das Du verkleinern möchtest?
Ich habe erst vor ein paar Tagen das Tool gebraucht, da hat es nicht über ein Image gemoppert.
MfG
Jürgen
-
@ root@rpi-Pi-Ager:sudo /usr/local/bin/pishrink.sh /home/pi/backup/betarelease_Denni.img
Wenn pishrink mit nur einem Filenamen aufgerufen wird [/home/pi/backup/betarelease_Denni.img] wird das File selbst geshrinkt.
Ein bereits einmal geshrinktes File kann nicht nochmals geschrinkt werden --> Image already shrunk to smallest size.
root# sudo ... funktioniert nur dann verlässlich fehlerfrei, wenn der User root in die sudoers aufgenommen wird
Was ist denn die Ausgabe von:< sudo fdisk -l /home/pi/backup/betarelease_Denni.img >
Servus !
-
Das Image habe ich selber erstellt mit dd. Also noch nicht geshrinkt.
Auch wenn ich eines mit dem Win32Diskimager erstelle bekomme ich die Meldungen.
Bei dem Befehl erhalte ich:
Console
Disk /home/pi/backup/piager/betarelease_Denni.img: 7,3 GiB, 7820279808 bytes, 15 273984 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd5651396
Device Boot Start End Sectors Size I d Type
/home/pi/backup/piager/betarelease_Denni.img1 8192 93236 85045 41,5M c W95 FAT
/home/pi/backup/piager/betarelease_Denni.img2 94208 3862527 3768320 1,8G 8 3 Linux
Was ich eigenartig finde, ist dass ich mit
<sudo truncate -s $(((3862527+1)*512)) betarelease_Denni.img>
das Image verkleinert bekomme und ein nutzbares, mit Win32DiskImager erhalte.
-
Jetzt habe ich einen neuen Gedankengang, welche aber tiefer in die Materie eingeht.
Kann man nicht wie in meinem Script ein Backup mittels <dd> erstellen, dann mit <sudo fdisk -l /home/pi/backup/betarelease_Denni.img> den End-Bock auslesen und dann diesen Vert als Variable in <sudo truncate -s $(((3862527+1)*512)) betarelease_Denni.img> übergeben?
Dann könne man sich PiShrink doch sparen? Vorausgesetzt, das Auslesen würde gehen.
-
Was steht denn in /usr/local/bin/pishrink1.log?
-
Was steht denn in /usr/local/bin/pishrink1.log?
pishrink1.log
pishrink1.sh v0.1
Gatherin data...
Line 110
beforesize: 7,3G
Line 117
parted_output: 2:48234496B:1977614335B:1929379840B:ext4::;
Line 121
partnum: 2
partstart: 48234496
Mounting image...
Line 136
tune2fs_output: tune2fs 1.43.4 (31-Jan-2017)
Filesystem volume name: rootfs
Last mounted on: /tmp/tmp.SIjd6X9QQS
Filesystem UUID: 72bfc10d-73ec-4d9e-a54a-1cc507ee7ed2
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 118560
Block count: 471040
Reserved block count: 22583
Free blocks: 99995
Free inodes: 71077
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 107
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 7904
Inode blocks per group: 494
Flex block group size: 16
Filesystem created: Wed Nov 29 03:35:09 2017
Last mount time: Sun Feb 3 18:35:22 2019
Last write time: Sun Feb 3 18:35:23 2019
Mount count: 0
Maximum mount count: -1
Last checked: Sun Feb 3 18:35:23 2019
Check interval: 0 (<none>)
Lifetime writes: 2594 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: ff6a5011-c642-4ab4-9ab8-19bd9ac5ff95
Journal backup: inode blocks
currentsize: 471040
blocksize: 4096
Checking filesystem...
rootfs: 47483/118560 Dateien (0.2% nicht zusammenhängend), 371045/471040 Blöcke
resize2fs 1.43.4 (31-Jan-2017)
Line 223
minsize: 471040
ERROR occured in line 225: Image already shrunk to smallest size
Kann jetzt aber nicht genau sagen von welchem Versuch das Ganze ist; bin gerade einen Test mit einem Bash Script am laufen lassen.
Habe heute mein mittels <sudo truncate -s $(((3862527+1)*512)) betarelease_Denni.img> verkleinertes Image auf eine 32GB SD-Card geschrieben. bin gerade ein neues Backup am schreiben lassen.
-
Es gibt noch einen anderen PR von mir. Da haben Forenmitglieder geholfen weitere Recovery Funktionen zuzufuegen. Vielleicht probierst Du das mal.
-
Auf eine 8 GB SD hast Du ein Original Image (Raspian Light ?)
Disk /home/pi/backup/piager/betarelease_Denni.img: 7,3 GiB, 7820279808 bytes, 15273984 sectors
Units: sectors of 1 * 512 = 512 bytes
Device Boot Start End Sectors Size I d Type
P Nr1 8192 93236 85045 41,5M c W95 FAT
P Nr2 94208 3862527 3768320 1,8G 8 3 Linux
Weil die Root Partition Nr.2 so klein ist, dass sie nicht weiter verkleinert werden kann, beendet sich pishrink in Zeile 226 (#111)
Die Filegrösse würde aber erst danach berichtigt (Zeile 279) und daher nicht mehr abgearbeitet.
Jetzt hast Du manuell das Fileende auf 1977614336 Bytes, Sektor 3862528 gesetzt und jetzt sollte fdisk
am Anfang
Disk /home/pi/backup/piager/betarelease_Denni.img: 1,9 GiB, 1977614336 bytes, 3862528 sectors
stehen.
Kleiner gehts nur mehr, wenn Du betarelease_Denni.img noch kompromierst.
Normalerweise wird bei der Einrichtung/Installatuin einer 8 GB Karte das root Filesystem auf die 8 GB Grenze ausgedehnt und nicht auf der Grenze des Installations Image, 1,8 GB, belassen.
Servus !
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!