Leider erweisen sich die 2.x-Versionen des INN unterhalb von 2.4.x als deutlich empfindlicher gegenüber Abstürzen, ja geradezu als Mimosen, die nach einer ungeplanten Beendigung oder einem Crash des Servers nach umfangreicheren Aufräumarbeiten verlangen, namentlich einer Neuerstellung der History und einem renumber.

Aktuelle Versionen hingegen - INN 2.4.0 wurde 2003 released - sind von diesem Problem nicht mehr betroffen. Dennoch: wenn ein INN mal crashed, ist es vielleicht gut, passende Scripts zur Hand zu haben.

Scripts

Matthias Andree hat dafür eine fertige Scriptlösung, die als Benutzer news ausgeführt werden sollte:

#! /bin/sh

set -e
if test "x`id -un`" != xnews ; then
    echo >&2 "$0 must be executed as user news"
    exit 1
fi
eval `innconfval -s`
set -x
cd $PATHDB
ctlinnd throttle 'fixup' || :
ctlinnd reject 'fixup' || :
ctlinnd reload '' ''

if [ x"$OVMETHOD" = x"buffindexed" ] ; then
    awk -F: '
        /^[0-9]+:/ {
            printf "dd if=/dev/zero bs=1024 of=\"%s\" count=%d\n", $2, $3
        }' $PATHETC/buffindexed.conf \
    | sh -x
fi

makehistory -b -e -f history.n -O -l 30000
awk 'NF == 2 { print }' < history >> history.n
makedbz -s `wc -l < history` -f history.n
for i in history.n* ; do
    mv $i history${i##history.n}
done

ctlinnd reload all fixup
ctlinnd go fixup
ctlinnd renumber ''
echo "done."

Alternativ die Lösung von Sebastian Bork, die das Vorhandensein von sudo und eine entsprechende Konfiguration von /etc/sudoers voraussetzt:

#!/bin/sh
/usr/local/news/bin/ctlinnd throttle Rebuilding databases.
sleep 5
rm -rf /var/spool/news/overview/*
rm -rf /var/spool/news/tradspool.map
/usr/local/news/bin/makehistory -b -f history.n -O -l 30000
cd /usr/local/news/db
awk 'NF == 2 { print }' < history >> history.n
/usr/local/news/bin/makedbz -s `wc -l < history` -f history.n
mv history.n history
mv history.n.dir history.dir
mv history.n.hash history.hash
mv history.n.index history.index
/usr/local/news/bin/ctlinnd reload all rebuild-newsspool
/usr/local/news/bin/ctlinnd go Rebuilding databases.
sleep 2
sudo /etc/init.d/inn2 restart
sleep 2
/usr/local/news/bin/ctlinnd renumber ''
mv /var/spool/news/incoming/bad/* /var/spool/news/incoming/
rm /var/spool/news/incoming/tmp/*

Bei dieser Lösung müssen ggf. die Pfade angepasst werden (bspw. /usr/lib/news/bin/ statt wie hier /usr/local/news/bin/).

Hinweise

Es sollte damit gerechnet werden, dass ein richtiger Absturz, ggf. im Zusammenhang mit einem Hardwareschaden, manche Dateien so in Mitleidenschaft ziehen kann, dass sie sich nicht mehr einlesen lassen, sondern dann ggf. gelöscht (oder zunächst einmal umbenannt) bzw. wiederhergestellt werden müssen.

Daher ist es nicht verkehrt, am Anfang den Lauf bspw. von makehistory mittels strace oder einem ähnlichen Tool zu verfolgen, um festzustellen, ob es überhaupt arbeitet oder bereits beim Start hängenbleibt. Das verhindert, dass man nach vielen Stunden makehistory immer noch nicht weiter ist als zu Anfang …

Lizenz

Creative Commons-Lizenzvertrag Dieser Inhalt ist unter der Creative Commons-Lizenz BY-NC-SA 4.0 DE lizenziert; er darf unter Namensnennung des Autors nicht-kommerziell weitergegeben und auch bearbeitet werden, soweit das neue Werk gleichfalls wieder dieser Creative-Commons-Lizenz unterliegt. Die Einzelheiten ergeben sich aus dem Lizenzvertrag.