From bc5b6fe1de8a931b19845c46798942d85a1ae2da Mon Sep 17 00:00:00 2001 From: Ing Date: Tue, 23 Apr 2024 05:54:16 +0800 Subject: [PATCH] Fix md0 related operations --- files/initrd/opt/rr/include/functions.sh | 16 ++++------------ files/initrd/opt/rr/menu.sh | 14 +++++++------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/files/initrd/opt/rr/include/functions.sh b/files/initrd/opt/rr/include/functions.sh index a777df1b..6de4b399 100755 --- a/files/initrd/opt/rr/include/functions.sh +++ b/files/initrd/opt/rr/include/functions.sh @@ -376,17 +376,9 @@ function connectwlanif() { # Find and mount the DSM root filesystem # (based on pocopico's TCRP code) function findDSMRoot() { - local DSMROOTS="" - local RAIDS="$(lsblk -pno KNAME,PARTN,FSTYPE,FSVER,LABEL | grep -w " 1" | grep -w "linux_raid_member")" - if echo "${RAIDS}" | grep -q "1.2"; then - # SynologyNAS:0, DiskStation:0, SynologyNVR:0, BeeStation:0 - local LABELS="$(echo "${RAIDS}" | grep "1.2" | awk '{print $5}' | uniq)" - for I in ${LABELS}; do - [ -L "/dev/md/${I}" ] && DSMROOTS="${DSMROOTS} /dev/md/${I}" - done - elif echo "${RAIDS}" | grep -q "0.9"; then - DSMROOTS="$(echo "${RAIDS}" | grep "0.9" | awk '{print $1}')" - fi - echo ${DSMROOTS} + DSMROOTS="" + [ -z "${DSMROOTS}" ] && DSMROOTS="$(mdadm --detail --scan 2>/dev/null | grep -E "name=SynologyNAS:0|name=DiskStation:0|name=SynologyNVR:0|name=BeeStation:0" | awk '{print $2}' | uniq)" + [ -z "${DSMROOTS}" ] && DSMROOTS="$(lsblk -pno KNAME,PARTN,FSTYPE,FSVER,LABEL | grep -E "sd[a-z]{1,2}1" | grep -w "linux_raid_member" | grep "0.9" | awk '{print $1}')" + echo "${DSMROOTS}" return 0 } \ No newline at end of file diff --git a/files/initrd/opt/rr/menu.sh b/files/initrd/opt/rr/menu.sh index a85f4a9b..98732c12 100755 --- a/files/initrd/opt/rr/menu.sh +++ b/files/initrd/opt/rr/menu.sh @@ -1743,7 +1743,7 @@ function tryRecoveryDSM() { fi mkdir -p "${TMP_PATH}/mdX" - mount "$(echo "${DSMROOTS}" | head -n 1 | cut -d' ' -f1)" "${TMP_PATH}/mdX" + mount -t ext4 "$(echo "${DSMROOTS}" | head -n 1 | cut -d' ' -f1)" "${TMP_PATH}/mdX" if [ $? -ne 0 ]; then DIALOG --title "$(TEXT "Advanced")" \ --msgbox "$(TEXT "mount DSM system partition(md0) failed!\nPlease insert all disks before continuing.")" 0 0 @@ -1921,7 +1921,7 @@ function allowDSMDowngrade() { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do - mount "${I}" "${TMP_PATH}/mdX" + mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue [ -f "${TMP_PATH}/mdX/etc/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc/VERSION" [ -f "${TMP_PATH}/mdX/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc.defaults/VERSION" @@ -1948,7 +1948,7 @@ function resetDSMPassword() { rm -f "${TMP_PATH}/menu" mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do - mount ${I} "${TMP_PATH}/mdX" + mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/etc/shadow" ]; then while read L; do @@ -1989,7 +1989,7 @@ function resetDSMPassword() { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do - mount "${I}" "${TMP_PATH}/mdX" + mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue OLDPASSWD="$(cat "${TMP_PATH}/mdX/etc/shadow" 2>/dev/null | grep "^${USER}:" | awk -F ':' '{print $2}')" if [ -n "${NEWPASSWD}" -a -n "${OLDPASSWD}" ]; then @@ -2032,7 +2032,7 @@ function addNewDSMUser() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do - mount "${I}" "${TMP_PATH}/mdX" + mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then sqlite3 ${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db <