Оливия Кросс – Слепое пятно (страница 5)
Перегибать тут нельзя. Слишком настойчивая попытка «поймать» приводит не к истине, а к аварийной ветке поведения. Нужен повторяемый факт – не эксцесс.
Пределы – тоже инструмент. На профиле «грязной погоды» ползунок ушёл туда, куда в жизни его не поведут – чтобы не уронить систему в защиту. Входные отметки расплылись в кисель, алгоритм продержался лучше ожидаемого. Раннее слияние исчезло – не потому, что политика переменилась, просто метрика уверенности не дотянулась до порога. Для логики верно, для жизни – правильно. При средней интенсивности шумов картинка вернулась в исходное русло: «окно два», ранний допуск включён. Факт зафиксирован.
Небольшой круг меж стоек отнял у ног тепло, а у головы – лишнее. Над головой лампы гудели тонко, на грани слышимости. Белая стяжка на одном кабеле держала обход не по линейке, но крепко. Ручная аккуратность всегда действовала успокаивающе: вещи, сделанные руками, меньше тянутся к фокусам.
В углу экрана мягко выросло уведомление – из тех, что больше стараются не тревожить: «Доступ к каталогу временно ограничен политикой безопасности». Метка – «23:42:00». Щелчок – и надпись исчезла, будто и не загоралась. Но место, где всплыла, было запомнено – как солнечный зайчик на стене: поймать бесполезно, направление – важно.
Лишние окна ушли под сворачивание. На столе – лог и терминал. Три последние команды вынесены на бумагу: «ls -a policies», «cat /proc/…/maps», «lsof | grep 17c». «grep 17c» подчёркнут – напоминание себе самому: «семнадцать-цэ» – не название режима и не маркетинговая «расширенная», а адрес, придуманный кем-то и почему-то оставленный вне оглавления.
Шаги в коридоре отозвались по полу, как в барабане. Время поджимало. Ещё один тройной прогон – утренний, дневной, ночной – закрепил последовательность. Во всех трёх реплеях при коротком выпадении и стабилизации канала ранний «merge» опережал оформление второго эха, окно предиктора держалось на «2», сухое «policy loaded: 17c» сидело в диагностике отдельно от человеческих имён.
Подготовка к аудиту вырисовывалась чётко. Вместо абстракций – два скриншота, две стрелки, одна подпись: «отклонение от утверждённого маршрута». Без прилагательных. Рядом – лаконичная выжимка: «порог 0.61», «window=2», «early_ok=true», отсутствие упоминаний «17c» в перечне, повторяемость на реплеях. Любая попытка «объяснить словами» будет слабее цифр.
Перед уходом взгляд зацепился за мысль, давно ждавшую: проверить не только файлы и процессы, но и хвосты на уровне системного аудита. Привычек у «лейтенанта аудитd» достаточно, чтобы оставлять следы, даже когда файловая система дышит ровно. Доступ – только чтение, но и этого хватит.
Лаконичная команда отдала список свежих событий. Большинство – рутина: открытия, закрытия, буферизация. Меж ними вспыхнуло нужное: create/unlink пары у компонента из стека АРЕС, идущие «два шага»: создание временного «.snap», тут же переименование в «snapshot», сразу после – удаление. Ничего необычного для кэша – кроме одного числа в строке. В колонке «event time» у пары для «17c.snapshot» стояло «23:44:59.998». В этот момент системные часы на хосте показывали «23:44:03». Разбег почти минута. НТP-свёрка по-прежнему давала расхождение в пределах пары миллисекунд. Меньше объяснений – больше факта. Снимок экрана. Короткая запись в блокноте: «audit: create/unlink 17c.snapshot t+~57s к локальному; сверить на смежном узле».
Стул отозвался знакомым щелчком пружины, когда спина выпрямилась. Ни одна из цифр по отдельности не кричала. Вместе они складывались в простую картину: политика слияния, которой нет в перечне, живёт в пакете; при умеренных помехах предиктор заранее допускает объединение, действуя на окне «два»; кэшные следы появляются и исчезают, как вспышка, после чего от них остаётся лишь запись в таблице дескрипторов и след в аудит-логе; местами метки времени ведут себя так, будто кто-то двигал такт – не на сутки вперёд, но на доли и целые секунды – в нужную сторону.
Марков выключил реплей, аккуратно демонтировал внешний диск. На нём уже лежало всё необходимое: скриншоты, выгрузки таблиц, фрагменты логов и короткая выжимка «для Петрова»: не тезисы, а координаты. В финале – три строки как план: сравнить аудит на соседнем узле, пробить права на «bundle», зафиксировать на камеру вспышку «exp» при «-a». Никаких парадов – только рабочие шаги.
Рука потянулась к двери – и тут край глаза поймал движение на экране. Не уведомление, не стандартный поп-ап. В командной строке, куда уже вернулся курсор, кратко мигнул вывод невыполненной до конца ранее команды: «find /var/cache/ares -maxdepth 2 -name '*17c*' -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n'». Курсор давно стоял в начале; команда не запускалась. А строка результата – одинокая, как метка на пустом горизонте, – успела высветиться и исчезнуть. В памяти осталось три вещи: слэш, «shadow» в имени и время «23:45:59». Ровно на минуту вперёд относительно системного. Не скриншот – рефлекс поздно. Но рефлекса хватило на другое: повтор команды. Вывод – пуст. Ещё повтор – пуст. Третья попытка – ноль. Система снова стала правильной.
Такие штуки не носят на совещания в прозрачном файле. Их заносят в тот самый внутренний список, где каждое наблюдение отмечено сухо и без восклицательных знаков. Там уже лежали «окно=2», «early_ok», «policy loaded: 17c», «mtime +31 мс», дескриптор «+7 с», вспышки «exp» и «ограничен доступ». Теперь добавилась ещё одна строка: «след ‘shadow’ с датой вперёд на ~60 с, пойманный на долю секунды».
Дверь закрылась за спиной мягко. Коридор встретил тёплым воздухом и давно выдохшимся запахом чьего-то сладкого из столовой. Вентиляция изменила тон, как это бывает к полуночи, – будто напомнила, что у каждого режима есть своё время. В серверной остались ровные лампы, кромка холодного стола и та самая тишина, порезанная на частоты. Там же осталась цифра, которая вела себя так, будто опережала собственную систему на один короткий такт. И в следующий раз, когда кто-то произнесёт «всё штатно», это «штатно» получит ещё одну крошечную оговорку, которую бумага не любит, а лог – помнит.
Глава 5
Командный пункт держал тёплый воздух, перегретый лампами и телами. Пыль на плафонах едва заметно отдавалась сладким привкусом, когда воздух шёл через решётки. В стальной раме окна – мутный свет: низкая облачность, мелкий дождь шёл боком. Пульты – как краткая память завода: гладкие, с тонкими ключами, экранчики по два-три на место. Пол под ногами пружинил незначительно – как будто здание прислушивалось к голосам.
Марков разложил перед собой три слоя: «красивая» панель общей ситуации, диагностический поток с цифрами помельче и окно с логом в текстовом виде. Клавиатура, которую он привёз, щёлкала не громко, но иначе, чем штатная – рукам было легче. Слева – гарнитура. Провод, пережатый пластиковой скобой, тёрся о край стола и давал слабую вибрацию в палец, когда им его случайно задевали. Этот ритм помогал держаться в скорости событий.
– По листу, – коротко сказал Петров. – Маршрут простой: взлёт, выход в коридор, один манёвр, возврат. РЭБ – минимальный профиль. «АРЕС» – расширенная помощь. Никаких сюрпризов.
Громов, уже в кабине, молча коснулся боком большого пальца микрофона и отозвался едва слышно:
– Слышу.
Проверка шла без ритуальности. Номера каналов, питание, дублирование, временные метки. На экране синхронизация дала зелёное. Разница с опорными метками – единицы миллисекунд. В «диагностике» подсистема предикции отмечалась как «готова, тишина». «Тишина» – нужное слово: там, где речь шла о прогнозе, лучше, когда его нет.
Техник на ближнем месте подвинул конспективную папку ближе к краю. Штампы, подписи, пустые клеточки для времени и отметок. Лист с оглавлением выглядел как всё, что уважает бумагу: аккуратный кегль, названия без жаргона. На верхнем поле типографская линия, ниже – квадраты под «галочки». Петров провёл короткую линию «начало сеанса» и отодвинул ручку.
Звук взлёта на пульте был всегда другой, чем вживую: чуть «пластиковый», собранный фильтрами и компрессией. Но в нём есть вещь, которая не искажается – момент, когда нос отрывается, а цифры начинают жить плотнее. На «красивом» экране зелёная иконка сместилась и пошла по линии. На диагностике – появилось дыхание скорости, нарастало ровно. Канал связи вёл себя честно – без провалов, только тонкий шорох в динамике напоминал, что воздух сегодня хочет сказать своё.
Марков держал взгляд на средней панели, где писались дельты времени. При включении «АРЕСа» дельта «управление–ответ» упала до двузначных миллисекунд. Пакеты приходили аккуратно, без дрожи.
– Выхожу на курс, – сказал Громов. Голос ровный, без усилий.
– Принял, – Петров кивнул, хотя в гарнитуру это было не нужно. Жест – привычка в комнате, где люди делают вместе.
Коридор на схеме был выверен, как школьная доска с линейкой. В границах – безопасные поля, которые «помощник» должен уважать. Марков переключил одну панель в режим «сырые». Там интересней: не подписи «скорость» и «угол», а секунды с дробями, которые иногда говорят правду ярче любых графиков.
Первые минуты – ровные, почти скучные. «АРЕС» удерживал перехват, подмешивая корекции так, что их и не слышно. Стабилизация по курсу – эталонная. Временные метки шли, как от разметчика. Он занёс в карманный блокнот два числа: медиана задержки «управление–ответ» – 12–14 мс; джиттер – в пределах пары миллисекунд. Для «живой» системы очень ровно.