Надоело ручками выполнять одни и те же команды при лечении HDD, поэтому написал такой скрипт:
PHP Code:
#!/bin/sh
logger -t treat-hdd "treat-hdd has been started"
/opt/etc/init.d/rc.unslung stop
sleep 2s
rm /tmp/syslog.log
cat /opt/var/log/messages >> /tmp/syslog.log
/sbin/syslogd -m 0 -s 0 -O /tmp/syslog.log -S -l 7
for i in `cat /proc/mounts | awk '/ext3/{print($1)}'`
do
lsof -t $i | xargs kill -9
mount -o remount,ro $i
done
# тут нужно вписать все линки (если есть) и ФС, что у вас есть
/bin/umount /opt
/bin/umount /home
/bin/umount /tmp/mnt
for i in `/usr/bin/awk '/ext3/{print($1)}' /etc/fstab`
do
/bin/grep -q $i /proc/mounts || /sbin/fsck.ext3 -yvf $i 2>&1 | /usr/bin/logger -t fsck.ext3
done
for i in `/usr/bin/awk '/ext3/{print($1)}' /etc/fstab`
do
/bin/grep -q $i /proc/mounts || /bin/mount $i 2>&1
done
# смонтировать обратно линки (если есть)
/bin/mount -o bind,sync,noatime,rw /tmp/mnt/opt /opt
/bin/mount -o bind,sync,noatime,rw /tmp/mnt/part1 /home
# кусок post-mount для запуска "жизни" роутера
# дополнить по вкусу
/opt/sbin/transmission_watchdog
/opt/etc/init.d/rc.unslung start
sleep 2s
logger -t treat-hdd "treat-hdd has been finished"
Важно помнить, что для функционирования этого скрипта на HDD присутствовал swap в виде отдельного раздела! Предупреждая вопросы "да он у всех есть!" хочу сказать, что некоторые используют swap-файл, а не swap-раздел.
Скрипт положить в /usr/local/sbin/, назвать treat-hdd и сделать chmod +x /usr/local/sbin/*. Не забыть сделать flashfs save && flashfs commit для сохранения результата
В последствии, в логе, можно посмотреть результаты лечения. Или сделать выборку cat /opt/var/log/messages | grep fsck.ext3 либо в терминале, либо через web-морду роутера System Setup - System Command.
Этот скрипт можно загнать в cron:
PHP Code:
# лечить HDD 1-го и 15-го числа каждого месяца
03 3 1,15 * * root /usr/local/sbin/treat-hdd