#!/usr/bin/perl -wT

# script contributed by Sergey Skvortsov

use strict;
use warnings;

use BSD::Sysctl 'sysctl';
use POSIX 'ceil';
use XML::LibXML;

my $geom_xml = sysctl('kern.geom.confxml');

my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($geom_xml);

my $xpc = XML::LibXML::XPathContext->new($doc);
my @nodes = $xpc->findnodes('//class[child::name="DISK"]/geom');

for my $node (@nodes) {
    my $name            = $xpc->findvalue('./name', $node);
    my $mediasize       = $xpc->findvalue('./provider/mediasize', $node);
    my $human_mediasize = ceil($mediasize /1024/1024/1024);

    print "disk $name : $human_mediasize GB ($mediasize)\n";
}

