LINUX.ORG.RU

[HELP] Ищется файловый монитор

 


0

0

Есть у меня одно приложение, которое открывает пачку файлов, каталогов и пр., и я не могу отследить куда оно пишет. Винт при этом периодически шуршит, что меня сильно бесит.

Есть для Линукса живые файловые мониторы, кроме сдохшего варианта от Руссиновича (sysinternals filemon for Linux)?

inotify и подобные не предлагать - они работают только в пределах указанных директорий, а мне нужно отследить ядерные вызовы (мозгов написать wrapper для ядра на FS write/read операций нет) или все папки каталоги разом.

★★★★★
Ответ на: комментарий от Deleted

Это невозможно - выделить block/FS IO вызовы среди всех остальных, не связанных с IO.

write можно использовать для pipe, socket'a и пр. Кроме того очень сложно отследить конечный файл, на который может указывать pipe.

Есть ещё варианты?

birdie ★★★★★
() автор топика
Ответ на: комментарий от birdie

Да, ещё есть море аналогичных вызовов а-ля fputs и пр. пр.

birdie ★★★★★
() автор топика
Ответ на: комментарий от birdie

> Есть ещё варианты?

написать свой небольшой модулек ядра, который перехватит вам вызовы VFS, отфильтрует по заданному pid и выдаст в удобоваримом виде :) не особо сложно кстати.

ps: а может www.dazuko.org поможет? он в принципе делает нечто подобное, хотя и не совсем. но может и вполне хватит.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от birdie

> write можно использовать для pipe, socket'a и пр.

strace выводит вызовы с параметрами и возвращаемыми значениями. Поэтому написать скрипт, который рассортировывает ввод-вывод по файловым дескрипторам, и аннотирует это происхождением каждого дескриптора - вполне несложно.

В любом случае, сначала надо попробовать это сделать, а уже потом - писать ядреные модули.

> Кроме того очень сложно отследить конечный файл, на который может указывать pipe.

pipe не ссылается на файл. пайп - это пайп, у него на другой стороне какой-то процесс. Какой - понять не всегда легко, но, в принципе, возможно.

anonymous
()
Ответ на: комментарий от klalafuda

dazuko не отслеживает операции записи и чтения из файла ... да и вообще не собирается

make[1]: Entering directory `/home/src/linux-2.6.20'
  CC [M]  /tmp/dazuko-2.3.2/dazuko_core.o
/tmp/dazuko-2.3.2/dazuko_core.c:72: error: redefinition of ‘struct path’

birdie ★★★★★
() автор топика
Ответ на: комментарий от birdie

make[1]: Entering directory `/home/src/linux-2.6.20'
  CC [M]  /tmp/dazuko-2.3.2/dazuko_core.o
  CC [M]  /tmp/dazuko-2.3.2/dazuko_transport.o
  CC [M]  /tmp/dazuko-2.3.2/dazuko_linux.o
/tmp/dazuko-2.3.2/dazuko_linux.c: In function ‘xp_wait_until_condition’:
/tmp/dazuko-2.3.2/dazuko_linux.c:338: error: ‘PF_FREEZE’ undeclared (first use in this function)
/tmp/dazuko-2.3.2/dazuko_linux.c:338: error: (Each undeclared identifier is reported only once
/tmp/dazuko-2.3.2/dazuko_linux.c:338: error: for each function it appears in.)
/tmp/dazuko-2.3.2/dazuko_linux.c:340: warning: implicit declaration of function ‘refrigerator’
make[2]: *** [/tmp/dazuko-2.3.2/dazuko_linux.o] Error 1


Короче, я на него забил.

birdie ★★★★★
() автор топика

> а мне нужно отследить ядерные вызовы (мозгов написать wrapper для ядра на FS write/read операций нет)

Ну дык гляньте как это сделано в changedfiles и сделайте аналогичный модуль.

Я по диагонали просмотрел его исходники -- там подменяется таблица syscall'ов так, чтобы вызывались самопальные wrapper'ы, а уже посли них -- собственно системные вызовы. Глянул исходники ядра -- вроде таблица вызовов в 2.6 такая же. Вам в принципе даже девайс создавать не надо, достаточно грепнуть dmesg, куда повалятся printk'и.

А вообще, почему бы не сделать find по atime?

Relan ★★★★★
()
Ответ на: комментарий от Relan

Хорошая идея - только мееедлееенно - у меня > 200 000 файлов.

birdie ★★★★★
() автор топика
Ответ на: комментарий от Relan

> Я по диагонали просмотрел его исходники -- там подменяется таблица syscall'ов так, чтобы вызывались самопальные wrapper'ы,

Для 2.6 можете переделать? С меня памятник ;-)

birdie ★★★★★
() автор топика

>Есть у меня одно приложение, которое открывает пачку файлов, >каталогов и пр., и я не могу отследить куда оно пишет. Винт при этом >периодически шуршит, что меня сильно бесит.

а если просто взять и lsof запустить в этот момент?

fghj ★★★★★
()
Ответ на: комментарий от birdie

>lsof не покажет pdflush

а отследить pdflush не поможет никто, кроме чего-то типа blk trace,
он же работает со страничным кэшем.

fghj ★★★★★
()

>Есть у меня одно приложение, которое открывает пачку файлов, каталогов и пр., ...

Что за приложение? Без исходников надо полагать.

> ... и я не могу отследить куда оно пишет.

Туда где есть права доступа на запись (верхняя граница)

> ... у меня > 200 000 файлов.

Поставить минимальную систему, чтобы было легче отследить (если цель имено отследить, а не пофлеймить здесь)

sdio ★★★★★
()
Ответ на: комментарий от sdio

echo 1 >/proc/sys/vm/block_dump

sleep 60

echo 0 >/proc/sys/vm/block_dump

dmesg|tail -n 50

Buba
()

А что-то checkinstall не подойдет?

anonymous
()
Ответ на: комментарий от birdie

> Для 2.6 можете переделать?

Знаете анекдот про гинеколога, убившего проститутку? Так вот, я сегодня весь день на работе занимался разработкой драйверов, прихожу вечером домой с намерением отдохнуть, а вы мне предлагаете снова взяться за написание драйвера? :D

Там всего-то несколько строчек поправить, порезать лишний код да makefile новый написать. Если завтра будет время, может быть и налабаю, но конечно ничего не обещаю, т.к. хочется завтра как следует отдохнуть. Чего и вам желаю. ;)

Relan ★★★★★
()

while true
do
lsof | grep progname
sleep 1
done

anonymous
()
Ответ на: комментарий от birdie

> Кто с ЛОРа в состоянии переделать ядерный модуль с 2.4 на 2.6?

ну это зависит от цены вопроса.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Relan

> Я по диагонали просмотрел его исходники -- там подменяется таблица syscall'ов так, чтобы вызывались самопальные wrapper'ы, а уже посли них -- собственно системные вызовы. Глянул исходники ядра -- вроде таблица вызовов в 2.6 такая же. Вам в принципе даже девайс создавать не надо, достаточно грепнуть dmesg, куда повалятся printk'и.

боюсь тривиальной подменой некоторых элементов таблицы системных вызовов в указанной задачи явно не обойтись :))) копайте глубже.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Я еще не тестировал но вроде ничего особенного не нужно.
Пару маркосов убрать, да добавить ф-цию поиск sys_call_table.
Поправьте если не прав.

Svoloch ★★★
()
Ответ на: комментарий от Svoloch

> Я еще не тестировал но вроде ничего особенного не нужно. Пару маркосов убрать, да добавить ф-цию поиск sys_call_table. Поправьте если не прав.

если я правильно понимаю, речь идет о сборке Dazuko или о чем-то другом?

если о Dazuko, то она [он?] действительно перехватывает некоторые системные вызовы в таблице вызовов с целью отследить открытие файла и пр. свою кухню. проблема в том, что в голом виде AFAIU Dazuko - это не совсем то, что нужно. оригинальное пожелание:

--- cut ---
Есть у меня одно приложение, которое открывает пачку файлов, каталогов и пр., и я не могу отследить куда оно пишет. Винт при этом периодически шуршит, что меня сильно бесит.
--- cut ---

...aka "отследить запись данных от заданного приложения на файловую систему".

Dazuko же AFAIR нацелена на несколько другие задачи: отслеживание доступа к файловой системе и разграничения этого доступа на основе внешне заданных правил. a'la SELinux с прицелом на файловую систему с фильтрацией доступа через приложение в userland. как следствие, все, что перехватывает и обрабатывает Dazuko - это:

#if defined(ON_OPEN_SUPPORT)
DAZUKO_HOOK(open);
DAZUKO_HOOK(dup);
#endif
#if defined(ON_OPEN_SUPPORT) || defined(ON_CLOSE_SUPPORT) || defined(ON_CLOSE_MODIFIED_SUPPORT)
DAZUKO_HOOK(dup2);
#endif

#if defined(ON_CLOSE_SUPPORT) || defined(ON_CLOSE_MODIFIED_SUPPORT)
DAZUKO_HOOK(close);
#endif

#ifdef ON_EXEC_SUPPORT
DAZUKO_HOOK(execve);
#endif

#ifdef ON_UNLINK_SUPPORT
DAZUKO_HOOK(unlink);
#endif

#ifdef ON_RMDIR_SUPPORT
DAZUKO_HOOK(rmdir);
#endif

i.e. open, close, dup, dup2, execve, unlink и rmdir. отследить запись в файл она не сможет в силу той простой причины, что таких целей не ставится.

это я к тому, что Dazuko - это конечно здорово, но это скорее лишь стартовый прототип системы, которая делает нечто схожее с желаемым. именно в этом контексте я её и посоветовал.

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

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Svoloch

> Я не про dazuko - хотя проект интересный. Я про changedfiles

судя по стилю кода changedfiles я бы не стал использовать Это ни при каких обстоятельствах :)))

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> судя по стилю кода changedfiles я бы не стал использовать Это ни при каких обстоятельствах :)))

тем более, что судя по таймстампу это где-то 2003й год. с другой стороны сегодня наивно полагать, что ядро [2.4/2.6 не важно] экспортирует sys_call_table а тем более в модули :) на реальном ядре эту таблицу ещё найти нужно в рантайме...

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> тем более, что судя по таймстампу это где-то 2003й год. с другой стороны сегодня наивно полагать, что ядро [2.4/2.6 не важно] экспортирует sys_call_table а тем более в модули :) на реальном ядре эту таблицу ещё найти нужно в рантайме...

ну и в любом случае, changedfiles не знает что такое sys_write бо обработать его в разумительном виде и выдать наружу это заметно сложнее, нежели просто выдать аргумент "путь" из open/close/link/unlink. так что на вопрос "а куда же эта сцуко пишет?!" changedfiles ответит навряд ли :)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> если о Dazuko, то она [он?] действительно перехватывает некоторые системные вызовы в таблице вызовов с целью отследить открытие файла и пр. свою кухню. проблема в том, что в голом виде AFAIU Dazuko - это не совсем то, что нужно. оригинальное пожелание:

Определенно оно так.

anonymous
()
Ответ на: комментарий от anonymous

> Хреново ... есть ещё идеи? С нуля писать?

блин там писать то, в 1500 строк все уложится

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

Вечером доба буду - выложу. Сейчас я уже на работе.

Svoloch ★★★
()
Ответ на: комментарий от klalafuda

Можно к changedfiles hook sys_write дописать.
Вопрос есть ли смысл? Ибо если это не единственное (я не суперспец в этом)что дописать надо а одно из многого - имеет смысл с нуля делать.
Что там еще нужно добавить?

Svoloch ★★★
()
Ответ на: комментарий от Svoloch

> Можно к changedfiles hook sys_write дописать.

changedfiles IMHO можно лишь выкинуть в мусорку и больше не вспоминать. но это IMHO.

> Вопрос есть ли смысл? Ибо если это не единственное (я не суперспец в этом)что дописать надо а одно из многого - имеет смысл с нуля делать. Что там еще нужно добавить?

сперва нужно добавить четкое ТЗ a'la "что же именно мы хотим получить и с какой конкретно функциональностью" :) пока что есть лишь общее описание проблемы. но это уже видимо к автору темы.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> сперва нужно добавить четкое ТЗ a'la "что же именно мы хотим получить и с какой конкретно функциональностью" :) пока что есть лишь общее описание проблемы. но это уже видимо к автору темы.

filemon for Windows от Русиновича видели? Нужно точно такое же, можно без графического интерфейса.

http://www.microsoft.com/technet/sysinternals/FileAndDisk/Filemon.mspx

birdie ★★★★★
() автор топика
Ответ на: комментарий от birdie

> filemon for Windows от Русиновича видели?

нет, не пришлось. я даже не знаю, кто такое есть этот гн. Русинович :) впрочем, это не важно бо судя по

> Нужно точно такое же, можно без графического интерфейса. http://www.microsoft.com/technet/sysinternals/FileAndDisk/Filemon.mspx

..идея в принципе понятна. не знаю наверняка, через какое именно место filemon получает информацию, скорее всего через хуки в соотв. DLL в userland. не думаю, что они стали воротить для этого свой расширитель VFS через IFS DDK. оно конечно возможно, но это а) достаточно муторно б) IMHO из пушки по воробьям. впрочем, может быть и написали.

сделать качественный аналог под Linux конечно же возможно, но это требует определённой квалификации и достаточно много времени [особенно на дизайн и отладку].

ps: ATM я этого сделать не могу по той простой причине, что мой работодатель платит мне за скажем так сходную по свойствам разработку, которая естественно отнюдь не OS и это было бы просто бестактно :) да и достаточно муторно это. особенно, если в требованиях указан запрет на модификацию ярда и его пересборку aka "все должно работать out of box без вмешательства в конечную систему".

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> ps: ATM я этого сделать не могу по той простой причине, что мой работодатель платит мне за скажем так сходную по свойствам разработку, которая естественно отнюдь не OS и это было бы просто бестактно :) да и достаточно муторно это. особенно, если в требованиях указан запрет на модификацию ярда и его пересборку aka "все должно работать out of box без вмешательства в конечную систему".

да, но если вдруг найдётся некто, кто захочет сделать таки filemon или аналог под Linux я не вижу причины почему бы не помочь дельным советом. задача в принципе достаточно интересная, в меру сложная и не то чтобы часто но все-таки нужная в быту.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от birdie

Говорят а ты не слушай, говорят а ты не верь!(с)
Мне ния господина klalafud-ды для меня весьма важно,
но у тебя я так понимаю частная конкретная задача.
Так что ты бы хоть попробовал - вдруг тебе этого наколенного поделия хватит.
А после уж летел в заоблачные дали
Высоких сфер, и линукса ядра,
Куда тебя признаться и не звали,
Там рыться наша не пришла пора:)

Svoloch ★★★
()
Ответ на: комментарий от birdie

Кстати асю или жабер таки не таи. А то я тебе резалт мог
еще в субботу скинуть - да лор лежал.

Svoloch ★★★
()
Ответ на: комментарий от klalafuda

Посмотрим - если то что уже напатчили неподойдет - может я возьмусь.
Но квалификации у меня не вагон. Как бы не убил ты меня во время
чуткого руководства осерчав зело:)

Svoloch ★★★
()
Ответ на: комментарий от klalafuda

> они стали воротить для этого свой расширитель VFS через IFS DDK. оно конечно возможно, но это а) достаточно муторно б) IMHO из пушки по воробьям. впрочем, может быть и написали.

Так оно и работает - со своим sys драйвером.

birdie ★★★★★
() автор топика
Ответ на: комментарий от Svoloch

> Посмотрим - если то что уже напатчили неподойдет - может я возьмусь. Но квалификации у меня не вагон. Как бы не убил ты меня во время чуткого руководства осерчав зело:)

Ты уже проверял - работает? Просто на проверку, чтобы у меня kernel panic был или оно валило мусор вместо, данных мне не нужно.

birdie ★★★★★
() автор топика
Ответ на: комментарий от Svoloch


весь вопрос в том, чего же именно хочется. нет, я конечно понимаю, filemon был бы в идеале, но это все-таки достаточно сложная вещь да и к нему то-же можно выставить требований на вагон и маленькую тележку. может быть под конкретную задачу подойдёт что-то попроще? в плане надёжности например [работает здесь и сейчас] или функциональности или можно смягчить заданные мною в общем то с потолка условия и разрешить патчить и пересобирать ядро, что сильно упростит реализацию. ну и так далее. я ведь не зря спросил про более конкретизированное ТЗ, от него мягко говоря много что зависит.

ps: понятно, что лишь ради определения паразитной активности некого приложения на конкретно заданной машине навряд ли IMHO кто-то станет с этим связываться, уж не обессудьте :) но как цельный инструмент общего назначения этот проект может быть кому-то достаточно интересен.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Svoloch

> Посмотрим - если то что уже напатчили неподойдет - может я возьмусь.
Но квалификации у меня не вагон. Как бы не убил ты меня во время
чуткого руководства осерчав зело:)

да вы не переживайте, когда я например взялся писать свою первую версию скажем так аналога filemon-а, сам по себе Linux я видел второй раз в жизни.. ;) что впрочем не помешало в нем разобраться за разумные сроки и реализовать что требовалось.

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.