1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
import os
def tryOpen(filename):
try:
procFile = open(filename)
except IOError:
return ""
return procFile
def num2prochdx(num):
return "/proc/ide/hd" + ("a","b","c","d","e","f","g","h","i")[num] + "/"
class Harddisk:
def __init__(self, index):
self.index = index
host = self.index / 4
bus = (self.index & 2)
target = (self.index & 1)
self.prochdx = num2prochdx(index)
self.devidex = "/dev/ide/host%d/bus%d/target%d/lun0/" % (host, bus, target)
def hdindex(self):
return self.index
def capacity(self):
procfile = tryOpen(self.prochdx + "capacity")
if procfile == "":
return -1
line = procfile.readline()
procfile.close()
try:
cap = int(line)
except:
return -1
return cap
def model(self):
procfile = tryOpen(self.prochdx + "model")
if procfile == "":
return ""
line = procfile.readline()
procfile.close()
return line.strip()
def free(self):
procfile = tryOpen("/proc/mounts")
if procfile == "":
return -1
free = -1
while 1:
line = procfile.readline()
if line == "":
break
if line.startswith(self.devidex):
parts = line.strip().split(" ")
try:
stat = os.statvfs(parts[1])
except OSError:
continue
free = stat.f_bfree/1000 * stat.f_bsize/1000
break
procfile.close()
return free
def numPartitions(self):
try:
idedir = os.listdir(self.devidex)
except OSError:
return -1
numPart = -1
for filename in idedir:
if filename.startswith("disc"):
numPart += 1
if filename.startswith("part"):
numPart += 1
return numPart
def existHDD(num):
mediafile = tryOpen(num2prochdx(num) + "media")
if mediafile == "":
return -1
line = mediafile.readline()
mediafile.close()
if line.startswith("disk"):
return 1
return -1
class HarddiskManager:
def __init__(self):
hddNum = 0
self.hdd = [ ]
while 1:
if existHDD(hddNum) == 1:
self.hdd.append(Harddisk(hddNum))
hddNum += 1
if hddNum > 8:
break
def HDDList(self):
list = [ ]
for hd in self.hdd:
cap = hd.capacity() / 1000 * 512 / 1000
hdd = hd.model() + " ("
if hd.index & 1:
hdd += "slave"
else:
hdd += "master"
if cap > 0:
hdd += ", %d,%d GB" % (cap/1024, cap%1024)
hdd += ")"
list.append((hdd, hd))
return list
|