changelog tags changeset manifest revisions annotate raw

disks_guess.rb

changeset 10: 816096199a1e
author: frsyuki@vcore
date: Mon Mar 19 01:56:36 2007 +0900 (14 years ago)
permissions: -rw-r--r--
1require "log"
2
3
4class DiskManager
5
6 def idePSMS(name)
7 if name =~ /^hda/
8 return ["primary", "master"]
9 elsif name =~ /^hdb/
10 return ["primary", "slave"]
11 elsif name =~ /^hdc/
12 return ["secondary", "master"]
13 elsif name =~ /^hdd/
14 return ["secondary", "slave"]
15 else
16 return []
17 end
18 end
19 private :idePSMS
20
21
22 def guessPartition(disk_name, disk_size, partition_name, partition_size, removable)
23 type = Array.new
24
25 if disk_size < 40 * 1000 * 1000 * 1000 / 512
26 # sizeは512バイト単位
27 # ディスク自体のサイズが40GB(HDD容量換算)より小さい
28 type.push("flash")
29 else
30 type.push("hdd")
31 end
32
33 if partition_size <= 2
34 # パーティションのサイズが2セクタ以下
35 type.push("extend_partition")
36 else
37 type.push("partition")
38 end
39
40 if removable
41 type.push("external")
42 else
43 type.push("internal")
44 end
45
46 if disk_name =~ /^hd/
47 type.push("ide")
48 type.push( idePSMS(disk_name) )
49 end
50
51 return type
52 end
53 private :guessPartition
54
55
56 def guessDisk(name, size, removable)
57 type = Array.new
58
59 if name =~ /^md[0-9]{1,3}/
60 type.push("raid")
61 type.push("md")
62 elsif name =~ /^dm-[0-9]{1,3}/
63 type.push("raid")
64 type.push("dm")
65 elsif name =~ /^sr[0-9]{1,3}/ || name =~ /^hd[a-z]/
66 type.push("optical")
67 if size < 1024 * 1024 * 1024 / 512
68 # サイズが1GB以下
69 # TODO: type.push("cd")
70 # こちらは不正確
71 # 1GB以下しか焼いていないDVDもCDと判別される
72 else
73 type.push("dvd")
74 end
75 elsif name =~ /^st[0-9]{1,3}/
76 type.push("tape")
77 elsif name =~ /^sg[0-9]{1,3}/
78 type.puhs("genericscsi")
79 end
80
81 if removable
82 type.push("external")
83 else
84 type.push("internal")
85 end
86
87 if name =~ /^hd/
88 type.push("ide")
89 type.push( idePSMS(name) )
90 end
91
92 return type
93 end
94 private :guessDisk
95
96end
97
98
99
100$log.debug "#{File.basename(__FILE__, ".*")} loaded"