Bekijk de volledige versie : Скрипт для "авто"лечения HDD
Надоело ручками выполнять одни и те же команды при лечении HDD, поэтому написал такой скрипт:
#!/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:
# лечить HDD 1-го и 15-го числа каждого месяца
03 3 1,15 * * root /usr/local/sbin/treat-hdd
Надоело ручками выполнять одни и те же команды при лечении HDD, поэтому написал такой скрипт:
Вспоминается сразу анекдот про автомат для бриться: "Да, но лица же у всех разные?! Да, но только первый раз..."
Так и тут... Вы правда считаете, что все проблемы с ФС можно и нужно решать слепым указанием '-y' для fsck? Да еще другим советуете...
Знаете, так Вы можете узнать о проблеме, когда уже на диске даже восстанавливать будет нечего...
Вы правда считаете, что
Да, и никаких проблем не вижу, потому что:
а) никто не отменяет ежедневное чтение логов. Мой небольшой опыт UNIX-подобных систем приучил меня утреннее прочтение новостей в Интернете почему-то начинать с логов моих серверов :)
б) никто не отменяет еженощный бэкап. И даже такую малютку, как этот роутер я бэкаплю на независимую систему.
в) честно, но я еще не разу не сталкивался с такими ошибками, что ключ '-y' что-то испортил. Всегда после проверки проверяю lost+found - это тоже никто не отменял.
г) и как можно заметить, в этом скрипте, сделал запись лога выполнения этой операции именно для того, чтобы контролировать процесс.
Почему уважаемый ABATAPA так набросился на '-y' для fsck.ext3 в моем примере? Почему Вы проигнорировали это здесь (http://wl500g.info/showpost.php?p=111084&postcount=4), здесь (http://wl500g.info/showpost.php?p=121468&postcount=757) и здесь (http://wl500g.info/showpost.php?p=109811&postcount=176) :)
В конце концов голову тоже никто не отменял. Тупое копирование буковок и циферок с форума на свой роутер возможно только из [DURAK EDITIONS] (http://wl500g.info/showthread.php?t=18096).
Однако стоит заметить, что я не отрицаю опасность ключа '-y', так как сам не люблю чтобы система проявляла подобие интеллекта. Поэтому для тупых американцев (с)Задорнов пишу: Все вышеизложенное вы используете на свой страх и риск!!! Автор не несет ответственности за потерю данных после использования этого скрипта!!!
может имеет смысл разобраться с причиной постоянных ошибок? Я свой диск проверял вручную, наверное, года полтора назад, когда как раз выяснилось, что были проблемы с usb переходником. С тех пор ни разу, хотя работает 24/7
У меня на "обслуживании" два роутера. На одном регулярно, раз в месяц что-то слетает. На другом пореже, скажем раз в три месяца, но тоже глючит. Пробовал коробки менять (USB-box), БП 4А поставил, сделал swap-раздел, pre-mount и pre-shutdown настроил - все одно не помогает. Кстати, после смены коробки под HDD вегда происходил глобальный наворот с переформатированием (спецам на заметку).
Нагрузка тоже по максимуму. 24/7 торрент с десятком раздачь и осел с десятком файлов... + собственно инет не несколько компов по вафле и шара по samba.
Не знаю уж за что взяться :( Пришлось вот такой "топор" делать, чтобы больную голову лечить.
Сам удивляюсь, потому что на "больших" машинах вообще ни разу не пользовался fsck-ом!
основных причин --- две: глюки железа, либо желание от этого слабого устройства получить слишком много. Осел и rtorrent у меня тоже работают. Для начала посоветовал бы избавиться от всех веб морд --- php это баловство. Т.е. оставить только то, без чего нельзя.
желание от этого слабого устройства получить слишком много
+10 :) Тут я полностью согласен - злоупотребляю по максимуму. Собственно "второй" роутер, что реже глючит, и загружен значительно меньше.
Для начала посоветовал бы избавиться от всех веб морд --- php это баловство
На это я пойтить не могу :eek: У меня стоят squid (http://wl500g.info/showthread.php?t=13093) (мне кажется из-за него все регулярно валится) и несколько морд: CGI-PROXY (http://wl500g.info/showthread.php?t=13373), ftp2www (http://wl500g.info/showthread.php?t=13331), ADOS (http://wl500g.info/showthread.php?t=10012), vnStat + vnStat PHP frontend (http://wl500g.info/showthread.php?p=113048), RRDTool (http://wl500g.info/showthread.php?t=8998) и еще немного своих прибамбасов. Думаю от этого должен помереть любой подобный девайс :)
На это я пойтить не могу У меня стоят squid (мне кажется из-за него все регулярно валится) и несколько морд: CGI-PROXY, ftp2www, ADOS, vnStat + vnStat PHP frontend, RRDTool и еще немного своих прибамбасов. Думаю от этого должен помереть любой подобный девайс
да, я думаю это все объясняет... Ну тогда проверяй почаще. :) Например, через cron ежесуточно ночью
ежесуточно
Думаю, раз в две недели пока хватит. Если еженощно зарядить ABATAPA будет ругаться :)
getikalex
31-05-2009, 18:30
Вещь однозначно полезная.
А если что кому надо подпилять под конкретные условия - напильник в руки.
Да, и никаких проблем не вижу, потому что:
Когда Вы (или кто-то другой) увидите проблемы, может быть уже поздно.
Например, сменится геометрия "винта" после перетыкания в "большой" комп и запуска какой-нибудь утилиты (типа PQ Magick 8), которая "исправит" таблицу разделов и "подвинет" начало раздела. И т. д. Я столько таких случаев видел, что все вспоминать просто не хочу.
Кроме того, ключ '-y' не гарантирует, что вопросы задаваться не будут.
Например, они будут задаваться, если раздел смонтирован:
$ fsck -yvf /dev/discs/disc0/part2
fsck 1.41.4 (27-Jan-2009)
WARNING: couldn't open /etc/fstab: No such file or directory
e2fsck 1.38 (30-Jun-2005)
/dev/discs/disc0/part2 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)?
И запуск такого скрипта не с консоли приведет к тому, что на этом вопросе все и прервется.
И `rc.unslung stop` отнюдь не гарантирует, что удастся перемонтировать раздел в 'ro' - его, например, могут "держать" процессы, которые сбрасывают данные на диск перед выходом (например, transmission), а задержки, а уж тем более проверки на то, что перемонтирование в 'ro' удалось, там нет; могут "держать" "зомби"-процессы, имеющие открытые файлы на запись, процессы, которые открыли каталог ниже точки монтирования (например, хозяин зашел ssh/telnet, и в консоли сделал `cd /каталог`.
И, таким образом, fsck не отработает. Заметит ли автор это в логах? Ведь там будет всего лишь строка вида "fsck.ext3: /dev/discs/disc0/part2 is mounted". Ведь не для всех очевидно, что это сообщение, по сути, об ошибке. Или будет излишне полагаться на "панацею"? Кроме того, в приведенном скрипте далеко не все передается в лог. Например, там не будет тех самых ошибок перемонтирования, и последующего монтирования. Может, тогда уж и там поставить pipe?
Наиболее грамотным будет перегружать роутер и выполнять проверку при загрузке. Остановка программ и перемонтирование разделов все равно приведет к перерыву сервисов - так тогда зачем все усложнять? Перезагрузка заодно "почистит" утечки памяти, "освежит" swap. И главное - если она будет производиться вручную, а не "на автопилоте", то человек сможет заметить ошибку. А уж индицировать её можно разными путями - тем же миганием PWR с помощью pwrled.
Хотя, разумеется, я никому ничего не навязываю, это лишь мое личное IMHO.
У нас свободная страна, каждый волен выбрать свой путь. :)
Думаю, раз в две недели пока хватит. Если еженощно зарядить ABATAPA будет ругаться :)
Да мне все равно. :) Это не я к кому-то, а ко мне обращаются с просьбой помочь восстановить данные. У меня-то все работает - месяцами и годами...