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 cd
masuk 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.
sumber
ll
dengan perintah yang mereka perjuangkan.Jawaban:
/ sys
/sys
adalahsysfs
, 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/debug
adalah titik pemasangan standar untukdebugfs
, 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
debugfs
kehendak dalam sebagian besar kasus mengharuskan adanyaroot
, 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/tracing
sebagai 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 Andacd
masuk ke direktori, inisialisasi yang ditangguhkan ini dipicu dan subsistem pelacakan disiapkan sendiri untuk digunakan. Akibatnya, aslinya/sys/kernel/debug/tracing
awalnya fatamorgana tanpa substansi, dan hanya menjadi "nyata" ketika (dan karena) Anda mengaksesnya dengancd
perintah 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/cgroup
adalahtmpfs
filesystem 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 bahwaa) Anda kehabisan RAM gratis,
b) beberapa proses yang dimiliki root adalah menulis sampah ke
/sys/fs/cgroup
, atauc) sesuatu menyebabkan sejumlah kelompok kontrol yang benar-benar absur untuk dibuat, mungkin dalam gaya klasik "bom fork" tetapi dengan
systemd
layanan berbasis atau serupa.Intinya
Penyelidikan penggunaan disk seharusnya
/sys
dikecualikan karena tidak ada apa pun di bawah/sys
ini 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.sumber
/sys
dari rentang pemantauan saya./proc
dan 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)./sys
adalahsysfs
, sistem file virtual sepenuhnya berbasis RAM" - Saya cukup yakin isinyasysfs
100% 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.sysfs
adalah 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 bagaimanaproc
dansysfs
berbeda dari sistem file yang sebenarnya, karena ini hanya informasi latar belakang untuk membuat titik utama tetap.