We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hello! This isn't so much a feature request as a submission of an idea with proof of concept code.
The zpool bar doesn't show the actual capacity of pools, but rather the total size of disks in the pool. Not a big deal.
In my setup I'm using multiple datasets, each with their own quotas. I wanted to see these as part of the MOTD.
Also, when a dataset is using significant space on snapshots, I wanted to visualise that in the bar.
This script is my first pass at it. I wanted to share it if you think there's value in adding it or a variant of it to the repo as a ZFS option.
#!/usr/bin/env bash set -euo pipefail size_format=iec bar_width=60 warn_free_pct=20 red="\e[1;31m" green="\e[1;32m" dim="\e[2m" reset="\e[0m" ds_char="■" snap_char="◆" other_char="▦" free_char="□" function format_bytes() { numfmt --to="${size_format}" --format="%.01f" "$1" } function pct() { awk -v n="$1" -v d="$2" 'BEGIN{ print int(n*100.0/d) }' } function bar() { ds_b="$1" snap_b="$2" other_b="$3" ds_width=$(( (ds_b * bar_width) / 100)) snap_width=$(( (snap_b * bar_width) / 100)) other_width=$(( (other_b * bar_width) / 100 )) rem=$(( bar_width - ds_width - snap_width - other_width )) pct_free=$(( 100 - ds_width - snap_width - other_width )) echo -ne "${dim}[${reset}" if [ "$pct_free" -lt "$warn_free_pct" ]; then echo -ne "$red" else echo -ne "$green" fi if [ $ds_width -gt 0 ]; then printf "${ds_char}%.0s" $(seq 1 $ds_width) fi if [ $snap_width -gt 0 ]; then printf "${snap_char}%.0s" $(seq 1 $snap_width) fi if [ $other_width -gt 0 ]; then printf "${other_char}%.0s" $(seq 1 $other_width) fi if [ $rem -gt 0 ]; then printf "${dim}${free_char}%.0s" $(seq 1 $rem) # To pad with spaces, do this instead: #printf "${dim}%*s" $rem fi echo -e "${reset}${dim}]${reset}" } echo while read -r line; do IFS=$'\t' read -r -a props <<< "$line" name="${props[0]}" avail="${props[1]}" used="${props[2]}" usedsnap="${props[3]}" usedds="${props[4]}" used_other=$(( used - usedsnap - usedds )) capacity=$(( used + avail )) ds_used_pct=$(pct "$usedds" "$capacity") snap_used_pct=$(pct "$usedsnap" "$capacity") other_used_pct=$(pct "$used_other" "$capacity") #echo "$name avail=$avail used=$used usnap=$usedsnap uds=$usedds cap=$capacity dp=$ds_used_pct sp=$snap_used_pct" # Maybe remove the pool name local_name="${name#*/}" if [ "$local_name" = "$name" ]; then echo "$name" else echo " $local_name" fi echo -n " " bar "$ds_used_pct" "$snap_used_pct" "$other_used_pct" echo -n " " printf "Used %s of %s (%s free)\n\n" "$(format_bytes $used)" "$(format_bytes $capacity)" "$(format_bytes $avail)" done < <(zfs list -Hp -t filesystem -o space -d1)
Or with a few tweaks, a compact layout:
No response
The text was updated successfully, but these errors were encountered:
Thank you for sharing! I'll check it out in a bit.
Sorry, something went wrong.
reefland
No branches or pull requests
Is your feature request related to a problem ?
Hello! This isn't so much a feature request as a submission of an idea with proof of concept code.
The zpool bar doesn't show the actual capacity of pools, but rather the total size of disks in the pool. Not a big deal.
In my setup I'm using multiple datasets, each with their own quotas. I wanted to see these as part of the MOTD.
Also, when a dataset is using significant space on snapshots, I wanted to visualise that in the bar.
Describe the solution you'd like.
Describe alternatives you've considered.
This script is my first pass at it. I wanted to share it if you think there's value in adding it or a variant of it to the repo as a ZFS option.
Or with a few tweaks, a compact layout:
Additional context.
No response
The text was updated successfully, but these errors were encountered: