Add compression, btree_usage, reconcile and options

This commit is contained in:
2026-01-24 15:52:22 +01:00
parent b7798739ce
commit e6d60ef292
+97 -27
View File
@@ -18,40 +18,43 @@ function convert_to_bytes() {
}' <<< "$1"
}
function ensure_comma() {
if [[ $FIRST -eq 1 ]]
then
FIRST=
else
echo -n ,
fi
}
FSPATH="/mnt"
UUID=
PARSER_STATE=0
#echo switch to 0
while IFS= read -r line; do
case $PARSER_STATE in
0)
if [[ $line =~ ^Filesystem:[[:space:]]+([^[:space:]]+)$ ]]
then
uuid="${BASH_REMATCH[1]}"
# echo "uuid=$UUID"
elif [[ $line == Data\ type* ]]
then
#echo switch to 1
PARSER_STATE=1
#continue
elif [[ $line == "Compression:" ]]
then
#echo switch to 2
echo -n "bcachefs_compression,fspath=\"$FSPATH\",uuid=\"$uuid\" "
FIRST=1
PARSER_STATE=2
#continue
elif [[ $line == "Btree usage:" ]]
then
#echo switch to 3
echo -n "bcachefs_btree_usage,fspath=\"$FSPATH\",uuid=\"$uuid\" "
FIRST=1
PARSER_STATE=3
#continue
elif [[ $line == "Pending reconcile:" ]]
elif [[ $line =~ ^Pending\ reconcile: ]]
then
#echo switch to 4
echo -n "bcachefs_reconcile,fspath=\"$FSPATH\",uuid=\"$uuid\" "
FIRST=1
PARSER_STATE=4
#continue
REMAINING=(replicas checksum erasure_code compression target high_priority pending)
elif [[ $line =~ ^([^ ]+)\ \(device\ ([0-9]+)\):[[:space:]]+([^[:space:]]+)[[:space:]]+([^[:space:]]+)[[:space:]]+([0-9]+)%$ ]]
then
blockdev="${BASH_REMATCH[3]}"
@@ -59,53 +62,103 @@ while IFS= read -r line; do
then
blockdev="/dev/$blockdev"
fi
echo -n "bcachefs,fspath=\"$FSPATH\",UUID=\"$UUID\",devlabel=\"${BASH_REMATCH[1]}\",devid=${BASH_REMATCH[2]},blockdev=\"$blockdev\" mode=\"${BASH_REMATCH[4]}\",usage=${BASH_REMATCH[5]}"
echo -n "bcachefs_devices,fspath=\"$FSPATH\",uuid=\"$uuid\",devlabel=\"${BASH_REMATCH[1]}\",devid=${BASH_REMATCH[2]},blockdev=\"$blockdev\" mode=\"${BASH_REMATCH[4]}\",usage=${BASH_REMATCH[5]}"
#echo switch to 5 label="$label" devid="$devid" block_device="$block_device" mode="$mode" usage="$usage"
PARSER_STATE=5
#continue
#else
#echo unknown?
fi
;;
1)
if [[ "$line" == "" ]]
then
#echo switch to 0
PARSER_STATE=0
#continue
fi
;;
2)
if [[ "$line" == "" ]]
then
#echo switch to 0
echo
PARSER_STATE=0
#continue
elif [[ $line =~ ^([^[:space:]]+)[[:space:]]*(.*)$ ]]
then
field="${BASH_REMATCH[1]// /_}"
rest="${BASH_REMATCH[2]}"
read -r val1 val2 val3 <<<"$rest"
val1="$(convert_to_bytes "$val1")"
ensure_comma
echo -n "${field}_compressed=$val1"
if [[ ! -z "$val2" ]]
then
val2="$(convert_to_bytes "$val2")"
echo -n ",${field}_uncompressed=$val2"
fi
if [[ ! -z "$val3" ]]
then
val3="$(convert_to_bytes "$val3")"
echo -n ",${field}_avgextsize=$val3"
fi
#else
#echo unknown?
fi
;;
3)
if [[ "$line" == "" ]]
then
#echo switch to 0
echo
PARSER_STATE=0
#continue
elif [[ $line =~ ^([^:]+)[:space:]+(.*)$ ]]
then
field="${BASH_REMATCH[1]// /_}"
val="${BASH_REMATCH[2]}"
val="$(convert_to_bytes "$val")"
ensure_comma
echo -n "$field=$val"
#else
#echo unknown?
fi
;;
4)
if [[ "$line" == "" ]]
then
#echo switch to 0
for field in "${REMAINING[@]}"
do
ensure_comma
echo -n "${field}_data=0,${field}_metadata=0"
done
echo
PARSER_STATE=0
#continue
elif [[ $line =~ ^([^:]+):[[:space:]]*(.*)$ ]]
then
field="${BASH_REMATCH[1]// /_}"
rest="${BASH_REMATCH[2]}"
read -r val1 val2 <<<"$rest"
val1="$(convert_to_bytes "$val1")"
val2="$(convert_to_bytes "$val2")"
ensure_comma
echo -n "${field}_data=$val1,${field}_metadata=$val2"
REMAINING=( "${REMAINING[@]/$field}" )
#else
#echo unknown?
fi
;;
5)
if [[ "$line" == "" ]]
then
echo
#echo switch to 0
PARSER_STATE=0
#continue
elif [[ $line =~ ^[[:space:]]*([^:]+):[[:space:]]*(.*)$ ]]; then
elif [[ $line =~ ^[[:space:]]*([^:]+):[[:space:]]*(.*)$ ]]
then
field="${BASH_REMATCH[1]// /_}"
rest="${BASH_REMATCH[2]}"
@@ -133,3 +186,20 @@ while IFS= read -r line; do
# echo "Got line: $line"
#fi
done < <(sudo bcachefs fs usage -a "$FSPATH")
cd "/sys/fs/bcachefs/${uuid}/options" || exit 1
echo -n "bcachefs_options,fspath=\"$FSPATH\",uuid=\"$uuid\" "
FIRST=1
for i in *
do
if [[ $FIRST == 1 ]]
then
FIRST=
else
echo -n ,
fi
echo -n "${i}=\"$(cat "$i")\""
done
echo