dehydrate-fs is a family of tools for separating out files from disk images for the efficient storage of both.
Nie możesz wybrać więcej, niż 25 tematów
Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
|
- #!/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}"
|