Чтобы обновить базу дисков smartctl на CentOS release 6.7 (Final) нужно использовать новый скрипт, так как старый, который идёт в дистрибутиве не работает.
update-smart-drivedb -v ./aa.txt Download from branches/RELEASE_5_43_DRIVEDB % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 109 329 109 329 0 0 1108 0 --:--:-- --:--:-- --:--:-- 2611 ./aa.txt.error: rejected by /usr/sbin/smartctl, probably no longer compatible
С момента моего предыдущего обновления снова изменилась структура smartmontools линков для получения свежей базы. Поэтому я написал скрипт который загружает скрипт обновления и настраивает его так чтобы он стянул свежую базу дисков.
cat prepare-update-smart-drivedb.sh #!/bin/bash URL="http://sourceforge.net/p/smartmontools/code/HEAD/tree/trunk/smartmontools/update-smart-drivedb.in?format=raw" UPDATEFILE="update-smart-drivedb" if [ -e "${UPDATEFILE}" ] ; then echo "File \"${UPDATEFILE}\" exists already. Abort." exit 1 fi wget "${URL}" -O "${UPDATEFILE}" SMARTCTL="`which smartctl 2>/dev/null`" if [ -z "${SMARTCTL}" ] ; then echo "smartctl not found" exit 1 fi rpm="`rpm -qf ${SMARTCTL}`" PACKAGE="`rpm -q --info ${rpm} | awk '/Name[ \t]+:/{print $3}'`" VERSION="`smartctl --version | awk '/^smartctl +[0-9\.]+/{print $2}'`" BRANCH="RELEASE_${VERSION//./_}_DRIVEDB" prefix="`rpm -ql ${rpm} | grep 'drivedb.h$' | head -n 1 | sed -e 's|^\(/[^/]\+\)/.*$|\1|g'`" exec_prefix="${prefix}" datarootdir='${prefix}'"/share" datadir='${prefix}'"/share" sbindir="${SMARTCTL%/*}" drivedbdir='${datadir}'"\${PACKAGE}" os_dltools="curl wget lynx" SCRIPT=`sed \ -e 's|\(PACKAGE="\)@PACKAGE@\("\)|\1'"${PACKAGE}"'\2|;' \ -e 's|\(VERSION="\)@VERSION@\("\)|\1'"${VERSION}"'\2|;' \ -e 's|\(prefix="\)@prefix@\("\)|\1'"${prefix}"'\2|;' \ -e 's|\(exec_prefix="\)@exec_prefix@\("\)|\1'"${exec_prefix}"'\2|;' \ -e 's|\(sbindir="\)@sbindir@\("\)|\1'"${sbindir}"'\2|;' \ -e 's|\(datarootdir="\)@datarootdir@\("\)|\1'"${datarootdir}"'\2|;' \ -e 's|\(datadir="\)@datadir@\("\)|\1'"${datadir}"'\2|;' \ -e 's|\(drivedbdir="\)@drivedbdir@\("\)|\1'"${drivedbdir}"'\2|;' \ -e 's|\(os_dltools="\)@os_dltools@\("\)|\1'"${os_dltools}"'\2|;' \ -e 's|\(BRANCH="\)@DRIVEDB_BRANCH@\("\)|\1'"${BRANCH}"'\2|' "${UPDATEFILE}"` echo -e "${SCRIPT}" > "${UPDATEFILE}" chmod +x "${UPDATEFILE}" echo "run this script ./${UPDATEFILE} -v -u trac ./aa.txt"
Я не вижу смысла копировать результирующий скрипт update-smart-drivedb в родной каталог /usr/sbin/update-smart-drivedb так как диски на сервере обычно не меняются часто и обновить базу может потребоваться только при установке новых дисков. Поэтому я запускаю его прямо в домашнем каталоге /root/ проверяю во временный файл и только затем запускаю без указания целевого файла, что проведёт копирование базы прямо в целевой каталог.