저는 네트워크에 연결할 수 있는 pi 장치를 개발 중이며 자동으로 패킷을 회전된 파일로 캡처하기 시작합니다. 이 장치의 기본 아이디어는 내 클라이언트 중 하나가 엔드포인트에 매우 불안정한 문제가 있는 경우 장치를 미러링된 포트에 연결하고 문제가 발생할 때까지 실행 상태를 유지할 수 있다는 것입니다. 문제가 발생하면 파이를 분리하여 전송할 수 있습니다. 분석을 위해 나에게 다시 연락하세요.
내가 겪고 있는 문제는 추적 중인 pcap 파일을 보기 위해 Pi를 다시 부팅할 때 모두 패킷 크기가 0으로 나타나는 것입니다.
이 작업을 수행하기 위해 다음 명령을 사용하고 있습니다.
tcpdump -i eth0 -U -W 10 -C 500 -w /opt/tcpdump/packetcapture-$(date +%Y%m%d.%H:%M:%S).pcap
실제로 작은 tcpdump 서비스를 실행하면 파일에 쓰는 것 같습니다.
-rw-r--r-- 1 root root 104439843 24 Nov 9 11:42 packetcapture-20211109.11:42:41.pcap0
하지만 장치를 분리했다가 다시 시작하면 다음이 표시됩니다.
-rw-r--r-- 1 root root 24 Nov 9 11:42 packetcapture-20211109.11:42:41.pcap0
왜 그럴까요? 디스크에 기록하는 것 같으며 다시 시작하기 전에 서비스를 종료하면 파일에 데이터가 포함됩니다.
여기서 좀 더 근본적인 잘못을 하고 있는 걸까요?
답변1
ls
컴퓨터의 플러그를 뽑기 전에 명령을 입력하면 메모리 캐시에서 데이터를 가져옵니다. 대부분의 프로그램은 캐시를 통해 파일에 쓰고 쓰기 시스템 호출이 반환된 후에는 실제로 디스크에 아무것도 쓰지 않습니다. 이는 시스템을 더욱 효율적으로 만듭니다.
메일 서버, 데이터베이스 등과 같은 민감한 프로그램은 확인 메시지를 보내거나 작업을 계속하기 전에 파일을 디스크에 동기화하도록 명시적으로 요구하는 fsync 시스템 호출을 사용합니다.
sync
캐시의 모든 데이터를 디스크로 플러시하고 나중에 다시 플러시하는 명령이 있습니다 . 다시 시도하고 이 명령이 끝날 때까지 컴퓨터를 분리하지 마십시오.