Куда могло исчезнуть дисковое пространство? (1/5)
В этом небольшом цикле статей будет рассмотрено несколько кейсов, происходивших в реальных инфраструктурах, с описанием их решения.
Тестовая инфраструктура, на которой будем воспроизводить проблемы состоит из виртуалки с Ubuntu 20.04, с установленным стеком LAMP и корневым разделом на 5гигов (потому что больше не понадобится).
Начало каждого инцидента одинаково — мониторинг показывает, что наш веб-сервер не отвечает или внезапно увеличился уровень ошибок.
После оповещения от мониторинга ваша задача первым делом подключиться к серверу по SSH и запустить несколько утилит, для проверки общего состояния сервера: uptime, free, ss, ps и т.д.
Удалённые файлы
Давайте взглянем на первый сценарий. Стандартная проверка для таких случаев:
Чтобы уменьшить количество выводимых данных (например чтобы убрать из вывода tmpfs или squashfs), применим опцию "-x" к df:
В любом случае здесь очевидно, что дисковое пространство полностью исчерпано. Давайте найдём виновного:
У du тоже есть полезная опция "-x", здесь она выполняет задачу исключения из вывода точек монтирования других файловых систем.
Общее пространство, занимаемое корневым разделом, составляет 4,2Gb. То есть у нас должно быть примерно 700Mb свободного места (15% от общего объема). Давайте перепроверим:
Всё так же. Значения в выводах df и du не совпадают:
Выглядит довольно запутанно. Объем свободного дискового пространства, сообщаемый df, меньше суммы размеров всех файлов. Чем же тогда занято всё место?
Оно занято удалёнными файлами.
В выводе команды lsof выше мы можем видеть, что логи сервера Apache хоть и были удалены, но всё еще заняты процессом (М.Керриск - Linux API исчерпывающее руководство, стр. 379). Особенно часто это происходит из-за неправильно настроенного logrotate. Иногда logrotate удаляет журнал, не сообщая процессу, что ему необходимо закрыть файловый дескриптор. Мы можем получить доступ к данным через /proc/$PID/fd/$DESCRIPTOR_NUMBER:
Поскольку данные всё еще там, мы можем их восстановить (кстати еще это может оказаться полезным если вы случайно удалите файлы mysql, тут только главное чтоб сервис был запущен).
Есть пара возможных вариантов решения:
Вы можете перезапустить сервис, и дескриптор будет освобождён.
Или усечь длину файла до нуля, с помощью truncate:
Проверяем:
Отлично. Проблема решена.
Заключение
Процесс (в нашем случае Apache) вызвал системный вызов open, и получил дескриптор файла для работы с ним. Поскольку это файл журнала, он не был закрыт сразу.
Тем временем какой-то другой процесс (или тот же самый) пытался удалить файл (вызвал системный вызов unlink).
Это уменьшило счетчик ссылок в индексном дескрипторе до нуля, и файл исчез из дерева файлов.
Однако ядро не смогло освободить блоки, поскольку всё еще существовал открытый дескриптор, ссылающийся на индексный дескриптор.
Как итог у нас есть два возможных решения такой проблемы — обрезать файл или закрыть дескриптор.
P.S. Извиняюсь за картинки. Так и не понял, как здесь можно вставлять stdout без потери форматирования. Если кто-то в комментах подскажет - будет супер.
Ничего необычного, просто Гэндальф собирает Gentoo на Макбуке
ИТ-отрасль: кадровый голод
Читаешь иногда заголовки при поиске работы...
В российских компаниях острый кадровый голод. Срочно требуются ИТ-специалисты даже без опыта. https://www.cnews.ru/news/top/2023-03-16_v_rossijskih_kompan...
В России установился дефицит айтишников. Как его восполнить. https://rg.ru/2023/08/17/vziat-v-razrabotku.html
По оценкам властей, российской экономике не хватает до 1 млн айтишников. Преодолеть кадровый разрыв в ИТ-сфере призван комплекс мер нацпроекта «Цифровая экономика» https://www.rbc.ru/economics/28/07/2022/62e12c929a794747597d...
И тут на глаза попался на работе экземпляр старого журнала "Системный администратор"...
Журнал "Системный администратор" №12(133) декабрь 2013
и понимаешь, что прошло 10 лет, а проблема осталась...
Когда у сетевого инженера есть немного свободного времени
Ответ на пост «Когда пользователь говорит, что уже перезагружался 3 раза, но всё равно ничего не работает»
Ссылка на оригинальный пост: Когда пользователь говорит, что уже перезагружался 3 раза, но всё равно ничего не работает
То что описано в оригинальном посте - сплошь и рядом. Один случай запомнился особенно:
Году в 2006 работал сисадмином в одной конторе.
Бухгалтерия попросила добавить нестандартный отчет в 1с 7.7. Ну ладно, я не программист, но недельку почитал документацию и сделал. Пришло время перенести отчет из тестовой базы в рабочую. Сохранение конфигурации происходит в монопольном режиме. Это значит, что я один в конфигураторе, а все остальные пользователи базу закрыли.
Иду в бухгалтерию и прошу закрыть базу на 3 минуты. Объясняю, что без этого не смогу сохранить конфигурацию. Получаю подтверждение и иду нажимать на кнопку "Сохранить". Получаю сообщение о том, что не нахожусь в монопольном режиме.
Возвращаюсь в бухгалтерию:
- Точно все закрыли?
- ДААААА!
Чудес не бывает. Подхожу к каждому компьютеру и проверяю запущенные приложения.
Последняя на очереди главбух. У неё очень честные глаза и какая-то бумажная ведомость, закрывающая нижнюю часть монитора. Отодвигаю ведомость, вижу свернутую 1с, слышу возглас:
- Ух какой глазастый!
После закрытия успешно сохраняю конфигурацию.
Главбуху так и не смог объяснить, что это была не прихоть, а техническая необходимость.
Ох уж эти it собеседования: ситуация №2
Иногда, собеседования проходят слишком хорошо и это начинает вызывать подозрения. Как будто к вам в дверь постучали улыбающиеся люди и предложили поучаствовать в их восхитительной финансовой пирамиде с названием "ну точно без подвоха".
На этот раз мне позвонили из одной компании и вежливо сообщило что я полностью подхожу на их вновь открывшуюся вакансию. Рекрутер сразу начала с козырей - ДМС, отпуска, нормированный рабочий день, 13я зарплата, оплата выше средней по рынку, лояльное начальство, премии и другие блага цивилизации доступные свободному человеку. Да даже бесплатное печенье и кофе в офисе!
Настал момент идти в это волшебное место, отмеченное крестиком на карте.
На самом собеседовании руководитель отдела с уважением кивнул на мой стек технологий и заверил "ну, если вы чего-то не знаете, то мы вас с радостью научим!"
Вот я уже представил себя в тёплом офисе, по удалёнке настраивающим серверное оборудование и помогающим потерявшим курсор пользователям...
Что же меня заставило отказаться? Прозвучавшее в самом конце предложение застраховать мою жизнь перед постоянными командировками, о которых не было ни слова в вакансии "ой, ну вероятнее всего вас там не убьют, но застраховаться не помешало бы".
p.s. Интересно, что должен держать в руке сисадмин, что бы попасть в it Вальхаллу? Микротик или простого пачкорда хватило бы?