2016-05-15 195 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而导致使用这个命令:

mount -t debugfs none /sys/kernel/debug 

后,当我再次使用blktrace命令,我得到这个错误:

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  

我该如何解决呢?

UPDATE1:

存在/sys/kernel/debug/block/进入这个文件夹sda文件夹下有这些文件:

trace0 trace1 trace2 etc. 

UPDATE2:

@abligh感谢您的回答,但没有帮助。关于ioctlstrace输出是:

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) 

回答你关于为什么我在容器中运行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工具(如上面所建议的),以便您确切知道使用哪些参数进行的系统调用。EG运行:

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/tracestrace将列出所有进行的系统调用。看看你能否确定哪个ioctl失败。其次,我会确保你试图追踪的块设备实际上出现在/proc//sys/的正确位置。蹊跷发生在这里:

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

注意(null)在调试线,这显然不应该存在 - 这应该是块设备的名称。这可能是因为失败的ioctl的结果,或者可能表示/sys/层次结构中存在问题。

BLKTRACESETUP在内核here中处理。这最终称为doblktracesetuphere。我无法立即看到任何理由,为什么这将不适合从适当的许可容器,这使我怀疑你的/sys层次结构可能没有设置正确。但strace的输出将会有所帮助。

此外,不可避免的评论:你为什么要在容器中这样做?为什么不在容器外运行?

编辑:看起来它可能是一个核心的东西。请参阅https://github.com/scaleway/kernel-tools/issues/107 - 这表明您(a)需要首先修改特定模块,并且(b)可能需要特定的内核。

+0

@albigh更新了问题。 –