2016-05-15 66 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更新了問題。 –