Предположим, что 3 - это один из тех файловых дескрипторов, которые вас интересуют.
3 может указывать на файл
, например:
exec 3>file
Ваше приложение пишет в 3:
app() { echo hello world >&3; }
Если вы хотите перехватить 3, вам нужно дублировать
его в другой файловый дескриптор (например, 4):
exec 4>&3
и перенаправить (=заменить) 3 с помощью трубы в ваш процесс перехватчика, который должен писать обратно в исходную цель (иначе он не был бы перехватчиком), которая теперь сохранена в fd 4:
app 3> >(tee /dev/tty >&4) #this interceptor writes to the terminal
Вышеуказанное должно вывести hello world
на терминал и file
должен в итоге содержать hello world
.
Все это предполагает, что эти filedescriptors открыты до начала процесса. Если вы хотите перехватить вывод filedescriptor динамически во время выполнения, то, боюсь, вам придется модифицировать код, внедрить код во время выполнения или перехватить системные вызовы с помощью чего-то вроде ptrace
.
размер вашего пула по умолчанию, вероятно, 3 (или даже больше? ). Вы можете получить это с помощью:
host:~ # ceph daemon mon.<MON> config show | grep osd_pool_default_size
"osd_pool_default_size": "3",
и измените это согласно вашему правилу:
host:~ # ceph daemon mon.<MON> config set osd_pool_default_size 2
{
"success": "osd_pool_default_size = '2' (not observed, change may require restart) "
}
Постоянные изменения размеров пулов по умолчанию должны быть настроены в файле /etc/ceph/ceph.conf