메일, 데이터베이스 쓰기, 로그 또는 기타 소스를 통해 들어오는지 여부에 관계없이 과도한 디스크 쓰기가 어디에서 발생하는지 추적하려고 합니다. 서버에는 약 75개의 계정이 있으며 일부는 활성화되어 있고 일부는 활성화되어 있지 않습니다.
디스크 쓰기가 수행되는 디렉터리를 지정하기 위해 모든 종류의 디스크 I/O 명령을 수행할 수 있습니까? 데이터베이스 쓰기라면 나는 그것이 진행되는 것을 볼 것이라고 기대합니다/var/lib/mysql/that_database_name
- 추가 -
tail -f
약 2년 전에 내가 본 것과 유사한 몇 가지 명령을 실행한 것을 어렴풋이 기억합니다.생각하다지정된 폴더. 디스크 쓰기 로그를 추적하면(그런 것이 존재하는 경우) 해당 위치나 이 형식의 액세스가 원하는 결과를 얻을 수 있습니다.
답변1
당신은 생각할 수도 있습니다파트라스, 파일 시스템에 대한 모든 쓰기를 모니터링할 수 있습니다. 예를 들면 다음과 같습니다.
$ sudo fatrace -f W
chrome(19909): W /home/meuh/.config/google-chrome/Default/Current Session
bash(2777): CW /home/meuh/.bashhistory
emacs(2100): CW /home/meuh/bin/emacs/.emacs.desktop
auditd(711): W /var/log/audit/audit.log
rsyslogd(762): W /var/log/secure
-f W
실행 파일, PID 및 작성된 파일을 나열하여 모든 쓰기 작업으로 출력을 제한합니다 .
또 다른 가능성은아이오스눕브렌든 D. 그레그에서성능 도구디스크에 기록된 블록에 대한 하위 수준 정보를 제공합니다.
$ sudo perf-tools-master/bin/iosnoop
Tracing block I/O. Ctrl-C to end.
COMM PID TYPE DEV BLOCK BYTES LATms
/usr/bin/mon 31456 R 8,0 9741888 4096 2.14
/usr/bin/mon 31456 R 8,0 12904784 4096 1.43
jbd2/sda3-41 416 WS 8,0 130618232 65536 1.89
jbd2/sda3-41 416 WS 8,0 210006528 8192 1.94
<...> 288 WS 8,0 129710104 61440 1.85
<idle> 0 WS 8,0 129710224 4096 0.36
cat 32111 WS 8,0 10443000 4096 0.35
몇 개의 파일 세트만 보고 싶다면 또 다른 가능성은 다음과 같습니다.inotify기다려,예를 들어:
$ inotifywait -m -e modify -r /tmp
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/tmp/ MODIFY myfile
-r
주어진 디렉토리에 대해 하향 재귀적 입니다 . 설정하는 데 비용이 많이 들고 기본적으로 사용자는 8192개의 시계로 제한되지만 에서 변경할 수 있습니다 /proc/sys/fs/inotify/max_user_watches
.