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
|
# File 'lib/macinbox/vmdk.rb', line 8
def self.create_raw_vmdk(device, output)
disk_info = Task.backtick %W[ /usr/sbin/fdisk #{device} ]
geometry_re = /geometry: (\d+)\/(\d+)\/(\d+) \[(\d+) sectors\]/
match = geometry_re.match(disk_info)
raise Macinbox::Error.new("failed to determine disk geometry") if match.nil? || match.captures.length != 4
device_sectors = match.captures[3]
device_cylinders = match.captures[0]
device_heads_per_track = match.captures[1]
device_sectors_per_track = match.captures[2]
bios_cylinders = 1024
bios_heads_per_track = device_heads_per_track
bios_sectors_per_track = device_sectors_per_track
File.write output, <<~EOF
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=fffffffe
parentCID=ffffffff
isNativeSnapshot="no"
createType="monolithicFlat"
# Extent description
RW #{device_sectors} FLAT "#{device}" 0
# The Disk Data Base
#DDB
ddb.adapterType = "lsilogic"
ddb.deletable = "true"
ddb.geometry.biosCylinders = "#{bios_cylinders}"
ddb.geometry.biosHeads = "#{bios_heads_per_track}"
ddb.geometry.biosSectors = "#{bios_sectors_per_track}"
ddb.geometry.cylinders = "#{device_cylinders}"
ddb.geometry.heads = "#{device_heads_per_track}"
ddb.geometry.sectors = "#{device_sectors_per_track}"
ddb.longContentID = "9fa218b506cfe68615c39994fffffffe"
ddb.uuid = "60 00 C2 99 91 76 dd 77-6e 0d 84 8b b0 24 6e 00"
ddb.virtualHWVersion = "14"
EOF
end
|