From 7ef526dfa6fb5f00b422d805efa7a250ede1c5f1 Mon Sep 17 00:00:00 2001 From: Ing Date: Wed, 4 Jun 2025 16:15:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20findDSMRoot=20=E5=92=8C=20?= =?UTF-8?q?fixDSMRootPart=20=E5=87=BD=E6=95=B0=E4=BB=A5=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=20btrfs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/initrd/opt/rr/include/functions.sh | 9 +++++++-- files/initrd/opt/rr/menu.sh | 20 ++++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/files/initrd/opt/rr/include/functions.sh b/files/initrd/opt/rr/include/functions.sh index 69701bf2..29814e27 100755 --- a/files/initrd/opt/rr/include/functions.sh +++ b/files/initrd/opt/rr/include/functions.sh @@ -445,7 +445,7 @@ function connectwlanif() { # Find and mount the DSM root filesystem function findDSMRoot() { local 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="$(mdadm --detail --scan 2>/dev/null | grep -v "INACTIVE-ARRAY" | 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 @@ -458,7 +458,12 @@ 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 + T="$(blkid -o value -s TYPE "${1}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" + if [ "${T}" = "btrfs" ]; then + btrfs check --readonly "${1}" >/dev/null 2>&1 + else + fsck "${1}" >/dev/null 2>&1 + fi fi } diff --git a/files/initrd/opt/rr/menu.sh b/files/initrd/opt/rr/menu.sh index bd95d7ef..4e25e661 100755 --- a/files/initrd/opt/rr/menu.sh +++ b/files/initrd/opt/rr/menu.sh @@ -1839,7 +1839,7 @@ function allowDSMDowngrade() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue rm -f "${TMP_PATH}/mdX/etc/VERSION" "${TMP_PATH}/mdX/etc.defaults/VERSION" @@ -1871,7 +1871,7 @@ function resetDSMPassword() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/etc/shadow" ]; then @@ -1923,7 +1923,7 @@ function resetDSMPassword() { NEWPASSWD="$(openssl passwd -6 -salt "$(openssl rand -hex 8)" "${STRPASSWD}")" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue sed -i "s|^${USER}:[^:]*|${USER}:${NEWPASSWD}|" "${TMP_PATH}/mdX/etc/shadow" @@ -1965,7 +1965,7 @@ function addNewDSMUser() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue mkdir -p "${TMP_PATH}/mdX/usr/rr/once.d" @@ -2003,7 +2003,7 @@ function forceEnableDSMTelnetSSH() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue mkdir -p "${TMP_PATH}/mdX/usr/rr/once.d" @@ -2047,7 +2047,7 @@ function removeBlockIPDB { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db" @@ -2080,7 +2080,7 @@ function disablescheduledTasks { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then @@ -2121,7 +2121,7 @@ function initDSMNetwork { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue for F in ${TMP_PATH}/mdX/etc/sysconfig/network-scripts/ifcfg-* ${TMP_PATH}/mdX/etc.defaults/sysconfig/network-scripts/ifcfg-*; do @@ -2305,7 +2305,7 @@ function tryRecoveryDSM() { mkdir -p "${TMP_PATH}/mdX" fixDSMRootPart "${DSMROOTPART}" - T="$(blkid -o value -s TYPE "${DSMROOTPART}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${DSMROOTPART}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${DSMROOTPART}" "${TMP_PATH}/mdX" if [ $? -ne 0 ]; then DIALOG --title "$(TEXT "Settings")" \ @@ -2540,7 +2540,7 @@ function reportBugs() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do fixDSMRootPart "${I}" - T="$(blkid -o value -s TYPE "${I}" 2>/dev/null)" + T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')" mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue mkdir -p "${TMP_PATH}/logs/md0/log"