check_if_super
}
+calculate_size () {
+ local part=$1
+ local info=""
+ local block_size=0
+ local block_count=0
+ local size=0
+
+ untrap
+
+ if info="$(dumpe2fs -h "$part" 2>/dev/null)"; then
+ retrap
+ block_size="$(echo "$info" | grep "Block size" | awk '{print $3}')"
+ block_count="$(echo "$info" | grep "Block count" | awk '{print $3}')"
+ echo "$((block_size*block_count))"
+ return 0
+ fi
+
+ if size="$(blockdev --getsize64 "$part" 2>/dev/null)"; then
+ retrap
+ echo "$size"
+ return 0
+ fi
+
+ retrap
+ return 1
+}
+
background_copy() {
log "[Info] Background copying A|B partitions for update..."
start_duration=$(date +%s)
fi
fi
else
- /bin/dd if="$CURRENT_PARTITION" of="$NEXT_PARTITION" bs=4096
+ PART_SIZE="$(calculate_size "$CURRENT_PARTITION")"
+ head -c "$PART_SIZE" "$CURRENT_PARTITION" > "$NEXT_PARTITION"
fi
log "[Info] Finished background copy $partition_name from $CURRENT_PARTITION to $NEXT_PARTITION"
NEXT_SHA1=$(head -c "$ROOTFS_CURR_SIZE" "$NEXT_PARTITION" | sha1sum | awk '{print $1}')
fi
else
- CUR_SHA1=$(sha1sum "$CURRENT_PARTITION" | awk '{print $1}')
- NEXT_SHA1=$(sha1sum "$NEXT_PARTITION" | awk '{print $1}')
+ CUR_SHA1=$(head -c "$PART_SIZE" "$CURRENT_PARTITION" | sha1sum | awk '{print $1}')
+ NEXT_SHA1=$(head -c "$PART_SIZE" "$NEXT_PARTITION" | sha1sum | awk '{print $1}')
fi
if [ "$CUR_SHA1" == "$NEXT_SHA1" ]; then