Изучите запись на диске, чтобы узнать, какой процесс записывается на мой SSD

Я пытаюсь свести к минимуму записи на диск на новый SSD-диск. Я застрял с выходом iostat:

~ > iostat -d 10 /dev/sdb
Linux 2.6.32-44-generic (Pluto)     13.11.2012  _i686_  (2 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               8,60       212,67       119,45   21010156   11800488

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,00         0,00        40,00          0        400

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,70         0,00        18,40          0        184

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        28,80          0        288

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               2,20         0,00        32,80          0        328

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        23,20          0        232

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,40        19,20        42,40        192        424

Как я вижу, есть записи в sdb. Как я могу решить, какой процесс записывается?

Я знаю о , который обрабатывает , но не показывает, к какой файловой системе обращаются.

1
задан 13 November 2012 в 15:31

1 ответ

Вы могли бы хотя бы начать с iotop. Он не скажет вам, какая файловая система записывается, но она даст вам некоторые процессы для исследования.

sudo apt-get install iotop
sudo iotop

Показывает мгновенные чтения и записи диска и имя команды чтения или записи.

Если вы пытаетесь поймать процесс, который пишет нечасто, вы можете использовать параметр --accumulate или записывать вывод в файл:

sudo -i
iotop --batch > iotop_log_file

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

К этому моменту вы сможете найти некоторые подозрительные процессы кандидата. В левом столбце в iotop показан pid. Затем выясните, какой файловый дескриптор процесса записывает:

sudo -i
strace -p <pid> 2>&1 | grep write

Вы должны увидеть вывод, как это, когда процесс пишет:

write(1, "\n", 1)                       = 1
write(4, "test\n", 5)                   = 5
write(1, ">>> ", 4)                     = 4

Первый аргумент для записи - файловый дескриптор. Вероятно, мы ищем значения больше 2, потому что 0, 1 и 2 - это только stdin, stdout и stderr. Файловый дескриптор 4 выглядит интересным.

Теперь вы можете узнать, к какому файлу относится файловый дескриптор:

lsof -p <pid>

Который должен выдавать вывод, например:

...
python  23908  rob  mem    REG    8,1    26258 8392656 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
python  23908  rob    0u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    1u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    2u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    3w   REG   0,25      909 9049082 /home/rob/testfile
python  23908  rob    4w   REG   0,25       20 9049087 /home/rob/another_test_file

Посмотрите на четвертую колонку. 4w означает, что файловый дескриптор 4 открыт для записи, а файл - another_test_file.

Процесс можно открыть, записать, а затем закрыть файл, и в этом случае lsof не будет показывать Это. Вы могли бы поймать это с помощью:

strace -p <pid> 2>&1 | grep open
8
ответ дан 25 May 2018 в 04:26
  • 1
    Я не знал о - accumulte Это действительно крутая функция! Большое вам спасибо за это !!! iotop - перенаправление вывода выходных данных не выполняется с помощью UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 92-99: порядковый номер не в диапазоне (128) в файле "/usr/lib/pymodules/python2.6/iotop/ui .py ", строка 405, в refresh_display – zuba 13 November 2012 в 18:29
  • 2
    Я рад, что мой ответ по крайней мере был полезен. Перенаправление работает для меня; Не уверен, что я могу это объяснить. – Rob Fisher 13 November 2012 в 18:43
  • 3
    Хорошо, я немного поиграл и обнаружил, что могу использовать lsof и strace, чтобы, по крайней мере, сделать достаточно детективной работы, чтобы поймать процессы, записывающие SSD. Надеюсь, это, наконец, ответит на вопрос, как это было задано, хотя похоже, что ответ Колина Иэна Кинга проще! – Rob Fisher 13 November 2012 в 19:28
  • 4
    Извините за поздний ответ, мне нечего было сказать, пока я не сыграл с strace. Спасибо за этот еще один умный подход, я голосовал. Мне было довольно сложно написать скрипт для его реализации из-за небольшого опыта написания сценариев оболочки. Вот почему я выбрал другое решение. Спасибо, что поделились своими знаниями! – zuba 15 November 2012 в 01:00

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

Похожие вопросы: