logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline xiller  
#1 Оставлено : 23 октября 2015 г. 11:18:50(UTC)
xiller

Статус: Новичок

Группы: Участники
Зарегистрирован: 16.10.2015(UTC)
Сообщений: 4
Российская Федерация
Откуда: Moscow

используется CryptoPro Summary: CSP (Type:75) v3.6.5365 KC1 Release Ver:3.6.7777 OS:Linux CPU:AMD64 FastCode:READY:SSSE3

в процессе эксплуатации криптопро выявился неприятный момент:
в директории /var/opt/cprocsp/tmp/ накапливаются файлы нулевого размера вида .имя_файла_который_обрабатывался_криптопро;
на занимаемом пространстве не сказывается, но таких файлов быстро становится очень много - исчерпываются inode на разделе с /var/opt/cprocsp/tmp/;
вопрос - существует ли способ избежать этого засорения? (ini-настройки либо какие-то другие внутренние средства криптопро)
Offline Русев Андрей  
#2 Оставлено : 26 октября 2015 г. 11:28:00(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
Это неожиданное явление: в ночных тестах на наших стендах создаётся не больше пары десятков файлов и большая часть удаляется в процессе работы.
А какое у вас ограничение на inode?
Какие приложения используют CSP?
Можете прислать список созданных файлов?
Официальная техподдержка. Официальная база знаний.
Offline xiller  
#3 Оставлено : 26 октября 2015 г. 14:32:25(UTC)
xiller

Статус: Новичок

Группы: Участники
Зарегистрирован: 16.10.2015(UTC)
Сообщений: 4
Российская Федерация
Откуда: Moscow

ограничение на inode - 363600 (дефолтное значение при форматировании раздела в ext4);
CSP главным образом используется апачем, создаваемые файлы выглядят примерно так:
-rwxrwxrwx 1 apache apache 0 Окт 12 11:17 .store_lock_file_sign_4N1dZ9
-rwxrwxrwx 1 apache apache 0 Окт 6 14:35 .store_lock_file_sign_4n2Jnj
-rwxrwxrwx 1 apache apache 0 Окт 13 06:10 .store_lock_file_sign_4N33b3
-rwxrwxrwx 1 apache apache 0 Окт 26 06:52 .store_lock_file_sign_4n3jHz
-rwxrwxrwx 1 apache apache 0 Окт 23 10:00 .store_lock_file_sign_4n49r0
-rwxrwxrwx 1 apache apache 0 Окт 23 15:29 .store_lock_file_sign_4n4mPR
-rwxrwxrwx 1 apache apache 0 Окт 23 12:37 .store_lock_file_sign_4N4p4G
Offline grep  
#4 Оставлено : 30 октября 2015 г. 10:26:50(UTC)
grep

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.10.2014(UTC)
Сообщений: 9

Сказал(а) «Спасибо»: 2 раз
Такая же проблема возникает.
Для чего вообще создаются lock-файлы?
Это регулируемое поведение?
Offline Русев Андрей  
#5 Оставлено : 30 октября 2015 г. 15:55:24(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
Посмотрел внимательней:
* в ночных тестах файлы удаляются при рестарте провайдера
Код:
/etc/init.d/cprocsp restart

* файлы от файловых блокировок не удаляются никогда - это штатное поведение и пока не может быть изменено

Мы подумаем, как можно решить задачу со стороны провайдера.
Пока могу предложить самостоятельно удалять файлы, когда провайдер их не использует. Определить этот момент можно по успешному взятию lockf() на файл.

Набросал пример (будет ждать залоченные файлы, потом продолжать удалять): /tmp/locked_unlink.c
Код:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>

void locked_unlink(char *path)
{
    int fd;
    int error;

    fd = open(path, O_RDWR, 0664);
    if (fd < 0) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    // if len is zero, lock all bytes
    error = lockf(fd, F_LOCK, 0);
    if (error == 0)
        printf("%#x: lock succeeds!\n", getpid());
    else
        perror("lockf failed");

    error = unlink(path);
    if (error == 0)
        printf("%#x: unlink succeeds!\n", getpid());
    else
        perror("unlink failed");

    lockf(fd, F_ULOCK, 0);
    close(fd);
}

int main(int argc, char *argv[])
{
    setlinebuf(stdout);
    if (argc > 1)
        locked_unlink(argv[1]);
    else
        printf("USAGE: locked_unlink <path>\n");
    return 0;
}

Код:
cc /tmp/locked_unlink.c -o /tmp/locked_unlink

Код:
for fl in `find /var/opt/cprocsp/tmp/ -type f -name ".*"`; do /tmp/locked_unlink $fl; done

Отредактировано пользователем 30 октября 2015 г. 16:18:22(UTC)  | Причина: Не указана

Официальная техподдержка. Официальная база знаний.
Offline Русев Андрей  
#6 Оставлено : 1 ноября 2015 г. 8:23:00(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
Отбой: удаление под блокировкой может быть некорректным: для корректного удаления надо убеждаться, что ни одно приложение не держит открытым файл блокировки. Это можно с помощью lsof, но за время от "успеха lsof" до вызова "rm" кто-то может успеть открыть файл и снова будет некорректное удаление. Именно поэтому в провайдере мы решили удалять эти файлы только на рестарте cprocsp. Подумаю ещё, что можно сделать.
Официальная техподдержка. Официальная база знаний.
Offline Русев Андрей  
#7 Оставлено : 2 ноября 2015 г. 10:31:51(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
Почти всегда верным будет предположение, что не бывает ситуации, когда процесс создаёт файл-лок, а использует (блокирует/разблокирует) его через длительное время (исключение - registry_lock). Тогда можно удалять файлы, которые не менялись очень давно.
Удаляем файлы, не менявшиеся 2 дня (консервативно - только локи хранилищ):
Код:
find /var/opt/cprocsp/tmp/ -type f ! -mtime -2 -name "._*_store_lock_file_*"|xargs rm -f

На платформах, где find умеет минуты, можно разделять более тонко: удаляем файлы, не менявшиеся 25 часов:
Код:
find /var/opt/cprocsp/tmp/ -type f ! -mmin -1500 -name "._*_store_lock_file_*"|xargs rm -f

Для защиты от случайной ошибки при формулировании условий find-а можно дополнительно проверить себя lsof-ом на системах, где он есть:
Код:
if type lsof; then for fl in `find /var/opt/cprocsp/tmp/ -type f -not -mmin -1500 -name "._*"`; do lsof $fl || rm -f $fl; done; fi
Официальная техподдержка. Официальная база знаний.
thanks 2 пользователей поблагодарили Русев Андрей за этот пост.
Андрей Писарев оставлено 02.11.2015(UTC), grep оставлено 12.01.2016(UTC)
Offline grep  
#8 Оставлено : 18 января 2016 г. 9:43:57(UTC)
grep

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.10.2014(UTC)
Сообщений: 9

Сказал(а) «Спасибо»: 2 раз
Вообще планируется реализовать в криптопро механизм уборки за собой в темповой директории?
Offline Русев Андрей  
#9 Оставлено : 19 января 2016 г. 7:00:13(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
В дистрибутиве 2015-12-29 КриптоПро CSP 4.0.9680 Markov эта проблема решена. Также она будет решена в планируемом дистрибутиве КриптоПро CSP 3.9 R2. Сертификация более старых версий провайдера пока не планируется, поэтому для них надо использовать представленные здесь скрипты.
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
grep оставлено 19.01.2016(UTC)
Offline Vtil  
#10 Оставлено : 11 февраля 2019 г. 14:31:27(UTC)
Vtil

Статус: Новичок

Группы: Участники
Зарегистрирован: 11.02.2019(UTC)
Сообщений: 1

Реанимирую тему

КриптоПро CSP 4v4 - версия последняя, самая-самая - проблема сохраняется. При рестарте службы - файлы не удаляются.


Вышеуказанную правку откатили? или что?

Спасибо
Offline Русев Андрей  
#11 Оставлено : 18 февраля 2019 г. 9:27:39(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 502

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 67 постах
Удаляются не все файлы, а только старые. Если у вас как у начавшего тему заканчиваются inode, прислылайте в личку диагностический архив, собранный с помощью
Код:
curl http://cryptopro.ru/sites/default/files/products/csp/cprodiag 2>/dev/null|sudo perl
Официальная техподдержка. Официальная база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.