Compare commits

..

3 Commits

Author SHA1 Message Date
github-actions[bot]
98ddaa3a75 update 2024-11-27 17:04:28 2024-11-27 17:04:28 +08:00
github-actions[bot]
ffb64ffa71 update 2024-11-27 16:24:35 2024-11-27 16:24:35 +08:00
Ing
5ae9098c11 添加DSM根分区检查与修复功能,屏蔽0B虚拟磁盘 2024-11-27 15:13:22 +08:00
29 changed files with 4297 additions and 4088 deletions

View File

@ -1 +1 @@
24.11.12
24.11.13

View File

@ -42,21 +42,21 @@
"beep": {
"system": false,
"description": {
"en_US": "Beep at startup and shutdown (requires motherboard with buzzer)",
"ar_SA": "صد الصوت عند بدء التشغيل والإغلاق (يتطلب لوحة أم تحتوي على جرس)",
"de_DE": "Beim Starten und Herunterfahren piepen (erfordert Mainboard mit Summer)",
"es_ES": "Pitido al inicio y apagado (requiere placa base con zumbador)",
"fr_FR": "Bip au démarrage et à l'arrêt (nécessite une carte mère avec buzzer)",
"ja_JP": "起動時にブザーを鳴らす(ブザーを備えたマザーボードが必要)",
"ko_KR": "시작 및 종료시 소리 울리기(부저가 있는 메인보드 필요)",
"ru_RU": "при запуске и выключении пищать (требуется материнская плата с зуммером)",
"th_TH": "เสียงเบี๊ยวเมื่อเริ่มต้นและปิดเครื่อง (ต้องใช้เมนบอร์ดที่มีเสียงเบี๊ยว)",
"tr_TR": "Başlangıç ve kapanışta bip sesi çal (ana kartta hoparlör gerektirir)",
"uk_UA": "при запуску та вимкненні пищати (потрібна материнська плата з динаміком)",
"vi_VN": "Phát ra tiếng bíp khi khởi động và tắt máy (yêu cầu bo mạch chủ có loa)",
"zh_CN": "在启动和关机时发出哔声(需要主板有蜂鸣器)",
"zh_HK": "在啟動和關機時發出哔聲(需要主機有蜂鳴器)",
"zh_TW": "在啟動和關機時發出哔聲(需要主機有蜂鳴器)"
"en_US": "Beep at startup and shutdown (requires motherboard with buzzer) Parameters: -m : Mario at startup and AxelF at shutdown",
"ar_SA": "صد الصوت عند بدء التشغيل والإغلاق (يتطلب لوحة أم تحتوي على جرس) المعلمات: -m : ماريو عند بدء التشغيل و AxelF عند الإغلاق",
"de_DE": "Beim Starten und Herunterfahren piepen (erfordert Mainboard mit Summer) Parameter: -m : Mario beim Starten und AxelF beim Herunterfahren",
"es_ES": "Pitido al inicio y apagado (requiere placa base con zumbador) Parámetros: -m : Mario al inicio y AxelF al apagado",
"fr_FR": "Bip au démarrage et à l'arrêt (nécessite une carte mère avec buzzer) Paramètres: -m : Mario au démarrage et AxelF à l'arrêt",
"ja_JP": "起動時にブザーを鳴らす(ブザーを備えたマザーボードが必要) パラメータ: -m : 起動時にマリオ、シャットダウン時にAxelF",
"ko_KR": "시작 및 종료시 소리 울리기(부저가 있는 메인보드 필요) 매개변수: -m : 시작시 Mario 및 종료시 AxelF",
"ru_RU": "при запуске и выключении пищать (требуется материнская плата с зуммером) Параметры: -m : Mario при запуске и AxelF при выключении",
"th_TH": "เสียงเบี๊ยวเมื่อเริ่มต้นและปิดเครื่อง (ต้องใช้เมนบอร์ดที่มีเสียงเบี๊ยว) พารามิเตอร์: -m : Mario เมื่อเริ่มต้นและ AxelF เมื่อปิดเครื่อง",
"tr_TR": "Başlangıç ve kapanışta bip sesi çal (ana kartta hoparlör gerektirir) Parametreler: -m : Başlangıçta Mario ve kapanışta AxelF",
"uk_UA": "при запуску та вимкненні пищати (потрібна материнська плата з динаміком) Параметри: -m : Mario при запуску та AxelF при вимкненні",
"vi_VN": "Phát ra tiếng bíp khi khởi động và tắt máy (yêu cầu bo mạch chủ có loa) Tham số: -m : Mario khi khởi động và AxelF khi tắt máy",
"zh_CN": "在启动和关机时发出哔声(需要主板有蜂鸣器) 参数: -m : 开机 Mario 和 关机 AxelF",
"zh_HK": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m : 開機 Mario 和 關機 AxelF",
"zh_TW": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m : 開機 Mario 和 關機 AxelF"
}
},
"bootwait": {

Binary file not shown.

Binary file not shown.

View File

@ -2094,6 +2094,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -4186,6 +4190,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -6262,6 +6270,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -8338,6 +8350,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -10434,6 +10450,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -12534,6 +12554,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"usbnet": {
"description": "USB network driver framework",
"depends": "usbcore,mii"
@ -13964,6 +13988,10 @@
"description": "TTM memory manager subsystem (for DRM device)",
"depends": "dmabuf,drm"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"typec": {
"description": "USB Type-C Connector Class",
"depends": ""
@ -15526,6 +15554,10 @@
"description": "TTM memory manager subsystem (for DRM device)",
"depends": "dmabuf,drm"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"typec": {
"description": "USB Type-C Connector Class",
"depends": ""
@ -17823,6 +17855,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"uhci-hcd": {
"description": "USB Universal Host Controller Interface driver",
"depends": "usbcore"
@ -19951,6 +19987,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"usbnet": {
"description": "USB network driver framework",
"depends": "usbcore,mii"
@ -22099,6 +22139,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"usbnet": {
"description": "USB network driver framework",
"depends": "usbcore,mii"
@ -24271,6 +24315,10 @@
"description": "Montage Technology TS2020 - Silicon tuner driver module",
"depends": "regmap-i2c"
},
"tty0tty": {
"description": "tty0tty null modem driver",
"depends": ""
},
"usbnet": {
"description": "USB network driver framework",
"depends": "mii"

Binary file not shown.

Binary file not shown.

View File

@ -68,6 +68,7 @@ DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${WORK_PATH}/platforms.yml")"
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${WORK_PATH}/platforms.yml")"
KPRE="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kpre" "${WORK_PATH}/platforms.yml")"
MEV="$(virt-what 2>/dev/null)"
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
CPU="$(awk -F': ' '/model name/ {print $2}' /proc/cpuinfo | uniq)"
MEM="$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo) MB"
@ -76,6 +77,7 @@ printf "%s \033[1;36m%s(%s)\033[0m\n" "$(TEXT "Model: ")" "${MODEL}" "${PLATFO
printf "%s \033[1;36m%s(%s%s)\033[0m\n" "$(TEXT "Version: ")" "${PRODUCTVER}" "${BUILDNUM}" "$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}")"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "Kernel: ")" "${KERNEL}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "LKM: ")" "${LKM}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEV: ")" "${MEV:-physical}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "DMI: ")" "${DMI}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "CPU: ")" "${CPU}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEM: ")" "${MEM}"
@ -178,6 +180,7 @@ CMDLINE['pcie_aspm']="off"
# CMDLINE['nox2apic']="" # check platform
# CMDLINE['nomodeset']=""
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
CMDLINE['mev']="${MEV:-physical}"
if echo "apollolake geminilake purley" | grep -wq "${PLATFORM}"; then
CMDLINE["nox2apic"]=""
@ -266,6 +269,7 @@ if [ "${DIRECT}" = "true" ]; then
grub-editenv ${USER_GRUBENVFILE} set dsm_version="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
grub-editenv ${USER_GRUBENVFILE} set dsm_kernel="${KERNEL}"
grub-editenv ${USER_GRUBENVFILE} set dsm_lkm="${LKM}"
grub-editenv ${USER_GRUBENVFILE} set sys_mev="${MEV:-physical}"
grub-editenv ${USER_GRUBENVFILE} set sys_dmi="${DMI}"
grub-editenv ${USER_GRUBENVFILE} set sys_cpu="${CPU}"
grub-editenv ${USER_GRUBENVFILE} set sys_mem="${MEM}"
@ -285,6 +289,7 @@ else
grub-editenv ${USER_GRUBENVFILE} unset dsm_version
grub-editenv ${USER_GRUBENVFILE} unset dsm_kernel
grub-editenv ${USER_GRUBENVFILE} unset dsm_lkm
grub-editenv ${USER_GRUBENVFILE} unset sys_mev
grub-editenv ${USER_GRUBENVFILE} unset sys_dmi
grub-editenv ${USER_GRUBENVFILE} unset sys_cpu
grub-editenv ${USER_GRUBENVFILE} unset sys_mem

View File

@ -1,4 +1,4 @@
RR_VERSION="24.11.12"
RR_VERSION="24.11.13"
RR_RELEASE=""
RR_TITLE="RR v${RR_VERSION}"

View File

@ -215,7 +215,7 @@ function _get_fastest() {
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done
fi
local fastest="$(echo -e "${speedlist}" | tr -s '\n' | grep -v '999$' | sort -k2n | head -1)"
local fastest="$(echo -e "${speedlist}" | tr -s '\n' | awk '$2 != "999"' | sort -k2n | head -1)"
URL="$(echo "${fastest}" | awk '{print $1}')"
SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type
echo "${URL:-${1}}"
@ -438,6 +438,17 @@ function findDSMRoot() {
return 0
}
###############################################################################
# check and fix the DSM root partition
# 1 - DSM root path
function fixDSMRootPart() {
if mdadm --detail "${1}" 2>/dev/null | grep -i "State" | grep -iEq "active|FAILED|Not Started"; then
mdadm --stop "${1}" >/dev/null 2>&1
mdadm --assemble --scan >/dev/null 2>&1
fsck "${1}" >/dev/null 2>&1
fi
}
###############################################################################
# Copy DSM files to the boot partition
# 1 - DSM root path

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1519,8 +1519,7 @@ function showDisksInfo() {
MSG+="\Zb${NAME}\Zn\nPorts: "
PORTS=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
for P in ${PORTS}; do
if lsscsi -b 2>/dev/null | grep -v - | grep -q "\[${P}:"; then
DUMMY="$([ "$(cat /sys/class/scsi_host/host${P}/ahci_port_cmd 2>/dev/null)" = "0" ] && echo 1 || echo 2)"
if lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep -q "\[${P}:"; then
if [ "$(cat /sys/class/scsi_host/host${P}/ahci_port_cmd 2>/dev/null)" = "0" ]; then
MSG+="\Z1$(printf "%02d" ${P})\Zn "
else
@ -1537,16 +1536,16 @@ function showDisksInfo() {
for PCI in $(lspci -d ::104 2>/dev/null | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l)
PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
MSG+="\Zb${NAME}\Zn\nNumber: ${PORTNUM}\n"
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
done
[ $(lspci -d ::107 2>/dev/null | wc -l) -gt 0 ] && MSG+="\nSerial Attached SCSI:\n"
[ $(lspci -d ::107 2>/dev/null | wc -l) -gt 0 ] && MSG+="\nSAS:\n"
for PCI in $(lspci -d ::107 2>/dev/null | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l)
PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
MSG+="\Zb${NAME}\Zn\nNumber: ${PORTNUM}\n"
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
@ -1571,12 +1570,12 @@ function showDisksInfo() {
for PCI in $(lspci -d ::c03 2>/dev/null | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n)
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l)
PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
MSG+="\Zb${NAME}\Zn\nNumber: ${PORTNUM}\n"
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
done
[ $(ls -l /sys/class/mmc_host 2>/dev/null | grep mmc_host | wc -l) -gt 0 ] && MSG+="\nMMC:\n"
[ $(ls -l /sys/block/mmc* | wc -l) -gt 0 ] && MSG+="\nMMC:\n"
for PCI in $(lspci -d ::805 2>/dev/null | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
PORTNUM=$(ls -l /sys/block/mmc* 2>/dev/null | grep "${PCI}" | wc -l)
@ -1588,7 +1587,7 @@ function showDisksInfo() {
for PCI in $(lspci -d ::108 2>/dev/null | awk '{print $1}'); do
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
PORT=$(ls -l /sys/class/nvme 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n)
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[N:${PORT}:" | wc -l)
PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[N:${PORT}:" | wc -l)
[ ${PORTNUM} -eq 0 ] && continue
MSG+="\Zb${NAME}\Zn\nNumber: ${PORTNUM}\n"
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
@ -1643,7 +1642,7 @@ function MountDSMVolume {
function formatDisks() {
rm -f "${TMP_PATH}/opts"
while read -r KNAME ID SIZE TYPE PKNAME; do
[ "${KNAME}" = "N/A" ] && continue
[ "${KNAME}" = "N/A" ] || [ "${SIZE:0:1}" = "0" ] && continue
[ "${KNAME:0:7}" = "/dev/md" ] && continue
[ "${KNAME}" = "${LOADER_DISK}" ] || [ "${PKNAME}" = "${LOADER_DISK}" ] && continue
printf "\"%s\" \"%-6s %-4s %s\" \"off\"\n" "${KNAME}" "${SIZE}" "${TYPE}" "${ID}" >>"${TMP_PATH}/opts"
@ -1732,6 +1731,7 @@ function allowDSMDowngrade() {
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
rm -f "${TMP_PATH}/mdX/etc/VERSION" "${TMP_PATH}/mdX/etc.defaults/VERSION"
@ -1762,6 +1762,7 @@ function resetDSMPassword() {
rm -f "${TMP_PATH}/menu"
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
if [ -f "${TMP_PATH}/mdX/etc/shadow" ]; then
@ -1806,6 +1807,7 @@ function resetDSMPassword() {
# local NEWPASSWD="$(echo "${VALUE}" | mkpasswd -m sha512)"
local NEWPASSWD="$(openssl passwd -6 -salt $(openssl rand -hex 8) "${VALUE}")"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
sed -i "s|^${USER}:[^:]*|${USER}:${NEWPASSWD}|" "${TMP_PATH}/mdX/etc/shadow"
@ -1851,6 +1853,7 @@ function addNewDSMUser() {
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
@ -1891,6 +1894,7 @@ function forceEnableDSMTelnetSSH() {
ONBOOTUP="${ONBOOTUP}echo \"DELETE FROM task WHERE task_name LIKE ''RRONBOOTUPRR_SSH'';\" | sqlite3 /usr/syno/etc/esynoscheduler/esynoscheduler.db\n"
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
@ -1933,6 +1937,7 @@ function removeBlockIPDB {
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db"
@ -1964,6 +1969,7 @@ function disablescheduledTasks {
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
@ -2003,6 +2009,7 @@ function initDSMNetwork {
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
rm -f "${TMP_PATH}/mdX/etc/sysconfig/network-scripts/ifcfg-bond"* "${TMP_PATH}/mdX/etc/sysconfig/network-scripts/ifcfg-eth"*
@ -2128,14 +2135,16 @@ function tryRecoveryDSM() {
DIALOG --title "$(TEXT "Settings")" \
--infobox "$(TEXT "Trying to recover an installed DSM system ...")" 0 0
DSMROOTS="$(findDSMRoot)"
if [ -z "${DSMROOTS}" ]; then
DSMROOTPART="$(echo "${DSMROOTS}" | head -n 1 | cut -d' ' -f1)"
if [ -z "${DSMROOTPART}" ]; then
DIALOG --title "$(TEXT "Settings")" \
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
mkdir -p "${TMP_PATH}/mdX"
mount -t ext4 "$(echo "${DSMROOTS}" | head -n 1 | cut -d' ' -f1)" "${TMP_PATH}/mdX"
fixDSMRootPart "${DSMROOTPART}"
mount -t ext4 "${DSMROOTPART}" "${TMP_PATH}/mdX"
if [ $? -ne 0 ]; then
DIALOG --title "$(TEXT "Settings")" \
--msgbox "$(TEXT "Mount DSM system partition(md0) failed!\nPlease insert all disks before continuing.")" 0 0
@ -2359,6 +2368,7 @@ function reportBugs() {
if [ -n "${DSMROOTS}" ]; then
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
fixDSMRootPart "${I}"
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
mkdir -p "${TMP_PATH}/logs/md0/log"
@ -3919,6 +3929,11 @@ function notepadMenu() {
if [ $# -ge 1 ]; then
$@
else
if [ -z "${MODEL}" ] && [ -z "${PRODUCTVER}" ] && [ -n "$(findDSMRoot)" ]; then
DIALOG --title "$(TEXT "Main menu")" \
--yesno "$(TEXT "An installed DSM system is detected on the hard disk. Do you want to try to restore it first?")" 0 0
[ $? -eq 0 ] && tryRecoveryDSM
fi
# Main loop
NEXT="m"
[ -n "$(ls ${TMP_PATH}/pats/*.pat 2>/dev/null)" ] && NEXT="u"

View File

@ -1 +1 @@
24.11.12
24.11.13

View File

@ -180,7 +180,7 @@
lspci -d ::104 # 查看 RAID 总线控制器
lspci -d ::105 # 查看 ATA 总线控制器
lspci -d ::106 # 查看 SATA 总线控制器
lspci -d ::107 # 查看 串行 Attached SCSI
lspci -d ::107 # 查看 SAS 总线控制器
lspci -d ::108 # 查看 NVM 控制器
ls -l /sys/class/scsi_host # 查看 ATA 硬盘 host 信息