]>
git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/scripts/hddshutdown
5 # This code is distributed under the terms of the GPL
7 # 13.05.2006 Arne Fitzenreiter
15 my $hdddev = "/dev/$_[0]";
17 my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
18 $atime, $mtime, $ctime, $blksize, $blocks) = stat($hdddev);
20 my $major = $rdev >> 8;
21 my $minor = ($rdev & 0xFF) >> 6;
23 open STAT
, "/tmp/hddshutdown-stat";
24 my @diskstat = <STAT
>;
26 foreach my $line (@diskstat)
29 my @temp = split(/\:\ /,$line);
31 my @devicestat = split(/\ /,$temp[1]);
32 foreach my $stats (@devicestat)
35 my @fields = split(/\((\d+),(\d+)\):\((\d+),(\d+),(\d+),(\d+),(\d+)/,$stats);
36 if ($major eq $fields[1] and $minor eq $fields[2])
38 $lastreadwritereq = $fields[3];
44 open STAT
, "/proc/stat";
45 my @diskstat = <STAT
>;
47 foreach my $line (@diskstat)
50 my @temp = split(/\:\ /,$line);
52 my @devicestat = split(/\ /,$temp[1]);
53 foreach my $stats (@devicestat)
56 my @fields = split(/\((\d+),(\d+)\):\((\d+),(\d+),(\d+),(\d+),(\d+)/,$stats);
57 if ($major eq $fields[1] and $minor eq $fields[2])
59 $readwritereq = $fields[3];
65 if (! -e
"/tmp/hddshutdown-$hdd" ) { system("echo 0 > /tmp/hddshutdown-$hdd"); }
67 if ($readwritereq==$lastreadwritereq) {
68 open STAT
,"/tmp/hddshutdown-$hdd";
69 my $lastsleepstate = <STAT
>;
71 if (! ($lastsleepstate==$readwritereq)) {
72 system("hdparm -y $hdddev");
73 system("logger -t ipfire Shuting down $hdddev !");
74 system("echo $readwritereq > /tmp/hddshutdown-$hdd");
80 if ( -e
"/tmp/hddshutdown-stat" ) {
81 if (open STAT
,"/dev/hda") {
85 if (open STAT
,"/dev/hdb") {
89 if (open STAT
,"/dev/hdc") {
93 if (open STAT
,"/dev/hdd") {
97 if (open STAT
,"/dev/hde") {
101 if (open STAT
,"/dev/hdf") {
105 if (open STAT
,"/dev/hdg") {
109 if (open STAT
,"/dev/hdh") {
116 system("cp /proc/stat /tmp/hddshutdown-stat");