#!/bin/sh base_dir="/var/lib/phosphor-software-manager/hostfw" ro_dir="/media/hostfw/running-ro" running_dir="${base_dir}/running" file_recovered=0 if [ -f "${ro_dir}/81e00994.lid" ]; then #look for the DEVTREE and the preserved files filesList=$(grep 'PRESERVED\|DEVTREE' "${ro_dir}/81e00994.lid") for eachFile in ${filesList}; do eachFile=${eachFile##partition*=} eachFile=$(echo "${eachFile}" | cut -d "," -f 1) #check if it is a symbolic link if [ -L "${running_dir}/${eachFile}" ]; then # get the symlink target file eachFile="$(readlink "${running_dir}/${eachFile}")" if [ -f "${running_dir}/${eachFile}" ] && [ -f "${ro_dir}/${eachFile}" ]; then runsize="$(stat -c '%s' "${running_dir}/${eachFile}")" rosize="$(stat -c '%s' "${ro_dir}/${eachFile}")" # Partition size may have changed or became corrupted # restoring the file from the readonly copy if [ "$runsize" != "$rosize" ]; then cp -p ${ro_dir}/"${eachFile}" ${running_dir}/"${eachFile}" # Log PEL to indicate such busctl call xyz.openbmc_project.Logging \ /xyz/openbmc_project/logging \ xyz.openbmc_project.Logging.Create Create "ssa{ss}" \ xyz.openbmc_project.Software.Version.Error.HostFile \ xyz.openbmc_project.Logging.Entry.Level.Error 3 "FILE_NAME" \ "${eachFile}" "CURRENT_FILE_SIZE" "${runsize}" "EXPECTED_FILE_SIZE" \ "${rosize}" file_recovered=1 fi fi fi done #one or more files could be recovered. So trigger dump outside the while loop if [ $file_recovered -eq 1 ]; then # Initiate dump busctl call xyz.openbmc_project.Dump.Manager \ /xyz/openbmc_project/dump/bmc xyz.openbmc_project.Dump.Create \ CreateDump "a{sv}" 0 fi fi