dehydrate-fs is a family of tools for separating out files from disk images for the efficient storage of both.
Nelze vybrat více než 25 témat
Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
|
- #!/usr/bin/env bash
- set -eo pipefail
-
- [ -t 0 ] && { echo "$0 must be run as a filter." >&2; exit 1; }
-
- mfile="$1"; [ -z "$1" ] && { echo "No image file specified!" >&2; exit 1; }
-
- BLOCKSIZE=`sed -nE 's/^#BLOCKSIZE=([0-9]+)$/\1/p' "$mfile"`
- [ -z "$BLOCKSIZE" ] && { echo "Mapfile does not specify blocksize!" >&2; exit 1; }
-
- map="$(grep -v ^\# "$mfile" \
- | awk '/[a-f0-9]{64}/{curfile=$2;next}{print curfile, $0}' \
- | sort -unk 3)"
- nitems=`wc -l <<<"$map"`
-
- shopt -s expand_aliases
- alias dd="dd bs=$BLOCKSIZE status=none"
-
- {
- pos=0
- for (( i = 0; i < $nitems; i++ )) do
- read hash lblock block lengt _ < <(sed $((i+1))'q;d' <<<"$map")
- dd if=/dev/stdin count=$((block-pos))
- dd if=/dev/stdin count=$((lengt-1)) >/dev/null
- dd if=pool/$hash count=$((lengt-1)) skip=$lblock
- pos=$((block+lengt-1))
- done
- dd if=/dev/stdin
- } > "${2:-/dev/stdout}"
|