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