Один из возможных вариантов:
find . -maxdepth 1 -mindepth 1 -name \*.log -a -not -name backup.log
т.е. найти все файлы в текущем каталоге или ниже с точной глубиной 1 (так что на самом деле только в текущем каталоге, а не в имени самого текущего каталога) с именем, совпадающим с шаблоном *. log
, а не backup.log
Что говорит cat memory.memsw.usage_in_bytes
? Вы не можете установить максимальное значение ниже текущего предела.
Глядя на исходники 3.10 Linux, изменение memsw.limit_in_bytes
приводит к вызовуmem_cgroup_write()
:
{
.name = "memsw.limit_in_bytes",
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_LIMIT),
.write_string = mem_cgroup_write,
.read = mem_cgroup_read,
},
mem_cgroup_write()
определяется в:
https://elixir.bootlin.com/linux/v3.10/source/mm/memcontrol.c#L5199
mem_cgroup_write()
в свою очередь вызывает mem_cgroup_resize_memsw_limit()
, если тип_MEMSWAP
:
else if (type == _MEMSWAP)
ret = mem_cgroup_resize_memsw_limit(memcg, val);
mem_cgroup_resize_memsw_limit()
определяется в:
https://elixir.bootlin.com/linux/v3.10/source/mm/memcontrol.c#L4647
Эта функция вызываетres_counter_set_limit()
:
https://elixir.bootlin.com/linux/v3.10/source/include/linux/res_counter.h#L200
Реализация этой функции:
unsigned long flags;
int ret = -EBUSY;
spin_lock_irqsave(&cnt->lock, flags);
if (cnt->usage <= limit) {
cnt->limit = limit;
ret = 0;
}
spin_unlock_irqrestore(&cnt->lock, flags);
return ret;
Обратите внимание, что ret
инициализируется значением -EBUSY
(, которое соответствует сообщению Device or resource busy
, которое вы видите ), и изменяется на ноль, только если текущее использование меньше или равно запрошенному пределу.. Я предполагаю, что в вашем случае это не так, поэтому функция возвращает -EBUSY
.
Если res_counter_set_limit()
возвращает не -нулевое значение для mem_cgroup_resize_memsw_limit()
, то mem_cgroup_resize_limit()
, в свою очередь, возвращает то же самое значение. mem_cgroup_resize_limit()
возвращает значение в mem_cgroup_write()
. Это возвращаемое значение распространяется в пользовательское пространство, и поэтому вы видите ошибку, которую вы видите из echo
.
Реализация текущих исходных кодов ядра немного отличается, но поведение такое же. Вы не можете настроить минимальное значение на значение, меньшее, чем в -значение использования.