파일 시스템 읽기 및 쓰기, 특히 NFS 마운트에 대한 통계를 얻는 데 관심이 있습니다.
예를 들어 많은 도구가 있다는 것을 알고 있지만 iostat
모든 nfsstat
프로그램 inotifywait
에는 문제가 있습니다.
계층 구조의 복잡성으로 인해 파일 시스템을 탐색하거나 파일 이름을 명시적으로 언급해야 하는 어떤 것도 사용할 수 없습니다.
필요에 따라 다음을 수행할 수 있는 프로그램이 있습니까?
- 읽기/쓰기 표시
- 읽기/쓰기 경로 표시
- 바이트 수 표시
온디맨드란 실행 시간을 의미합니다. 포인트 (3)은 필수 사항이 아닙니다.
예를 들어, 저는 다음을 할 수 있기를 원합니다:
$ magicIOprogram
read, 512, /path/to/file1
read, 256, /path/to/file2
write, 15, /path/to/file3
write, 10562, /path/to/file4
제가 모르는 위의 도구를 사용하여 이 정보를 얻을 수 있는 방법이 있다면 그것도 충분한 해결책이 될 것입니다.
답변1
당신은 시도하고 싶을 수도 있습니다시스템 수도꼭지.
여기서 살짝 수정해 보세요예100밀리초마다 열기, 읽기 및 쓰기 표시:
#! /usr/bin/env stap
global fileread, filewrite
probe syscall.open.return {
if ($return != -1) {
printf("open, %s, %d/%d\n", user_string($filename), pid(), $return)
}
}
probe syscall.read.return {
p = pid()
fd = $fd
bytes = $return
if (bytes > 0)
fileread[p, fd] += bytes
}
probe syscall.write.return {
p = pid()
fd = $fd
bytes = $return
if (bytes > 0)
filewrite[p, fd] += bytes
}
probe timer.ms(100) {
foreach (v = [p,fd] in fileread) {
printf("read, %d, %d/%d\n", v, p, fd)
}
delete fileread
foreach (v = [p,fd] in filewrite) {
printf("write, %d, %d/%d\n", v, p, fd)
}
delete filewrite
}
출력 라인의 형식은 다음과 같습니다.
open,(경로명),(pid)/(fd)
읽기, (바이트), (pid)/(fd)
쓰기, (바이트), (pid)/(fd)
답변2
리눅스심사1번과 2번 항목에 대한 정보를 얻을 수 있습니다.
RHEL/CentOS 6을 실행 중이고 nfs 공유가 마운트되어 있다고 가정합니다 /mnt/nfs/foo
.
$ tree /mnt/nfs/foo
/mnt/nfs/foo
|-- a
| `-- foo
|-- b
`-- bar
에서 다음 규칙을 정의해야 합니다 /etc/audit/audit.rules
.
# Delete existing rules
-D
# Set buffer size
-b 320
# Log read and write operations
-w /mnt/nfs/foo -p r -k read -k nfs
-w /mnt/nfs/foo -p w -k write -k nfs
그런 다음 auditd
다시 로드 서비스를 사용하십시오 /etc/init.d/auditd reload
.
완료되면 다음 명령으로 생성된 이벤트 로그를 사용 ausearch
하고 읽을 수 있습니다 .aureport
auditd
$ cat /mnt/nfs/foo/a/foo
$ echo 'test' > /mnt/nfs/foo/b/bar
$ ausearch -k nfs | aureport -f
File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 07/15/2015 11:39:04 /mnt/nfs/foo/a/foo 2 yes /bin/cat 500 59
2. 07/15/2015 11:39:05 /mnt/nfs/foo/b/bar 2 yes /bin/bash 500 60
클라이언트에서만 정보를 수집할 수 있습니다. 클라이언트를 신뢰할 수 없다면 이 방법을 사용하여 클라이언트가 nfs를 통해 액세스하는 대상을 안전하게 확인할 수 없습니다.