Class: Macinbox::VMDK

Inherits:
Object
  • Object
show all
Defined in:
lib/macinbox/vmdk.rb

Class Method Summary collapse

Class Method Details

.create_raw_vmdk(device, output) ⇒ Object

Raises:



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