"Cd" ke / sys / kernel / debug / tracing menyebabkan perubahan izin

10

Saya telah menghadapi masalah yang sangat aneh hari ini, dan saya benar-benar tidak berdaya tentang hal itu.

Beberapa server yang saya kelola dipantau dengan Nagios. Baru-baru ini saya melihat probe penggunaan disk gagal dengan kesalahan ini:

DISK CRITICAL - / sys / kernel / debug / tracing tidak dapat diakses: Izin ditolak

Saya ingin menyelidiki dan percobaan pertama saya adalah memeriksa izin direktori ini, dan membandingkannya dengan server lain (yang berfungsi dengan baik). Berikut adalah perintah yang saya jalankan di server yang berfungsi dan Anda akan melihat bahwa begitu saya cdmasuk ke direktori, izinnya diubah:

# Here we've got 555 for /sys/kernel/debug/tracing
root@vps690079:/home/admin# cd /sys/kernel/debug
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Jul 19 13:13 ../

dr-xr-xr-x  3 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

# I cd into the folder, and it (./) becomes 700!!
root@vps690079:/sys/kernel/debug# cd tracing/
root@vps690079:/sys/kernel/debug/tracing# ll
total 0
drwx------  8 root root 0 Jul 19 13:13 ./
drwx------ 30 root root 0 Jul 19 13:13 ../
-r--r--r--  1 root root 0 Jul 19 13:13 available_events
-r--r--r--  1 root root 0 Jul 19 13:13 available_filter_functions
-r--r--r--  1 root root 0 Jul 19 13:13 available_tracers


# Next commands are just a dumb test to double-check what I'm seeing
root@vps690079:/sys/kernel/debug/tracing# cd ..
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Sep 27 10:57 ../

drwx------  8 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

Pernahkah Anda tahu apa yang menyebabkan perilaku ini?
Catatan, menggunakan chmod untuk membangun kembali izin tampaknya tidak memperbaiki probe.

zessx
sumber
1
Saat memberikan sampel input terminal, pertimbangkan untuk mengganti alias tidak standar seperti lldengan perintah yang mereka perjuangkan.
Roman Odaisky
2
@RomanOdaisky Ini adalah alias default di Ubuntu, mungkin tidak tahu itu bukan default
GammaGames
Di atas apa yang dikatakan @tecloM, ini terlihat seperti bug kernel untuk versi kernel Anda. Pada 4.19.0-4 perilaku normal.
V13

Jawaban:

20

/ sys

/sysadalah sysfs, sepenuhnya tampilan virtual ke dalam struktur kernel dalam memori yang mencerminkan konfigurasi sistem kernel dan perangkat keras saat ini, dan tidak mengkonsumsi ruang disk nyata. File dan direktori baru tidak dapat ditulis dengan cara biasa.

Menerapkan pemantauan ruang disk tidak menghasilkan informasi yang berguna dan hanya membuang-buang usaha. Ini mungkin memiliki mount point untuk sistem file virtual berbasis RAM lainnya di dalamnya, termasuk ...

/ sys / kernel / debug

/sys/kernel/debugadalah titik pemasangan standar untuk debugfs, yang merupakan sistem file virtual opsional untuk berbagai fitur debugging dan penelusuran kernel.

Karena ini untuk fitur debugging, seharusnya tidak perlu untuk penggunaan produksi (walaupun Anda mungkin memilih untuk menggunakan beberapa fitur untuk statistik sistem yang disempurnakan atau serupa).

Karena menggunakan fitur-fitur yang ditawarkan oleh debugfskehendak dalam sebagian besar kasus mengharuskan adanya root, dan tujuan utamanya adalah menjadi cara yang mudah bagi pengembang kernel untuk memberikan informasi debug, ini mungkin sedikit "kasar di tepinya".

Ketika kernel dimuat, rutin inisialisasi untuk subsistem pelacakan kernel terdaftar /sys/kernel/debug/tracingsebagai jalur akses debugfs sendiri, menunda inisialisasi lebih lanjut sampai itu benar-benar diakses untuk pertama kalinya (meminimalkan penggunaan sumber daya dari subsistem tracing jika ternyata itu tidak dibutuhkan). Ketika Anda cdmasuk ke direktori, inisialisasi yang ditangguhkan ini dipicu dan subsistem pelacakan disiapkan sendiri untuk digunakan. Akibatnya, aslinya /sys/kernel/debug/tracingawalnya fatamorgana tanpa substansi, dan hanya menjadi "nyata" ketika (dan karena) Anda mengaksesnya dengan cdperintah Anda .

debugfs sama sekali tidak menggunakan ruang disk nyata: semua informasi yang terkandung di dalamnya akan hilang ketika kernel dimatikan.

/ sys / fs / cgroup

/sys/fs/cgroupadalah tmpfsfilesystem berbasis-RAM, yang digunakan untuk mengelompokkan berbagai proses yang berjalan ke dalam kelompok kontrol . Tidak menggunakan ruang disk nyata sama sekali. Tetapi jika sistem file ini menjadi hampir penuh karena suatu alasan, itu mungkin lebih serius daripada hanya kehabisan ruang disk: itu mungkin berarti bahwa

a) Anda kehabisan RAM gratis,

b) beberapa proses yang dimiliki root adalah menulis sampah ke /sys/fs/cgroup, atau

c) sesuatu menyebabkan sejumlah kelompok kontrol yang benar-benar absur untuk dibuat, mungkin dalam gaya klasik "bom fork" tetapi dengan systemdlayanan berbasis atau serupa.

Intinya

Penyelidikan penggunaan disk seharusnya /sysdikecualikan karena tidak ada apa pun di bawah /sysini yang tersimpan pada disk apa pun.

Jika Anda perlu memantau /sys/fs/cgroup, Anda harus menyediakan probe khusus untuk itu yang akan memberikan peringatan lebih bermakna daripada penyelidikan ruang disk generik.

telcoM
sumber
1
Terima kasih atas jawaban ini dengan detail sebanyak yang saya butuhkan! Saya akan mengecualikan /sysdari rentang pemantauan saya.
zessx
1
@ zessx: Kecualikan /procdan mungkin /dev(karena meskipun tidak 100% didukung RAM, di satu sisi ia berisi sejumlah file dan direktori yang "aneh" dalam berbagai cara, dan di sisi lain, jika Anda benar-benar mengkonsumsi satu ton ruang disk /dev, setup Anda rusak parah dan Anda harus menyalakan seluruh kekacauan terbakar).
Kevin
" /sysadalah sysfs, sistem file virtual sepenuhnya berbasis RAM" - Saya cukup yakin isinya sysfs100% disintesis dari struktur data di-kernel dan tidak tinggal di RAM di suatu tempat. Bahkan, saya berpendapat bahwa "sistem file virtual berbasis RAM" adalah sebuah oxymoron: apakah itu berbasis RAM, yaitu memiliki backing store (bahkan jika itu adalah backing store yang sangat non-tradisional untuk sistem file), maka itu adalah bukan virtual, atau virtual, maka tidak memiliki backing store.
Jörg W Mittag
1
@ JörgWMittag Perhatikan bahwa saya dengan sangat hati-hati menghindari mengatakan sysfsadalah RAMdisk. Di mana struktur data in-kernel hidup, jika tidak dalam RAM, sih? Saya setuju bahwa kata "virtual" bermasalah di sini, karena Anda mungkin menyadari bahwa di atas semua driver sistem file di kernel Linux adalah lapisan VFS (Virtual File System), yang menggunakan "virtual" dalam arti lain, seperti abstraksi yang seragam untuk semua sistem file yang mungkin. Tetapi sulit untuk menggambarkan secara ringkas bagaimana procdan sysfsberbeda dari sistem file yang sebenarnya, karena ini hanya informasi latar belakang untuk membuat titik utama tetap.
telcoM
1
@grawity Saya sedikit mengubah kata-katanya, apakah akan lebih baik sekarang?
telcoM