Re: Identify disks for setup-storage

andrew bezella <[email protected]>
Newsgroups gmane.linux.debian.fai
Organization internet archive
Message-ID <[email protected]>
On Sun, 2023-01-08 at 11:26 +0100, Thomas Lange wrote:
> Hi Thomas,
> 
> I use a script to reorder the variable $disklist, so setup-storage
> can
> mostly use disk1, but I can define the order of the disk depending on
> disk types or even the serial number of a disk. The script is
> class/99-disklist.sh:

we use a similar strategy inspired by a 2013 discussion[1].  with
batches of homogeneously-built hosts we can use the information in
`/dev/disk/by-path` to walk through a known disk layout in our
preferred order (see attached).

hth,

	andy

1. https://lists.uni-koeln.de/pipermail/linux-fai/2013-November/010229.html

-- 
andrew bezella <[email protected]>
internet archive
99-disklist.sh (application/x-shellscript, 5.3 KB)
#!/bin/bash
# TODO: error conditions (and exit codes in class scripts)?
# cf. How to handle large number of disk devices in "arbitrary" order
# https://lists.uni-koeln.de/pipermail/linux-fai/2013-November/010229.html

add_to_disks() {
  local disks="$1"
  local disk_bypath="$2"

  if [[ -L "${disk_bypath}" ]] ; then
    disks+="$(realpath "${disk_bypath}" | sed --expression="s%/dev/%%") "
  fi

  echo "${disks}"
  return 0
}

mydisks() {
  # TODO: maybe try using `sg_ses` along the lines of
  # https://kevit.github.io/2015/05/12/managing-your-jbod-on-lsi/
  # or `smp_discover` per:
  # http://sg.danny.cz/sg/smp_utils.html
  local -a sas_addr
  local disks expander

  if ifclass -o X8DT3 X8DT6 X10DRD_ITP X8DT6_F X11DPH_T ; then
    disks+="${osdisk1} "
    disks+="${osdisk2} "
  elif ifclass S500CA ; then
    # newconsole -- ASUS S500CA laptop - timj 5/5/2017
    disks+="sda "
  fi

  for dev in /dev/bsg/expander* ; do
    expander="$(basename "${dev}")"
    sas_addr+=("$(cat /sys/class/sas_device/"${expander}"/sas_address)")
  done

  # TODO: refactor by board?
  if ifclass DISK36 ; then
    if ifclass X8DT6 ; then
      local pci_addr="0000:05:00.0"

      # 24 disks on #SAS_ADDR0#
      for i in {12..35} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
      done

      # 12 disks on #SAS_ADDR1#
      for i in {12..23} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
      done
    elif ifclass X8DT6_F ; then
      local pci_addr="0000:05:00.0"

      # 24 disks on #SAS_ADDR0#
      for i in {12..35} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
      done

      # 12 disks on #SAS_ADDR1#
      for i in {12..23} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
      done
    elif ifclass X8DT3 ; then
      local pci_addr="0000:03:00.0"

      # 12 disks on #SAS_ADDR0#
      for i in {4..15} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
      done

      # 24 disks on #SAS_ADDR1#
      for i in {4..27} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
      done
    elif ifclass X10DRD_ITP ; then
      local pci_addr="0000:03:00.0"

      # 24 disks on #SAS_ADDR0#
      for i in {0..11} {28..39} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
      done

      # 12 disks on #SAS_ADDR1#
      for i in {0..11} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
      done
    elif ifclass X11DPH_T ; then
      local pci_addr="0000:86:00.0"

      if ifclass SAS2 ; then
        # 24 disks on #SAS_ADDR0#
        for i in {12..35} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
        done

        # 12 disks on #SAS_ADDR1#
        for i in {12..23} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
        done
      elif ifclass SAS3008 ; then
        # 24 disks on #SAS_ADDR1#
        for i in {0..11} {28..39} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
        done

        # 12 disks on #SAS_ADDR0#
        for i in {0..11} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
        done
      else
        # 24 disks on #SAS_ADDR0#
        for i in {0..11} {28..39} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
        done

        # 12 disks on #SAS_ADDR1#
        for i in {0..11} ; do
          disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
        done
      fi
    fi
  elif ifclass DISK80 ; then
    if ifclass X11DPH_T ; then
      local pci_addr="0000:86:00.0"
      # 24 disks on #SAS_ADDR0#
      for i in {0..11} {28..39} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[0]}-phy${i}-lun-0")"
      done

      # 20 disks on #SAS_ADDR1#
      for i in {0..15} {28..31} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[1]}-phy${i}-lun-0")"
      done

      # 24 disks on #SAS_ADDR2#
      for i in {0..11} {28..39} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[2]}-phy${i}-lun-0")"
      done

      # 12 disks on #SAS_ADDR3#
      for i in {0..11} ; do
        disks="$(add_to_disks "${disks}" "/dev/disk/by-path/pci-${pci_addr}-sas-exp${sas_addr[3]}-phy${i}-lun-0")"
      done
    fi
  fi

  echo "${disks}"
  return 0
}

main() {
  local disklist

  sed --in-place --expression="/^disklist=/d" "$LOGDIR/additional.var"
  if [[ -d /dev/disk/by-path ]] ; then
    disklist=$(mydisks)

    echo "New disklist: $disklist"
    echo "disklist=\"$disklist\"" >> "$LOGDIR/additional.var"

  else
    echo "Cannot get disk information"
  fi
}

main
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.