2016-05-15 11 views
1

私のドッキングウィンドウコンテナベースイメージはUbuntuのである、と私はこれらのスイッチを使用して実行コマンドで意味の完全な特権オプションでそれを実行しました:blktraceの出力誤差が

--cap-add=SYS_ADMIN --security-opt apparmor:unconfined 

私はコマンドの下に使用してblktrce使用したいです:

sudo blktrace -d/-a issue -o - | blkparse -f "%p %T.%9t %D %S ^C %d\n" -i - >stream.out 

しかし、このコマンドを使用したとき、私はこのエラーを取得する最初の時間:

Debugfs is not mounted at /sys/kernel/debug 

私は、このコマンドを使用するために導いたthis solution検索し、見つかった:私は再びblktraceコマンドを使用する際にその後

mount -t debugfs none /sys/kernel/debug 

を、私はこのエラーを取得:

BLKTRACESETUP(2)/failed: 25/Inappropriate ioctl for device 
Thread 1 failed open /sys/kernel/debug/block/(null)/trace1: 2/No such file or directory 
Thread 0 failed open /sys/kernel/debug/block/(null)/trace0: 2/No such file or directory 
Thread 2 failed open /sys/kernel/debug/block/(null)/trace2: 2/No such file or directory 
Thread 4 failed open /sys/kernel/debug/block/(null)/trace4: 2/No such file or directory 
Thread 3 failed open /sys/kernel/debug/block/(null)/trace3: 2/No such file or directory 
Thread 5 failed open /sys/kernel/debug/block/(null)/trace5: 2/No such file or directory 
Thread 7 failed open /sys/kernel/debug/block/(null)/trace7: 2/No such file or directory 
Thread 8 failed open /sys/kernel/debug/block/(null)/trace8: 2/No such file or directory 
Thread 6 failed open /sys/kernel/debug/block/(null)/trace6: 2/No such file or directory 
Thread 12 failed open /sys/kernel/debug/block/(null)/trace12: 2/No such file or directory 
Thread 10 failed open /sys/kernel/debug/block/(null)/trace10: 2/No such file or directory 
Thread 13 failed open /sys/kernel/debug/block/(null)/trace13: 2/No such file or directory 
Thread 15 failed open /sys/kernel/debug/block/(null)/trace15: 2/No such file or directory 
Thread 14 failed open /sys/kernel/debug/block/(null)/trace14: 2/No such file or directory 
Thread 17 failed open /sys/kernel/debug/block/(null)/trace17: 2/No such file or directory 
Thread 16 failed open /sys/kernel/debug/block/(null)/trace16: 2/No such file or directory 
Thread 18 failed open /sys/kernel/debug/block/(null)/trace18: 2/No such file or directory 
Thread 11 failed open /sys/kernel/debug/block/(null)/trace11: 2/No such file or directory 
Thread 19 failed open /sys/kernel/debug/block/(null)/trace19: 2/No such file or directory 
Thread 20 failed open /sys/kernel/debug/block/(null)/trace20: 2/No such file or directory 
Thread 9 failed open /sys/kernel/debug/block/(null)/trace9: 2/No such file or directory 
Thread 21 failed open /sys/kernel/debug/block/(null)/trace21: 2/No such file or directory 
Thread 22 failed open /sys/kernel/debug/block/(null)/trace22: 2/No such file or directory 
Thread 23 failed open /sys/kernel/debug/block/(null)/trace23: 2/No such file or directory 
FAILED to start thread on CPU 0: 1/Operation not permitted 
FAILED to start thread on CPU 1: 1/Operation not permitted 
FAILED to start thread on CPU 2: 1/Operation not permitted 
FAILED to start thread on CPU 3: 1/Operation not permitted 
FAILED to start thread on CPU 4: 1/Operation not permitted 
FAILED to start thread on CPU 5: 1/Operation not permitted 
FAILED to start thread on CPU 6: 1/Operation not permitted 
FAILED to start thread on CPU 7: 1/Operation not permitted 
FAILED to start thread on CPU 8: 1/Operation not permitted 
FAILED to start thread on CPU 9: 1/Operation not permitted 
FAILED to start thread on CPU 10: 1/Operation not permitted 
FAILED to start thread on CPU 11: 1/Operation not permitted 
FAILED to start thread on CPU 12: 1/Operation not permitted 
FAILED to start thread on CPU 13: 1/Operation not permitted 
FAILED to start thread on CPU 14: 1/Operation not permitted 
FAILED to start thread on CPU 15: 1/Operation not permitted 
FAILED to start thread on CPU 16: 1/Operation not permitted 
FAILED to start thread on CPU 17: 1/Operation not permitted 
FAILED to start thread on CPU 18: 1/Operation not permitted 
FAILED to start thread on CPU 19: 1/Operation not permitted 
FAILED to start thread on CPU 20: 1/Operation not permitted 
FAILED to start thread on CPU 21: 1/Operation not permitted 
FAILED to start thread on CPU 22: 1/Operation not permitted 
FAILED to start thread on CPU 23: 1/Operation not permitted  

どのように私はそれを解決できますか?

アップデート1:

sdaフォルダが/sys/kernel/debug/block/であり、これフォルダにこれらのファイルがあります

trace0 trace1 trace2 etc. 

アップデート2:

あなたの答えに感謝@ablighが、助けてくれなかった。 ioctlについてstrace出力は次のとおりです。

ioctl(3, BLKTRACESETUP, {act_mask=64, buf_size=524288, buf_nr=4, start_lba=0, end_lba=0, pid=0}, 0x7ffe8a4ceac0) = -1 ENOTTY (Inappropriate ioctl for device) 
write(2, "BLKTRACESETUP(2)/failed: 25/Inappropriate ioctl for device\n", 61) = 61 
ioctl(3, BLKTRACESTOP, 0x7f6fd19789d0) = -1 ENOTTY (Inappropriate ioctl for device) 
ioctl(3, BLKTRACESTOP, 0x7ffe8a4ce540) = -1 ENOTTY (Inappropriate ioctl for device) 
ioctl(3, BLKTRACESTOP, 0x7f6fd19789e0) = -1 ENOTTY (Inappropriate ioctl for device)` 
ioctl(3, BLKTRACETEARDOWN, 0x7f6fd19789e0) = -1 ENOTTY (Inappropriate ioctl for device) 

iはコンテナ内blktraceを実行する理由について、あなたの質問に答えるために、私は、クラスタなどの容器を使用していると言うでしょう、私は、各ノードのトレースを必要とします。

+0

'blktrace'はコンテナの外で動作しますか?私は、ブロックデバイス自体がコンテナから見えないことが問題のようだと推測しています。 – abligh

+0

@ablighはい、それはホストと大丈夫です。 –

+0

これはカーネルロックではありません。私はあなたの問題が単に 'BLKTRACESETUP'がコンテナ内で動作していないと思っています。これはカーネルの制限かもしれません。 'blktrace'の' strace'が役に立ちます。 – abligh

答えて

0

これをデバッグするのに十分な情報がありませんが、回答を投稿するよう依頼しました。

問題の根本は、ここにあるように思わ:

BLKTRACESETUP(2)/failed: 25/Inappropriate ioctl for device 

これは、ブロックのトレースを設定するにはioctl呼び出しが失敗していることを示しています。コンテナの内部では失敗していますが、コンテナの外側ではコメントに応じて動作します。これは、コンテナの設定に問題があることを示しているか、カーネルの制限によって、ioctlがコンテナにまったく使用されないことを示しています。

エラーinappropriate ioctl for deviceは、errno 25、つまりENOTTYです。デバイスノードがまったく見つからない限り(ブロックトレースコードがコンパイルされているコンテナの外で動作していることから既に実証済みである場合)、何が返されるのかはすぐにはわかりません。これがモジュール内にあるかどうかは覚えていませんが、最初にコンテナの外側でトレースをブロックしてから(コンテナ内でチェックしてください)、モジュールロードの問題ではないことを確認する価値があります。

これをデバッグするための最初のステップは、straceツール(前述のように)を使用して、どのパラメータでどのシステムコールが行われているかを正確に把握することです。

sudo strace -f -s2048 -o/tmp/trace blktrace -d/-a issue -o - | blkparse -f "%p %T.%9t %D %S ^C %d\n" -i - >stream.out 

を、その後/tmp/traceを見て:EGが実行されます。 straceはすべてのシステムコールをリストします。 ioctlが失敗しているかどうかを判断できますか。

第2に、実際にトレースしようとしているブロックデバイスが/proc//sys/という正しい場所に表示されていることを確認します。間違った何かがここで起こっている:

Thread 0 failed open /sys/kernel/debug/block/(null)/trace0: 2/No such file or directory 

注明確にすべきではないデバッグ行、中(null) - ブロックデバイスの名前でなければなりません。これはおそらく失敗したioctlの結果であり、おそらくは階層内の問題を示している可能性があります。

BLKTRACESETUPは、カーネルhereで処理されます。これにより、最終的にdoblktracesetuphereが呼び出されます。適切に許可されたコンテナからこれがうまくいかない理由がすぐにわかりません。あなたの/sys階層が正しく設定されていない可能性があります。しかし、straceの出力は役に立ちます。

また、必然的なコメント:なぜあなたはコンテナでこれをやっていますか?なぜそれをコンテナの外で実行しないのですか?

EDIT:カーネルのように見えます。 https://github.com/scaleway/kernel-tools/issues/107を参照してください。これは、(a)最初に特定のモジュールをmodprobeする必要があること、(b)特定のカーネルが必要であることを示唆しています。

+0

@albigh updated question。 –