Cari tahu nilai default sysctl? (tanpa me-reboot)

10

Saya telah memodifikasi nilai net.core.rmem_maxdengan sysctl, dan sekarang saya ingin mengaturnya kembali ke nilai standarnya.

Jika saya reboot, net.core.rmem_maxakan kembali ke nilai standarnya (karena tidak ditimpa /etc/sysctl.conf), tetapi bisakah saya mengetahui nilai ini tanpa me-reboot?

Idealnya saya harus menjalankan sysctl net.core.rmem_maxuntuk membaca nilai sebelum mengubahnya, tapi saya lupa ...

Nicolas Raoul
sumber

Jawaban:

4

Ini tidak mungkin secara umum: kernel tidak mempertahankan nilai asli (setidaknya di Linux tidak, dan ini mungkin benar untuk varian unix lainnya). Nilai pengaturan disimpan dalam variabel; ketika Anda mengubah pengaturan, memori yang mengandung variabel diperbarui secara permanen.

Untuk sebagian besar pengaturan, nilai awal variabel adalah konstanta yang ditentukan pada waktu kompilasi dan disimpan dalam biner kernel. Jadi, Anda bisa, pada prinsipnya, memeriksa biner kernel Anda untuk menemukan nilai default. Anda harus menemukan simbol yang sesuai dengan pengaturan yang Anda minati, dan ikuti alamat simbol itu dalam biner kernel. Mem-boot kernel di mesin virtual akan kurang bekerja.

Untuk sebagian besar pengaturan, Anda dapat melihat di sumber kernel - kernel/sysctl.cdan file lainnya. Anda akan melihat definisi seperti

    {
            .procname       = "rmem_max",
            .data           = &sysctl_rmem_max,
            …
    },

(dalam net/core/sysctl_net_core.c), dari mana Anda dapat melacak inisialisasi sysctl_rmem_maxvariabel . Sementara ini diinisialisasi dari konstanta, dibutuhkan sedikit membaca kode C untuk berkembang.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Pada mesin OpenBSD saya, /etc/sysctl.conf mencantumkan sekelompok nilai sysctl default, tetapi daftar ini tidak lengkap.

Mungkin cara terbaik adalah membaca kode sysctl atau meminta teman yang menjalankan OS yang sama untuk nilainya :)

Edd Barrett
sumber