Skip to content

Instantly share code, notes, and snippets.

@jpluimers
Created September 29, 2017 08:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpluimers/c5c0c3d4aad0029adf10c675491dbef0 to your computer and use it in GitHub Desktop.
Save jpluimers/c5c0c3d4aad0029adf10c675491dbef0 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
import argparse
import subprocess
parser = argparse.ArgumentParser(
description='Gives quotas from a BTRFS filesystem in a readable form'
)
parser.add_argument(
'--unit', metavar='U', type=str,
default='G',
help='SI Unit, [B]ytes, K, M, G, T, P',
)
parser.add_argument(
'mount_point', metavar='PATH', type=str,
default='/',
help='BTRFS mount point',
)
sys_args = parser.parse_args()
mount_point = sys_args.mount_point
multiplicator_lookup = ['B', 'K', 'M', 'G', 'T', 'P']
subvolume_data = dict()
cmd = ["btrfs", "subvolume", "list", mount_point]
for line in subprocess.check_output(cmd).splitlines():
args = line.strip().split(' ')
subvolume_data[int(args[1])] = args[-1]
print("subvol\t\t\t\t\t\tgroup total unshared")
print("-" * 79)
cmd = ["btrfs", "qgroup", "show", "--raw", mount_point]
for line in subprocess.check_output(cmd).splitlines():
args = [x for x in line.strip().split(' ') if len(x)>0]
try:
subvolume_id = args[0].split('/')[-1]
subvolume_name = subvolume_data[int(subvolume_id)]
except:
subvolume_name = "(unknown)"
multiplicator = 1024 ** multiplicator_lookup.index(sys_args.unit)
try:
try:
total = "%02.2f" % (float(args[1]) / multiplicator)
unshared = "%02.2f" % (float(args[2]) / multiplicator)
except ValueError:
continue
print("%s\t%s\t%s%s %s%s" % (
subvolume_name.ljust(40),
args[0],
total.rjust(10), sys_args.unit,
unshared.rjust(10), sys_args.unit,
))
except IndexError:
pass
#!/usr/bin/env python3
import argparse
import subprocess
parser = argparse.ArgumentParser(
description='Gives quotas from a BTRFS filesystem in a readable form'
)
parser.add_argument(
'--unit', metavar='U', type=str,
default='G',
help='SI Unit, [B]ytes, K, M, G, T, P',
)
parser.add_argument(
'mount_point', metavar='PATH', type=str,
default='/',
help='BTRFS mount point',
)
sys_args = parser.parse_args()
mount_point = sys_args.mount_point
multiplicator_lookup = ['B', 'K', 'M', 'G', 'T', 'P']
subvolume_data = dict()
cmd = ["btrfs", "subvolume", "list", mount_point]
for line in subprocess.check_output(cmd).splitlines():
args = str(line, encoding='utf8').split()
subvolume_data[int(args[1])] = args[-1]
print("subvol\t\t\t\t\t\tgroup total unshared")
print("-" * 79)
cmd = ["btrfs", "qgroup", "show", "--raw", mount_point]
for line in subprocess.check_output(cmd).splitlines():
args = str(line, encoding='utf8').split()
try:
subvolume_id = args[0].split('/')[-1]
subvolume_name = subvolume_data[int(subvolume_id)]
except:
subvolume_name = "(unknown)"
multiplicator = 1024 ** multiplicator_lookup.index(sys_args.unit)
try:
try:
total = "%02.2f" % (float(args[1]) / multiplicator)
unshared = "%02.2f" % (float(args[2]) / multiplicator)
except ValueError:
continue
print("%s\t%s\t%s%s %s%s" % (
subvolume_name.ljust(40),
args[0],
total.rjust(10), sys_args.unit,
unshared.rjust(10), sys_args.unit,
))
except IndexError:
pass
#!/bin/bash
[[ ! -d $1 ]] && { echo Please pass mountpoint as first argument >&2 ;
exit 1 ; }
while read x i x g x x l x p
do
volName[i]=$p
done < <(btrfs subvolume list $1)
while read g r e
do
[[ -z $name ]] && echo -e "subvol\tqgroup\ttotal\tunshared"
group=${g##*/}
[[ ! -z ${volName[group]} ]] && name=${volName[group]} || name='(unknown)'
echo $name $g `numfmt --to=iec $r` `numfmt --to=iec $e`
done < <(btrfs qgroup show --raw $1 | tail -n+3) | column -t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment