ファイルシステムの書き込みが失われたようです。

ファイルシステムの書き込みが失われたようです。

私はtcpdumpを試した結果、非常に奇妙なファイルシステムの動作を発見しました。これはtcpdumpの問題ではないようです。これについては後で説明します。

次のコマンドはファイルを生成しません。

tcpdump -w test.pcap

ただし、このコマンドは期待どおりにPCAPファイルを生成します。

tcpdump -w - > test.pcap

最初は、tcpdumpがシェルで発生していないファイルに書き込んでいる間にエラーが発生したと思いました。だから追跡した結果、書き込みが正しく進行していることがわかりました!

open("test.pcap", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4 
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff9bf5cb000
rt_sigaction(SIGUSR1, {0x4557d0, [], SA_RESTORER, 0x7ff9bea2ab60}, {SIG_DFL, [], 0}, 8) = 0 
write(2, "tcpdump: ", 9tcpdump: )                = 9 
write(2, "listening on eth0, link-type EN1"..., 73listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes) = 73
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
write(4, "\324\303\262\241\2\0\4\0\0\0\0\0\0\0\0\0\377\377\0\0\1\0\0\0001\2\210P\34\3\3\0"..., 4096) = 4096
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
write(4, "\232\241\4\17X\213\f9+\225\35\t\364QF\223\242\7\217Y\226\373l\231vQ\354\223\250i\336."..., 4096) = 4096
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
poll([{fd=3, events=POLLIN}], 1, 1000)  = 1 ([{fd=3, revents=POLLIN}])
write(4, "\34\226\346%\354\210\342\331\377\373\222d\261\0\5\207wX\6i`\0U\260\350\260\300\250\0\16\335\241"..., 4096) = 4096

test.pcapは、ファイル記述子4で開き、要求されたバイト数が実際に書き込まれたことを報告するシステム呼び出しと共に、その記述子に複数回書き込みが行われます。

それでもファイルは生成されません。 test.pcapのファイルシステムを検索しましたが、何も見つかりませんでした。

何がこのような行動を引き起こす可能性がありますか?

tcpdump version 4.3.0
libpcap version 1.3.0
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
Linux persephone 3.4.9-gentoo #1 SMP Wed Oct 3 10:02:39 EDT 2012 x86_64 Intel(R) Xeon(R) CPU E5645 @ 2.40GHz GenuineIntel GNU/Linux

ベストアンサー1

tcpdumpファイルに対して他の操作が行われています。あなたはコマンドライン全体が何であるかを言っていませんでした。おそらく-Gそこに一つがあるでしょう。

さらなる調査のための可能な方法:-

  1. strace 出力を見続けます。名前の変更またはリンク解除を見つけることができます。
  2. tcpdumpが実行されているときにそれを実行するln test.pcap pin.test.pcapと、後でファイルへのリンクが解放されたかどうかがわかります。
  3. tcpdumpが実行されたら、そのプロセスIDを見つけて、ls -l /proc/${pid}/fd開いているファイルのフルパス名へのリンクがあることを確認してください。 (@Gillesのコメントによると、これは実際に動作することです。)

おすすめ記事