Отслеживание доступа к корневой файловой системе: процесс и имя файла

Я запускаю Linux на eMMC.

Я хочу уменьшить IO, который делается на устройстве.

Я не люблю искать иголку в стоге сена.

Я хочу способ отслеживать доступ к устройству.

Я хочу увидеть идентификатор процесса и имя файла, который выполняет операции записи в eMMC.

К сожалению, я не мог найти способ сделать это до сих пор.

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

ls -ltr /proc/*/fd| grep -vE '/dev/|socket|pipe'

Любой намек, как найти информацию, которую я ищу?

Кстати, я уже применил подсказки из этого ответа: /questions/162344/programmnoe-obespechenie-kvm-klaviatura-video-myish/162352#162352

Я использую Ubuntu 16.04

1 ответ

Попробуй sysdig.

bash-4.1$ sysdig -l | grep write
                 However, for some events (like writes to /dev/log) it provides
evt.is_io       'true' for events that read or write to FDs, like read(), send,
evt.is_io_write 'true' for events that write to FDs, like write(), send(), etc.
                that write to FDs, like write().
evt.is_syslog   'true' for events that are writes to /dev/log.
evt.is_open_write
bash-4.1$ sysdig -l | egrep 'proc.pid|fd.name'
fd.name         FD full name. If the fd is a file, this field contains the full
proc.pid        the id of the process generating the event.

Так что, возможно, что-то вроде:

sudo sysdig -p '%proc.pid %fd.name' evt.is_io_write exists

Упс, что соответствует sysdig (и моя сессия SSH).

sudo sysdig -p '%proc.pid %fd.name' \
  "evt.is_io_write exists and not ( proc.name contains sysdig or proc.name contains ssh )"

Все еще немного занят. Это лучше в моей тестовой системе:

sudo sysdig -p '%proc.pid %fd.name %fd.type' "evt.is_io_write exists and fd.typechar = f and not ( fd.name contains /dev or fd.name contains /proc or fd.name contains eventfd or fd.name contains signalfd or fd.name contains kvm- )"

Или вы можете фильтровать для fd.name с путем, а затем исключить /dev а также /proc...

Другие вопросы по тегам