chiark / gitweb /
9db7ec0efb9fc4a04d097f6543093544df177758
[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 lvi=$(lvdisplay -c $dev)
24 vg=${lvi#*:}
25 vg=${vg%%:*}
26 vgsz_le=${lvi#*:*:*:*:*:*:*:*:}
27 vgsz_le=${vgsz_le%%:*}
28
29 vgi=$(vgdisplay -c $vg)
30 pesz_blk=${vgi#*:*:*:*:*:*:*:*:*:*:*:*:}
31 pesz_blk=${pesz_blk%%:*}
32
33 pesz_by=$(( $pesz_blk * 512 ))
34
35 dbrfs=$(debugreiserfs $dev)
36 blksz_by=$(printf "%s" "$dbrfs" | egrep '^Blocksize: ' || fail "blocksize?")
37 blksz_by=${blksz_by#*: }
38
39 if [ $(( $pesz_by % $blksz_by )) != 0 ]; then
40         fail "extent size ${pesz}by does not divide block size ${blksz_by}by"
41 fi
42
43 pesz_blk=$(( $pesz_by / $blksz_by ))
44 vgsz_blk=$(( $vgsz_le * $pesz_blk ))
45
46 echo mount -o remount,resize=$vgsz_blk $dev $mp