Как понять, что нужно прибить, чтоб диск нормально отмонтировался? Хочу чекдиск сделать.Code:$ umount /tmp/mnt/disc0_3 umount: can't umount /tmp/mnt/disc0_3: Device or resource busy
Спасибо.
в пакетах есть lsof
Pablo Escobar - вы же опытный участник, что же мешает глянуть доку на fuser через гугл?
Ребят как увидел скорость передачи с роутера на комп так сразу решил что нужно отрубать винт от роутера и пользоваться HDD непосредственно с компа но делать полный halt нет смысла так как без интернета туго как то будет работать с HDD, начал искать sh скриптики для отключения именно винта... чет не как разобраться не могу
В общем как я понял для отключения скрипт :
~/pre-shutdown.sh
Для включения (монтирования)Code:#!/bin/sh GREP="/bin/grep" MOUNT="/bin/mount" AWK="/usr/bin/awk" SWAPOFF="/sbin/swapoff" DEVDIR="/dev/discs/" RCUNSLUG="/opt/etc/init.d/rc.unslug" $RCUNSLUG stop for i in $($DF | $GREP $DEVDIR | $AWK '{print $6}') do $MOUNT -o remount,ro $i done $SWAPOFF -a sleep 5s
~/pre-mount.sh
Ошибки следующие :Code:#!/bin/sh ECHO="/bin/echo" DF="/bin/df" GREP="/bin/grep" AWK="/usr/bin/awk" FDISK="/sbin/fdisk" FREE="/usr/bin/free" MKSWAP="/sbin/mkswap" SWAPON="/sbin/swapon" LOGGER="/usr/bin/logger" E2FSCK="/sbin/e2fsck" LS="/bin/ls" DEVDIR="/dev/discs/" SWAPDSK=$($FDISK -l | $GREP swap | $AWK '{print $1}') if [ $($FREE | $GREP Swap | $AWK '{print($2)}') = "0" ]; then for i in $SWAPDSK; do if $MKSWAP -c $i > /dev/null 2>&1 then $SWAPON $i $ECHO "swap $i is on " | $LOGGER -t e2fsck break else $ECHO "swap $i with badblocks" | $LOGGER -t e2fsck fi done fi MNTINODES=$($LS -i1 $($DF | $GREP $DEVDIR | $AWK '{print $1}') | $AWK '{print $1}') DEV=$( $FDISK -l | $GREP part | $GREP -v swap | $GREP -v Extended | $AWK '{print($1)}') for i in $DEV; do if [ $($LS -1iR $i | $AWK '{print(index(MNT,$1))}' MNT="$MNTINODES") = "0" ]; then $E2FSCK -p $i | $LOGGER -t e2fsck fi done
При отмантировании (Отключения винта)
и лампочки продолжают гореть на HDDCode:root@router root]$ sh ~/pre-shutdown.sh Stopping rtorrent: rtorrentcannot access /proc/250/exe: No such file or directory . Stopping web server: lighttpd Shutting down Download Engine... not started. Stopping: php-fcgi Stopping: cron Stopping - SAMBA: Stopping SAMBA - nmbd Stopping SAMBA - smbd . Stopping service: syslog-ng /usr/local/root/pre-shutdown.sh: line 17: /opt/sbin/lsof: not found /usr/local/root/pre-shutdown.sh: line 17: /opt/sbin/lsof: not found [root@router root]$ mount rootfs on / type rootfs (rw) /dev/root on / type squashfs (ro) none on /dev type devfs (rw) proc on /proc type proc (rw) tmpfs on /tmp type tmpfs (rw,noatime) usbfs on /proc/bus/usb type usbfs (rw) /dev/discs/disc0/part2 on /opt type ext3 (ro,noatime) /dev/discs/disc0/part3 on /tmp/mnt/disc0_3 type ext3 (ro,noatime)
при монтирование обратно :
Code:[root@router /]$ sh ~/pre-mount.sh BusyBox v1.17.2 (2010-09-30 19:29:29 MSD) multi-call binary. Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]... Options: -v VAR=VAL Set variable -F SEP Use SEP as field separator -f FILE Read program from FILE /usr/local/root/pre-mount.sh: line 36: {print $1}: not found BusyBox v1.17.2 (2010-09-30 19:29:29 MSD) multi-call binary. Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]... Options: -v VAR=VAL Set variable -F SEP Use SEP as field separator -f FILE Read program from FILE /usr/local/root/pre-mount.sh: line 38: {print($1)}: not found
Помогите разобраться в чем беда, ставил из программ тока Самбу, рТоррент, отправку смс через скрипт "Установка программ для чайников"
а что мешает из веб-морды отключать?
Pablo Escobar не видел там именно отключение HDD... Прошивка стоит олеговская 1.9.2.7-d-r2174
А все службы от рТоррент, самбы и тп отключатся сами? или вначале нужно их отрубать? и будет ли продолжать работать инет?
UPD: 20.01.2010 18:08
Здравствуйте!
Решил создать тему где я буду выкладывать скрипты которые я использую в том виде в котором они есть на форуме или переписанные мной.
Прошу сильно не судить, у меня ASUS WL-520gU в использовании где c ноября 2009 года. И у меня появилось кучу вопросов под данной железке я получил все эти ответы здесь на форуме, но это заняло у меня прилично времени. Поэтому и решил всем (Таким как я, новеньким) выкладывать здесь то что может быть интересно и нужно.
У меня есть дурная привычка анализировать все что я делаю, а не бездумно использовать то что предлагают здесь.
Поэтому я буду выкладывать скрипты с пояснением команд, для того что бы другим было понятно и так же что бы могли меня поправить если я в чем то не прав.
Поэтому выложу скрипт который я переделал и привел к моему мнению более понятному и простому виду. (Сильно не пинайте)
rc.unslung - Скрипт запуска других скриптов (services).
pre-mount - Скрипт вызывается при подключении usb диска но перед его монтированием.
pre-shutdown - Скрипт который вызывается перед перезагрузкой.
fstab - Файл конфигурации, с информацией куда какие разделы монтировать
rc.unslung
Можно еще добавить строчки для ведения лога, но мне это не нужно.Code:#!/bin/sh # Место положение скриптов daemons_dir=`/bin/echo /opt/etc/init.d/S??*` case $1 in start) # Сортируем в порядке возрастания daemons=`/bin/echo $daemons_dir | /usr/bin/tr " " "\n" | /usr/bin/sort` # Полученный список запускаем по одному for i in $daemons; do $i start # Ждем одну секунду /bin/sleep 1s done ;; stop) # Сортируем в порядке убывания daemons=`/bin/echo $daemons_dir | /usr/bin/tr " " "\n" | /usr/bin/sort -r` # Полученный список останавливаем по одному. for i in $daemons; do $i stop # Ждем одну секунду /bin/sleep 1s done ;; *) /bin/echo "Usage: $0 {start|stop}" exit 1 ;; esac
pre-mount
pre-shutdownCode:#!/bin/sh # Включаем swap (Раздел подкачки, как в Windows файл подкачки) /sbin/swapon -a # Ту я определяю какие директории у меня прописаны в файле fstab, выводе я исключаю swap for i in `/bin/sed '/swap/ c\' /etc/fstab | /usr/bin/awk '/discs/ {print($1)}'`; do # Проверяем полученные разделы на ошибки /sbin/e2fsck -p $i | /usr/bin/logger -t e2fsck done
fstabCode:#!/bin/sh # Останавливаем скрипт который написан выше, а он в свою очередь остановит другие скрипты /opt/etc/init.d/rc.unslung stop # Ту я определяю какие директории у меня прописаны в файле fstab, выводе я исключаю swap for i in `/bin/sed '/swap/ c\' /etc/fstab | /usr/bin/awk '/discs/ {print($1)}'`; do # Убиваю процессы зависящие от моих разделов, если вдруг таковые имеются /opt/sbin/lsof -t "$i" | /usr/bin/sort -nr | /opt/bin/xargs /bin/kill -9 # Сброс буфера /bin/sync # Разделы которые есть монтирую в режиме только чтения /bin/mount -o remount,ro $i done # Ну теперь выключаю swap /sbin/swapoff -a
P.S. Я в скриптах жестко прописываю пути, стараюсь исключить символические ссылки. Причем пути прописываю до тех программ которые изначально идут в прошивке, а не до тех которые ставятся с пакетом coreutils или другими.Code:# Пути до раздело Куда монтировать Файловая система С какими параметрами монтируем dump-freq pass-num /dev/discs/disc0/part3 none swap sw 0 0 /dev/discs/disc0/part2 /opt ext3 rw,noatime 0 0 /dev/discs/disc0/part1 /tmp/mnt/disc0_1 ext3 rw,noatime 0 0 # dump-freq используется утилитой dump для определения необходимости архивирования. # pass-num используется утилитой fsck для определения порядка проверки разделов. 0 = не проверять, 1 = первый, 2 = второй (и далее по порядку) # dump-freq и pass-num у меня стоит ноль, так как в прошивке это не работает стандартными средствами как в обычно Linux дистрибутиве.
Last edited by tonshakshuev; 20-01-2010 at 16:28.
Начинание хорошее. Остаётся только добавить ссылки на конкретные посты, по материалам которых делаются скрипты, и пояснения, почему переделаны оригинальные скрипты, чем лучше, чем хуже.
RT-N16 | FW 1.9.2.7-rtn-rXXXX | HDD 2.5"
В файле fstab у меня dump-freq и pass-num стоит по нулям. Так как я считаю с прошивке это не реализовано. И поэтому и есть скрипты проверки раздело перед запуском. И если делать все красиво в файле, то следовательно если не реализовано то ноль.
Верно ли это?