mirror of
https://github.com/RROrg/rr.git
synced 2025-06-21 05:51:05 +08:00
添加DSM根分区检查与修复功能,屏蔽0B虚拟磁盘
This commit is contained in:
parent
7b4bb1a9f4
commit
5ae9098c11
@ -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
|
||||
|
@ -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
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user