equal
deleted
inserted
replaced
1 package BlockDev; |
1 package BlockDev; |
|
2 |
|
3 use 5.010; |
2 use strict; |
4 use strict; |
3 use warnings; |
5 use warnings; |
|
6 use Attribute::Params::Validate qw(:all); |
4 |
7 |
5 our $VERSION = "0.0"; |
8 our $VERSION = "0.0"; |
|
9 |
|
10 my %X; |
|
11 |
|
12 sub list { |
|
13 open(my $fh => "/proc/partitions"); |
|
14 return map { (split)[3] } grep /^\s*\d+/ => <$fh>; |
|
15 } |
|
16 |
|
17 sub new : Validate(uuid => 0, dev => 0) : method { |
|
18 my $class = shift; |
|
19 my $self = bless \my $x => $class; |
|
20 my %arg = @_; |
|
21 $X{$self} = \%arg; |
|
22 |
|
23 if ($arg{dev}) { |
|
24 die "ERROR device `$arg{dev}': $!\n" |
|
25 if not -b $arg{dev}; |
|
26 $self->_rdev_by_dev; |
|
27 } |
|
28 |
|
29 return $self; |
|
30 } |
|
31 |
|
32 sub major { return $X{+shift}{major} } |
|
33 sub minor { return $X{+shift}{minor} } |
|
34 |
|
35 sub _rdev_by_dev { |
|
36 my $self = shift; |
|
37 $X{$self}{major} = (stat $X{$self}{dev})[6] >> 8; |
|
38 $X{$self}{minor} = (stat _)[6] & 0xFF; |
|
39 } |
|
40 |
|
41 sub rdev { |
|
42 my $self = shift; |
|
43 return $self->major, $self->minor if wantarray; |
|
44 return join " " => $self->major, $self->minor; |
|
45 } |
|
46 |
|
47 sub dev { |
|
48 my $self = shift; |
|
49 return $X{$self}{dev} if exists $X{$self}{dev}; |
|
50 } |
|
51 |
|
52 sub DESTROY { |
|
53 my $self = shift; |
|
54 delete $X{$self}; |
|
55 } |
|
56 |
|
57 1; |
|
58 |
|
59 __END__ |
|
60 |
|
61 =head1 NAME |
|
62 |
|
63 BlockDev - library for doing various things on block devices |
|
64 |
|
65 =head1 SYNOPSIS |
|
66 |
|
67 use BlockDev; |
|
68 |
|
69 @devices = BlockDev->list(); |
|
70 |
|
71 $device = BlockDev->new(uuid => "02323-232-22..."); |
|
72 $device = BlockDev->new(dev => "/dev/sda1"); |
|
73 |
|
74 ($major, $minor) = $device->rdev; |
|
75 |
|
76 =head1 Static methods |
|
77 |
|
78 =over |
|
79 |
|
80 =item list() |
|
81 |
|
82 Lists all known block devices (basically listing of F</proc/partitions>) |
|
83 |
|
84 =item new() |
|
85 |
|
86 Create a new blockdev object. I<$> |
|
87 |
|
88 =back |
|
89 |
|
90 |