#!/bin/bash t=32768 # size in blocks xall() { for i in `seq 0 7`;do $* done } mkdir -p part data orig echo "*** $1" case "$1" in test) export FS_DEV=/dev/md0 $0 create && $0 createfs && $0 stop && $0 expand && $0 copy-sb && $0 lo_up && $0 assemble && $0 raid-expand && $0 fs-expand && $0 fs-check echo "---closing---" $0 stop ;; test2) export FS_DEV=/dev/mapper/rt $0 create && $0 crypt /dev/md0 && $0 crypt-open && $0 createfs && $0 crypt-close && $0 stop && $0 expand && $0 copy-sb && $0 lo_up && $0 assemble && $0 raid-expand && $0 crypt-open && $0 fs-expand && $0 fs-check echo "---closing---" $0 stop ;; zero) q(){ rm -f part/$i; touch part/$i; } xall q ;; expand) cp part/{0..7} orig/ q(){ dd if=/dev/zero count=$t >> part/$i; } xall q ;; raid-expand) i=0 s=`stat --printf '%s' part/$i`; x=$[ ($s / 1024)-64 ] mdadm --grow -z $x /dev/md0 ;; create) $0 zero $0 expand $0 lo_up mdadm -Cv -n8 -l5 /dev/md0 /dev/loop{0..7} ;; crypt) dd if=/dev/urandom count=1 of=key cryptsetup luksFormat /dev/md0 key || exit 1 ;; crypt-open) cryptsetup luksOpen /dev/md0 rt --key-file key || exit1 ;; crypt-close) cryptsetup luksClose rt || exit 1 ;; fs-expand) [ "$FS_DEV" == "" ] && echo "!!! FS_DEV not set" && exit 1 mount $FS_DEV data xfs_growfs data umount data ;; fs-check) [ "$FS_DEV" == "" ] && echo "!!! FS_DEV not set" && exit 1 mount $FS_DEV data md5sum -c hash && echo ok || echo error umount data ;; createfs) [ "$FS_DEV" == "" ] && echo "!!! FS_DEV not set" && exit 1 mkfs.xfs $FS_DEV mount $FS_DEV data dd if=/dev/urandom of=data/junk md5sum data/junk | tee hash umount data ;; lo_up) q(){ losetup /dev/loop$i part/$i; } xall q ;; lo_down) q(){ losetup -d /dev/loop$i; } xall q ;; assemble) mdadm -Av /dev/md0 /dev/loop{0..7} ;; stop) umount data $0 crypt-close mdadm -S /dev/md0 $0 lo_down ;; copy-sb) q(){ s=`stat --printf '%s' part/$i`; tail -c 65536 orig/$i | dd bs=1 seek=$[ $s - 65536 ] of=part/$i; } xall q ;; *) echo "asd" ;; esac