Переполнение раздела

PCLinuxOS

Модератор: Bizdelnick

Hooliganos
Сообщения: 278
ОС: debian 6.0.4

Переполнение раздела

Сообщение Hooliganos »

Уже второй раз наступаю на грабли :angry:

Проблема в следующем: система никак не контролирует наличие свободного места на разделе.
Было пару месяцев назад и повторилось сегодня: после копирования файлов на раздел sda6, где установлена mdv 2008.1, при последующей перезагрузке не удалось войти в систему: нет места на разделе :angry:

Перегрузился в mdv 2008.x86_64 и оттуда посмотрел на раздел sda6: 0 байт свободно, часть файлов не может быть считана.
Удалил пару файлов и только после этого смог войти в систему mdv 2008.1.
Хорошо хоть никакие системные файлы не были перетёрты. А в прошлый раз часть файлов была перетёрта и восстановить вход пользователей не удалось. Пришлось переустанавливаться.

Какой выход? Проверять размер свободного места перед каждой дисковой операцией - маразм. Надеяться, что лет через 10 появится таки виндовая фича "Недостаточно места на жестком диске"? Очень сомневаюсь, что появится.

Единственно, что пришло на ум - это какой нибудь скрипт написать, чтобы как-то предупреждал о начале конца.
Можно ли такой скрипт состряпать? Я честно говоря в скриптах ни в зуб ногой, может кто видел что-либо подобное?

Спасибо
Спасибо сказали:
Аватара пользователя
romuil
Сообщения: 2095
Статус: Ромунцель
ОС: ALTLinux Sisyphus

Re: Переполнение раздела

Сообщение romuil »

quota - System administration tools for monitoring users' disk usage
Было всегда.
Спасибо сказали:
Hooliganos
Сообщения: 278
ОС: debian 6.0.4

Re: Переполнение раздела

Сообщение Hooliganos »

romuil писал(а):
24.02.2009 19:40
quota - System administration tools for monitoring users' disk usage
Было всегда.


Сами по себе ни quota, ни repquota, ни warnquota никаких предупреждений в явном виде не выводят.
Кроме того нужны не квоты по юзерам, а суммарно всё на разделе.
Чем выводить по repquota а затем калькулятором вычислять сумму по всем восьми пунктам и калькулировать свободное место, проще ткнуть на иконку диска и посмотреть готовое.
Но мне нужно не это: нужно чтобы без моего вмешательства происходил мониторинг свободного места и в случае недостатка оного выдавалось предупреждение.
Я в системе такого инструмента не вижу.
Сделать прогу (например на qt) которая по таймеру будет запускать repquota, читать stdout, парсить вывод, калькулировать и предупреждать - несложно.
Просто интересно, есть ли в системе что-то готовое с таким функционалом?
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Переполнение раздела

Сообщение Folderx »

Код: Выделить всё

[root@station proc]# df /dev/sda7 | tail -1 | awk '{ print $4; }';


скрипт, который постоянно следит за оставшимся местом можно
Спасибо сказали:
Hooliganos
Сообщения: 278
ОС: debian 6.0.4

Re: Переполнение раздела

Сообщение Hooliganos »

Folderx писал(а):
25.02.2009 11:37

Код: Выделить всё

[root@station proc]# df /dev/sda7 | tail -1 | awk '{ print $4; }';


В общем использовал ваш скрипт и на его основе сделал qt-прожку, периодически отслеживающую свободное место на разделах и выводящую сообщение, если остаток менее установленной величины.

Готового решения в системе таки нет :(

Спасибо всем.
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Переполнение раздела

Сообщение Folderx »

я скрипт не писал, тут функция для скрипта получается

а эта выводит сообщение

Код: Выделить всё

# Sayw:  show waiting message box; Sayw hello
Sayw() {
    local MESSAGE="$*";
    local TITLE="--title $FUNCNAME --caption $FUNCNAME";

    if [ -z $DISPLAY ]; then
        return 1;
    fi;
    kdialog $TITLE --msgbox "$MESSAGE";
    return 0;
}


пишешь скрипт в нём две функции, одна проверяет, другая выводит сообщение, всё в цикле; потом задание в автозапуск ставишь

Код: Выделить всё

[guest@station ~]$ ls .kde/Autostart
kmix.sh
[guest@station ~]$

автозапуск есть не только в kde, всё
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Переполнение раздела

Сообщение Folderx »

Код: Выделить всё

#!/bin/bash

# запускает проверку свободного места на устройстве
# Example: script.sh /dev/sda1

# Msg:  print message;
#       Msg msg;
Msg() {
    echo "$*";
    return 0;
};

# ScriptName:  prints script name (where is this function);
#              ScriptName;
ScriptName() {
    echo "$(basename $0)";
    return 0;
};

# CheckArgs:  check args of script, print message if wrong;
#             CheckArgs "$@";
CheckArgs() {
    if [ -z "$1" -o ! -b "$1" ]; then
        Msg "Usage: $(ScriptName) device"
        return 1;
    fi;
    return 0;
};

# Sayw:  show waiting message box;
#        Sayw hello;
Sayw() {
    local MESSAGE="$*";
    local TITLE="--title $FUNCNAME --caption $FUNCNAME";

    if [ -z $DISPLAY ]; then
        return 1;
    fi;
    kdialog $TITLE --msgbox "$MESSAGE";
    return 0;
};

# CheckSpace:  check free space of the device;
#              CheckSpace device [ minspace ];
CheckSpace() {
    local TRUE=0 FALSE=1;
    local DEVICE MIN FREESPACE;

    if [ ! -b "$1" ]; then
        echo "Usage: $FUNCNAME /dev/*** [ minimum ]" 1>&2;
        return $TRUE;
    fi;
    DEVICE="$1";
    MIN="${2:-"0"}";
    FREESPACE="$(df $DEVICE | tail -1 | awk '{ print $4; }';)";
    if [ "$FREESPACE" -le "$MIN" ]; then
        return $FALSE;
    fi;
    return $TRUE;
};

# RunCheckLoop:  runs free space checking for the device;
#                RunCheckLoop device;
RunCheckLoop() {
    while true; do
        if ! CheckSpace "$1"; then
            Sayw "Not enough space on $1";
            sleep 5;
        fi;
    done;
    return 0;
}

# Run:  run all for the device;
#       Run "$@";
Run() {
    if CheckArgs "$@"; then
        RunCheckLoop "$1";
    fi;
    return 0;
}

Run "$@";

exit 0;
Спасибо сказали: