arc/storage: rewrite for SAS & DT

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
This commit is contained in:
AuxXxilium
2023-11-04 10:55:31 +01:00
parent b1694ade0c
commit 54b86ff461
2 changed files with 108 additions and 127 deletions

View File

@@ -150,13 +150,6 @@ function arcMenu() {
break
fi
done
for F in "$(readModelArray "${M}" "dt")"; do
if [ "${DT}" = "true" ] && [ ${SASCONTROLLER} -gt 0 ]; then
COMPATIBLE=0
FLGNEX=1
break
fi
done
fi
[ "${DT}" = "true" ] && DT="DT" || DT=""
[ "${BETA}" = "true" ] && BETA="Beta" || BETA=""
@@ -182,12 +175,6 @@ function arcMenu() {
# read model config for dt and aes
if [ "${MODEL}" != "${resp}" ]; then
MODEL="${resp}"
# Check for DT and SAS Controller
DT="$(readModelKey "${resp}" "dt")"
if [ "${DT}" = "true" ] && [ ${SASCONTROLLER} -gt 0 ]; then
# There is no Raid/SCSI Support for DT Models
WARNON=2
fi
# Check for AES
if ! grep -q "^flags.*aes.*" /proc/cpuinfo; then
WARNON=4
@@ -376,10 +363,6 @@ function arcsettings() {
dialog --backtitle "$(backtitle)" --title "Arc Warning" \
--msgbox "WARN: Your Controller has more than 8 Disks connected. Max Disks per Controller: 8" 0 0
fi
if [ ${WARNON} -eq 2 ]; then
dialog --backtitle "$(backtitle)" --title "Arc Warning" \
--msgbox "WARN: You have selected a DT Model. There is no support for SAS Controller." 0 0
fi
if [ ${WARNON} -eq 3 ]; then
dialog --backtitle "$(backtitle)" --title "Arc Warning" \
--msgbox "WARN: You have more than 8 Ethernet Ports. There are only 8 supported by DSM." 0 0
@@ -390,8 +373,6 @@ function arcsettings() {
fi
# Select Extensions
extensionSelection
# Select Fix
#fixSelection
# Config is done
writeConfigKey "arc.confdone" "true" "${USER_CONFIG_FILE}"
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"

View File

@@ -1,115 +1,115 @@
# Get PortMap for Loader
function getmap() {
# Sata Disks
if [ ${SATACONTROLLER} -gt 0 ]; then
# Clean old files
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax"
touch "${TMP_PATH}/drivesmax"
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon"
touch "${TMP_PATH}/drivescon"
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports"
touch "${TMP_PATH}ports"
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap"
touch "${TMP_PATH}/remap"
# Do the work
let DISKIDXMAPIDX=0
DISKIDXMAP=""
let DISKIDXMAPIDXMAX=0
DISKIDXMAPMAX=""
SATADRIVES=0
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
NUMPORTS=0
CONPORTS=0
unset HOSTPORTS
declare -A HOSTPORTS
if [ ! "${DT}" = "true" ]; then
# Sata Disks
if [ ${SATACONTROLLER} -gt 0 ]; then
# Clean old files
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax"
touch "${TMP_PATH}/drivesmax"
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon"
touch "${TMP_PATH}/drivescon"
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports"
touch "${TMP_PATH}ports"
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap"
touch "${TMP_PATH}/remap"
# Do the work
let DISKIDXMAPIDX=0
DISKIDXMAP=""
let DISKIDXMAPIDXMAX=0
DISKIDXMAPMAX=""
SATADRIVES=0
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
NUMPORTS=0
CONPORTS=0
unset HOSTPORTS
declare -A HOSTPORTS
while read -r LINE; do
ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')"
PORT=$(echo ${ATAPORT} | sed 's/ata//')
HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$')
done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}")
while read -r PORT; do
ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd)
[ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0
[ ${ATTACH} = 1 ] && CONPORTS=$((${CONPORTS} + 1)) && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
[ ${DUMMY} = 1 ] # Do nothing for now
NUMPORTS=$((${NUMPORTS} + 1))
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
done
SATAPORTMAPMAX="$(<"${TMP_PATH}/drivesmax")"
SATAPORTMAP="$(<"${TMP_PATH}/drivescon")"
LASTDRIVE=0
# Check for VM
while read -r LINE; do
ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')"
PORT=$(echo ${ATAPORT} | sed 's/ata//')
HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$')
done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}")
while read -r PORT; do
ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd)
[ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0
[ ${ATTACH} = 1 ] && CONPORTS=$((${CONPORTS} + 1)) && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
[ ${DUMMY} = 1 ] # Do nothing for now
NUMPORTS=$((${NUMPORTS} + 1))
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
done
SATAPORTMAPMAX="$(<"${TMP_PATH}/drivesmax")"
SATAPORTMAP="$(<"${TMP_PATH}/drivescon")"
LASTDRIVE=0
# Check for VM
while read -r LINE; do
if [ "${BUS}" != "usb" ] && [ ${LINE} -eq 0 ] && [ "${LOADER_DISK}" = "/dev/sda" ]; then
MAXDISKS="$(readModelKey "${MODEL}" "disks")"
if [ ${MAXDISKS} -lt ${SATADRIVES} ]; then
MAXDISKS=${SATADRIVES}
if [ "${BUS}" != "usb" ] && [ ${LINE} -eq 0 ] && [ "${LOADER_DISK}" = "/dev/sda" ]; then
MAXDISKS="$(readModelKey "${MODEL}" "disks")"
if [ ${MAXDISKS} -lt ${SATADRIVES} ]; then
MAXDISKS=${SATADRIVES}
fi
echo -n "${LINE}>${MAXDISKS}:" >>"${TMP_PATH}/remap"
elif [ ! ${LINE} = ${LASTDRIVE} ]; then
echo -n "${LINE}>${LASTDRIVE}:" >>"${TMP_PATH}/remap"
LASTDRIVE=$((${LASTDRIVE} + 1))
elif [ ${LINE} = ${LASTDRIVE} ]; then
LASTDRIVE=$((${LINE} + 1))
fi
echo -n "${LINE}>${MAXDISKS}:" >>"${TMP_PATH}/remap"
elif [ ${LINE} != ${LASTDRIVE} ]; then
echo -n "${LINE}>${LASTDRIVE}:" >>"${TMP_PATH}/remap"
LASTDRIVE=$((${LASTDRIVE} + 1))
elif [ ${LINE} = ${LASTDRIVE} ]; then
LASTDRIVE=$((${LINE} + 1))
fi
done < <(cat "${TMP_PATH}/ports")
fi
# SAS Disks
if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then
SASDRIVES=0
for PCI in $(lspci -d ::107 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
SASDRIVES=$((${SASDRIVES} + ${PORTNUM}))
done
fi
# USB Disks
if [ $(ls -l /sys/class/scsi_host | grep usb | wc -l) -gt 0 ]; then
USBDRIVES=0
for PCI in $(lspci -d ::c03 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
USBDRIVES=$((${USBDRIVES} + ${PORTNUM}))
done
fi
# NVMe Disks
if [ $(lspci -d ::108 | wc -l) -gt 0 ]; then
NVMEDRIVES=0
for PCI in $(lspci -d ::108 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/nvme | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[N:${PORT}:" | wc -l)
NVMEDRIVES=$((${NVMEDRIVES} + ${PORTNUM}))
done
fi
# Disk Count for MaxDisks
DRIVES=$((${SATADRIVES:-0} + ${SASDRIVES:-0} + ${USBDRIVES:-0} + ${NVMEDRIVES:-0}))
[ -n "${SATADRIVES}" ] && writeConfigKey "device.satadrives" "${SATADRIVES}" "${USER_CONFIG_FILE}"
[ -n "${SASDRIVES}" ] && writeConfigKey "device.sasdrives" "${SASDRIVES}" "${USER_CONFIG_FILE}"
[ -n "${USBDRIVES}" ] && writeConfigKey "device.usbdrives" "${USBDRIVES}" "${USER_CONFIG_FILE}"
[ -n "${NVMEDRIVES}" ] && writeConfigKey "device.nvmedrives" "${NVMEDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.drives" "${DRIVES}" "${USER_CONFIG_FILE}"
if [ ${DRIVES} -gt 26 ]; then
TEXT+="\nYou have connected more then 26 Disks."
TEXT+="\nDSM can only adress a maximum of 26 Disks."
dialog --backtitle "$(backtitle)" --colors --title "Arc Disks" \
--msgbox "${TEXT}" 0 0
fi
# Compute PortMap Options
if [ "${DT}" != "true" ]; then
done < <(cat "${TMP_PATH}/ports")
fi
# SAS Disks
if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then
SASDRIVES=0
for PCI in $(lspci -d ::107 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
SASDRIVES=$((${SASDRIVES} + ${PORTNUM}))
done
fi
# USB Disks
if [ $(ls -l /sys/class/scsi_host | grep usb | wc -l) -gt 0 ]; then
USBDRIVES=0
for PCI in $(lspci -d ::c03 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
USBDRIVES=$((${USBDRIVES} + ${PORTNUM}))
done
fi
# NVMe Disks
if [ $(lspci -d ::108 | wc -l) -gt 0 ]; then
NVMEDRIVES=0
for PCI in $(lspci -d ::108 | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
PORT=$(ls -l /sys/class/nvme | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n)
PORTNUM=$(lsscsi -b | grep -v - | grep "\[N:${PORT}:" | wc -l)
NVMEDRIVES=$((${NVMEDRIVES} + ${PORTNUM}))
done
fi
# Disk Count for MaxDisks
DRIVES=$((${SATADRIVES:-0} + ${SASDRIVES:-0} + ${USBDRIVES:-0} + ${NVMEDRIVES:-0}))
[ -n "${SATADRIVES}" ] && writeConfigKey "device.satadrives" "${SATADRIVES}" "${USER_CONFIG_FILE}"
[ -n "${SASDRIVES}" ] && writeConfigKey "device.sasdrives" "${SASDRIVES}" "${USER_CONFIG_FILE}"
[ -n "${USBDRIVES}" ] && writeConfigKey "device.usbdrives" "${USBDRIVES}" "${USER_CONFIG_FILE}"
[ -n "${NVMEDRIVES}" ] && writeConfigKey "device.nvmedrives" "${NVMEDRIVES}" "${USER_CONFIG_FILE}"
writeConfigKey "device.drives" "${DRIVES}" "${USER_CONFIG_FILE}"
if [ ${DRIVES} -gt 26 ]; then
TEXT+="\nYou have connected more then 26 Disks."
TEXT+="\nDSM can only adress a maximum of 26 Disks."
dialog --backtitle "$(backtitle)" --colors --title "Arc Disks" \
--msgbox "${TEXT}" 0 0
fi
# Compute PortMap Options
if [ ${SATACONTROLLER} -gt 0 ]; then
SATAREMAP="$(awk '{print $1}' "${TMP_PATH}/remap" | sed 's/.$//')"
# Show recommended Option to user