chiark / gitweb /
cgi-fcgi-interp: Add -D
[chiark-utils.git] / scripts / remountresizereiserfs
index 9db7ec0..810a51e 100755 (executable)
@@ -20,27 +20,38 @@ case "$dfl2" in
 *)     fail "could not parse df output" ;;
 esac
 
-lvi=$(lvdisplay -c $dev)
+dm=/dev/mapper
+case "$dev" in
+$dm/*/*)
+       fail "too many path segments in mapper device \`$dev'"
+       ;;
+$dm/*)
+       lv=${dev#$dm/}
+       lv=${lv//--//}
+       case "$lv" in
+       *-*)    ;;
+       *)      fail "no single hyphen in mapper device \`$lv'";;
+       esac
+       vg=${lv%%-*}
+       lv=${lv#*-}
+       vg=${vg//\//-}
+       lv=${lv//\//-}
+       devu=/dev/$vg/$lv
+       ;;
+*)
+       devu=$dev
+esac
+
+lvi=$(lvdisplay -c $devu)
 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 ))
+vgsz_kb=${lvi#*:*:*:*:*:*:}
+vgsz_kb=${vgsz_kb%%:*}
 
 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 ))
+vgsz_blk=$(dc -e "$vgsz_kb 1024* $blksz_by /p")
 
-echo mount -o remount,resize=$vgsz_blk $dev $mp
+echo mount -o remount,resize=$vgsz_blk $mp