#!/bin/sh get_magic_word() { dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' ' } get_post_padding_word() { local rootfs_length="$(stat -c%s "$1")" [ "$rootfs_length" -ge 4 ] || return rootfs_length=$((rootfs_length-4)) # the JFFS2 end marker must be on a 4K boundary (often 64K or 256K) local unaligned_bytes=$((rootfs_length%4096)) [ "$unaligned_bytes" = 0 ] || return # skip rootfs data except the potential EOF marker dd if="$1" bs=1 skip="$rootfs_length" 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' ' } get_fs_type() { local magic_word="$(get_magic_word "$1")" case "$magic_word" in "3118"*) echo "ubifs" ;; "68737173") local post_padding_word="$(get_post_padding_word "$1")" case "$post_padding_word" in "deadc0de") echo "squashfs-jffs2" ;; *) echo "squashfs" ;; esac ;; *) echo "unknown" ;; esac } round_up() { echo "$(((($1 + ($2 - 1))/ $2) * $2))" }