chiark / gitweb /
rcopy-repeatedly debugging wip
[chiark-utils.git] / scripts / remountresizereiserfs
1 #!/bin/bash
2 # usage:
3 #   remountresizereiserfs /mountpoint
4
5 set -e
6 fail () { echo >&2 "$*"; exit 1; }
7 case "$#.$1" in 1.[^-]*);; *) fail 'bad usage';; esac
8
9 mp=$1
10
11 df=`df -P $mp`
12 dfl2=`printf "%s" "$df" | sed 1d`
13
14 case "$dfl2" in
15 /dev/*" "[0-9]*" "[0-9]*" "[0-9]*" "[0-9]*"% "/*)
16         dev=${dfl2%% *}
17         mp2=${dfl2##* }
18         if [ "x$mp2" != "x$mp" ]; then fail "mountpoint is $mp2 not $mp"; fi
19         ;;
20 *)      fail "could not parse df output" ;;
21 esac
22
23 dm=/dev/mapper
24 case "$dev" in
25 $dm/*/*)
26         fail "too many path segments in mapper device \`$dev'"
27         ;;
28 $dm/*)
29         lv=${dev#$dm/}
30         lv=${lv//--//}
31         case "$lv" in
32         *-*)    ;;
33         *)      fail "no single hyphen in mapper device \`$lv'";;
34         esac
35         vg=${lv%%-*}
36         lv=${lv#*-}
37         vg=${vg//\//-}
38         lv=${lv//\//-}
39         devu=/dev/$vg/$lv
40         ;;
41 *)
42         devu=$dev
43 esac
44
45 lvi=$(lvdisplay -c $devu)
46 vg=${lvi#*:}
47 vg=${vg%%:*}
48 vgsz_kb=${lvi#*:*:*:*:*:*:}
49 vgsz_kb=${vgsz_kb%%:*}
50
51 dbrfs=$(debugreiserfs $dev)
52 blksz_by=$(printf "%s" "$dbrfs" | egrep '^Blocksize: ' || fail "blocksize?")
53 blksz_by=${blksz_by#*: }
54
55 vgsz_blk=$(dc -e "$vgsz_kb 1024* $blksz_by /p")
56
57 echo mount -o remount,resize=$vgsz_blk $mp