Class: Bootloader::UdevMapping

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Singleton, Yast::Logger
Defined in:
src/lib/bootloader/udev_mapping.rb

Overview

Class manages mapping between udev names of disks and partitions.

Constant Summary

Instance Method Summary (collapse)

Instance Method Details

- (Object) to_hash

Returns hash where keys are udev links for disks and partitions and value their kernel devices. TODO: remove when remove pbl support

Examples:

of output

{
  "/dev/disk/by-id/abcd" => "/dev/sda",
  "/dev/disk/by-id/abcde" => "/dev/sda",
  "/dev/disk/by-label/label1" => "/dev/sda1",
  "/dev/disk/by-uuid/aaaa-bbbb-cccc-dddd" => "/dev/sda",
}


33
34
35
# File 'src/lib/bootloader/udev_mapping.rb', line 33

def to_hash
  all_devices
end

- (Object) to_kernel_device(dev)

Converts full udev name to kernel device ( disk or partition )

Parameters:

  • dev (String)

    device udev, mdadm or kernel name like /dev/disk/by-id/blabla

Raises:

  • when device have udev format but do not exists



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'src/lib/bootloader/udev_mapping.rb', line 40

def to_kernel_device(dev)
  log.info "call to_kernel_device for #{dev}"
  raise "invalid device nil" unless dev

  # for non-udev devices try to see specific raid names (bnc#944041)
  if dev =~ /^\/dev\/disk\/by-/
    all_devices[dev] or raise "Unknown udev device #{dev}"
  else
    param = Yast::ArgRef.new({})
    result = Yast::Storage.GetContVolInfo(dev, param)
    return dev unless result # not raid with funny name

    info = param.value
    return info["vdevice"] unless info["vdevice"].empty?
    return info["cdevice"] unless info["cdevice"].empty?

    raise "unknown value for raid device '#{info.inspect}'"
  end
end

- (Object) to_mountby_device(dev)

Converts udev or kernel device (disk or partition) to udev name according to mountby option or kernel device if such udev device do not exists

Parameters:

  • dev (String)

    device udev or kernel one like /dev/disk/by-id/blabla

Raises:

  • when device have udev format but do not exists



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
# File 'src/lib/bootloader/udev_mapping.rb', line 64

def to_mountby_device(dev)
  kernel_dev = to_kernel_device(dev)

  log.info "#{dev} looked as kernel device name: #{kernel_dev}"

  storage_data = storage_data_for(kernel_dev)
  return kernel_dev unless storage_data

  mount_by = used_mount_by(storage_data)
  # explicit request to mount by kernel device
  return kernel_dev if mount_by == :device

  udev_data_key = MOUNT_BY_MAPPING_TO_UDEV[mount_by]
  raise "Internal error unknown mountby #{mount_by}" unless udev_data_key
  udev_pair = map_device_to_udev_devices(
    storage_data[udev_data_key],
    udev_data_key,
    kernel_dev
  ).first
  if !udev_pair
    log.warn "Cannot find udev link to satisfy mount by for #{kernel_dev}"
    return kernel_dev
  end

  # udev pair contain as first udev device and as second coresponding kernel device
  udev_pair.first
end