#!/bin/bash # usage: # remountresizereiserfs /mountpoint set -e fail () { echo >&2 "$*"; exit 1; } case "$#.$1" in 1.[^-]*);; *) fail 'bad usage';; esac mp=$1 df=`df -P $mp` dfl2=`printf "%s" "$df" | sed 1d` case "$dfl2" in /dev/*" "[0-9]*" "[0-9]*" "[0-9]*" "[0-9]*"% "/*) dev=${dfl2%% *} mp2=${dfl2##* } if [ "x$mp2" != "x$mp" ]; then fail "mountpoint is $mp2 not $mp"; fi ;; *) fail "could not parse df output" ;; esac lvi=$(lvdisplay -c $dev) vg=${lvi#*:} vg=${vg%%:*} vgsz_le=${lvi#*:*:*:*:*:*:*:*:} vgsz_le=${vgsz_le%%:*} vgi=$(vgdisplay -c $vg) pesz_blk=${vgi#*:*:*:*:*:*:*:*:*:*:*:*:} pesz_blk=${pesz_blk%%:*} pesz_by=$(( $pesz_blk * 512 )) dbrfs=$(debugreiserfs $dev) blksz_by=$(printf "%s" "$dbrfs" | egrep '^Blocksize: ' || fail "blocksize?") blksz_by=${blksz_by#*: } if [ $(( $pesz_by % $blksz_by )) != 0 ]; then fail "extent size ${pesz}by does not divide block size ${blksz_by}by" fi pesz_blk=$(( $pesz_by / $blksz_by )) vgsz_blk=$(( $vgsz_le * $pesz_blk )) echo mount -o remount,resize=$vgsz_blk $dev $mp