NMT-200 ЧаВо

Удобный контроль за свободным местом на дисках

Статья WildFlexy от 08.06.2011
Редакция от 09.06.2011

Как то обратился ко мне artyes с вопросом:
А чем можно смотреть свободное место на диске?
Вообще-то, если дисков SATA или USB не по одному, то есть они отображаются списком — то плевое дело — на нужном диске жмем кнопку пульта INFO и смотрим. А если один SATA и один USB?

Имея доступ с компа рядом все делается просто — с командной строки одной командой df -h.
Но, понимая, что не каждому это надо — учить основы Linux, отправил я человека на CSI-приложение File Manager смотреть. Сам я его не пользую, но какую-то Web-морду он обеспечивает и позволяет смотреть не только остаток места.

Отправил, а сам в то же самое время полез в консоль смотреть — ну куда мне залить очередные 50 гигов?..
Как же так — без компа не обойдешься!!! Не знаю как на Dune в этом случае, но для NMT-200 сводной таблички, доступной с экрана TV явно нет.

Подумал, и родил следующую концепцию

Иде…я?

Идея проста — выводить результат df -h по расписанию (cron) в html-файл. Браузер попкорна умеет отображать примитивные странички, а мне иного вроде и не надо.
Мне нужно опросить все диски, которые смонтированы на мой C-200. Так как все устройства при автоматическом монтировании слинковываются в корень (/), и имеют указатель на реальную папку монтирования (/opt/sybhttpd/localhost.drives/), то конструкция с фильтром grep типа

ls -al / | grep "/localhost."

выведет только нужные метки разделов и ничего лишнего. Остается только причесать и отформатировать вывод (с помощью текстового процессора awk).
А далее нужно для каждого сделать df -h /метка раздела. Придумывать что-то, кроме генерации одним скриптом вспомогательного, который и формирует окончательный вывод таблички, быстро не получилось. Да и зачем — если и так все работает? :)

drivesize.sh

Изначальный скрипт был не настолько сложен, но борьба за «красивости» увеличила его и сделала труднообъяснимым. Единственное, что облегчил — вынес переменными некоторые параметры. Какие — понятно из их названия.

Минимум, что следует знать:
RNAME — это собственно имя и местоположение результата. Того файла, в который тыкать кнопкой Enter на пульте :)
REFRESHTIME - это время в секундах, через которое файл перерисовывается на экране сам себя (300 — это 5 минут).
EXC — это исключение. Так share и USB_DRIVE — одно и то же — убираю с вывода share.

#!/bin/sh
#
SNAME="/share/dfh.sh"
RNAME="/share/dh.html"
EXC="share"
BGCOL="navy"
FONTCOL="white"
FONTSZ="36px"
REFRESHTIME="300"

echo "<html><head><title></title> <meta content=\"text/html; charset=utf-8\">" > $RNAME
echo "<meta http-equiv=\"refresh\" content=\""$REFRESHTIME"\"> <meta http-equiv=content-style-type content=text/css>" >> $RNAME
echo "<style type=\"text/css\">" >> $RNAME
echo "body { background-color:"$BGCOL"; }" >> $RNAME
echo "table { color:"$FONTCOL"; background-color:transparent; font-size:"$FONTSZ"; font-weight:bold; }" >> $RNAME
echo "</style></head><body><table width=\"100%\">" >> $RNAME

echo "<tr><td witdh=\"25%\">Label name</td><td witdh=\"25%\">Device</td><td witdh=\"25%\">Total<br>Size</td><td witdh=\"25%\">Free</td></tr><tr><td colspan=\"4\">&nbsp;</td></tr>" >> $RNAME

ls -al /|grep "/localhost."|awk -v s="$RNAME" -v q="'" -v b="\"</td>" -v e="$EXC" '{ if ($9!=e) print "echo \"<tr><td>"$9"</td>\" >> "s"; df -h /"$9"|grep dev|awk "q"{print \"<td>\"$1"b"<td>\"$2"b"<td>\"$4"b"</tr>\" }"q" >> "s }'>$SNAME

chmod +x $SNAME

$SNAME

echo "</table></body></html>" >> $RNAME

Установка

Копируем в любое удобное место и говорим в консоли чтобы файл получил атрибут запускаемости:

chmod +x ./drivesize.sh

Далее, навешиваем в свое расписание строку типа

*/5 * * * * /share/drivesize.sh

Как работать с cron я рассказывал ранее здесь.


Для работы скрипта необходимы LTU — без них никуда :)

P.S. И не забываем, что текстовый файл для Linux — поэтому сохраняем его в формате перевод строки «LF» (а не «CR+LF»)- Far Manager вам в помошь.

7 комментариев к этой записи

  • Roman_V_M

    Только одна фигня — скрипт clutch, запускающий Трансмишин, сбрасывает crontab, так как содержит непонятные и, судя по всему, ненужные строки, которые Padavan, не подумав, переписал из оригинального clutch. Надо будет сказать ему, чтобы поправил.

  • pchuser

    WildFlexy, спасибо за статью. Хочу поделиться своим опытом: для меня самое актуальное — это знать объем свободного места на том диске, куда производит загрузку файлов transmission перед загрузкой очередного торрента. После установки последней версии LTU c transmission 2.31 с использованием последней версии Transmission Remote GUI я в нижней статусной строке окна программы Transmission Remote GUI вижу актуальное свободное место на том HDD, куда назначена загрузка торрентов.

    • artyes

      покажи картинку пожалуйста

    • WildFlexy

      У меня сейчас назначен раздел /Transcend.
      Это USB-диск, и в моем списке он один из четырех, поэтому не проблема смотреть в штатном интерфейсе по INFO.
      Но так как периодически упорядочиваю коллекцию, то знать где осталось сколько места хочу сразу же, не шастая по каждому из дисков в отдельности.
      При моем количестве девайсов (список на скриншоте) уже стало лениво топтать кнопочки и запоминать цифирки. А лень — двигатель прогресса :)

  • Padavan

    Попкорн поддерживает CGI, поэтому все можно сделать без крона. Открываем страничку и сразу видим список и свободное место. Надо на досуге сделать.

Следующая запись
»
2010–2017 © NMT-200 ЧаВо