В общем, это невозможно: ядро не сохраняет исходные значения (по крайней мере, в Linux это не так, и, вероятно, это верно для других вариантов Unix). Значение настройки сохраняется в переменной; при изменении настройки память, содержащая переменную, необратимо обновляется.
Для большинства настроек начальное значение переменной является константой, которая определяется во время компиляции и сохраняется в двоичном файле ядра. Таким образом, вы можете, в принципе, проверить ваш двоичный файл ядра, чтобы найти значение по умолчанию. Вам нужно будет найти символ, соответствующий интересующей вас настройке, и следовать адресу этого символа в двоичном файле ядра. Загрузка вашего ядра на виртуальной машине была бы менее трудоемкой.
Для большинства настроек вы можете посмотреть исходный код ядра - kernel/sysctl.c
и другие файлы. Вы увидите такие определения, как
{
.procname = "rmem_max",
.data = &sysctl_rmem_max,
…
},
(в net/core/sysctl_net_core.c
), из которого вы можете проследить инициализацию sysctl_rmem_max
переменной . В то время как этот инициализируется из константы, для его расширения требуется немало чтения кода C.