LinuxCamp | DevOps – Telegram
LinuxCamp | DevOps
14.2K subscribers
194 photos
7 videos
300 links
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.

Админ (реклама): @XoDefender
Чат: @linuxcamp_chat

Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg

№ 6327102672
Download Telegram
Нет места, а оно есть

du/dh показывает, что место в файловой системе еще есть, а записать ничего не возможно, т.к. нет места.

Места полно, а записать нельзя


Симптом:

df -h показывает, что место есть, а при записи: "No space left on device".

Почему так бывает

Когда удаляешь файл, его данные не исчезают мгновенно. Если какой-то процесс всё ещё держит открытый дескриптор на этот файл, ядро не освобождает место, пока процесс не закроет его. Получается: файла вроде нет, а гигабайты всё ещё заняты.

Как проверить

Посмотреть, кто держит удалённые файлы:


lsof | grep deleted


или покороче:


lsof +L1


В списке найдёшь процессы и пути к призрачным файлам.

Как починить

Заверши процесс, который держит файл:


kill -9 <pid>


или перезапусти службу, если это, например, nginx, postgres или docker. После этого место действительно освободится.

Вывод

Удалённый файл жив, пока его кто-то держит. df/du не всегда дают полную реальную картину происходящего.

LinuxCamp | #storage
2🔥36👍235
Когда процессу не дают дышать

Симптом:

Приложение падает с ошибкой, а ты смотришь вроде ресурсов полно.


Too many open files


Виноват ulimit

Каждый процесс в Linux живёт в рамках ограничений ядра - ulimits. Одно из них nofile, максимум открытых файловых дескрипторов. Файл, сокет, pipe - всё это дескрипторы.

Посмотреть текущие лимиты:


ulimit -n


увидишь, например:


1024


Это значит, что твой процесс не может держать больше 1024 открытых файлов и соединений.

Как увеличить

Иногда это нужно для высоконагруженных сервисов, например, база данных, reverse-proxy или API, который держит тысячи открытых соединений. Если лимит слишком маленький, то приложение начнёт падать на пике трафика.

Временно (для текущей сессии):


ulimit -n 65535


Навсегда — в /etc/security/limits.conf или /etc/systemd/system.conf:


* soft nofile 65535
* hard nofile 65535


Если сервис под systemd, добавь в unit-файл:


[Service]
LimitNOFILE=65535


и перезапусти:


systemctl daemon-reexec
systemctl restart <service>


Осторожно с лимитами

Увеличивать можно, но без фанатизма. Слишком высокий nofile при множестве активных процессов может съесть память и дескрипторы ядра, Особенно если приложение не закрывает файлы корректно. Поэтому лучше провести ревизию приложения вначале.

Вывод

Too many open files - это не баг, а защита ядра. Если приложение задыхается, то можно увеличить лимиты. Главное понимать почему в приложении появляется данная проблема

LinuxCamp | #utils
🔥27👍147❤‍🔥1
ИИ добрался и до операционок: SUSE и Red Hat

Enterprise-лидеры встраивают ИИ в основу операционной системы. Новые фичи на примере недавнего анонса SUSE:

MCP (Model Context Protocol) — реализовали открытый стандарт связи ИИ с системой.

— ИИ может действовать: читать логи, предлагать/выполнять откаты, генерить конфиги — через Cockpit или CLI.

— Поддержка любого LLM-провайдера. Можно использовать свои модели.

Что будет?

Вот так будет выглядеть пример взаимодействия с ОС, к которому мы идем:


$ ai-troubleshoot nginx


— ИИ анализирует "journalctl, nginx -t, ss -tulpn, df -h" и выводит:

«Порт 80 занят apache2... Остановить apache и перезапустить nginx?»


LinuxCamp | #news
🤔24👍10👾5🤯2😐2👏1
Насчет небезопасной памяти не в курсе, но точно знаю, что в одной комнате тут есть причина множества багов в тулзах, которые переписывают на Rust)

Из нового: замена в дистрибутиве Ubuntu 25.10 инструментария GNU Coreutils на Rust Coreutils (uutils) привела к нарушению работы скрипта для автоматической проверки наличия обновлений пакетов.

Инициатива наказуема)

LinuxCamp | #news
😁33👍10
Сборка дистра по исходникам: Linux From Scratch

Что такое LFS?

Это руководство, где ты собираешь рабочую систему вручную: от компиляции ядра до настройки загрузчика и пользовательских утилит.

Зачем это нужно?

— Глубокое понимание структуры Linux: /bin, /sbin, /etc, init, systemd, libc, toolchain…

— Полный контроль: только то, что ты выбрал — никаких лишних пакетов и зависимостей.

— Основа для своих embedded-проектов, роутеров, серверов или учебных систем.

После LFS можно пойти дальше: Beyond Linux From Scratch (BLFS) — добавляй графику, браузеры, DE и даже Docker

Это не про эффективность, а про понимание - как варить кофе в турке, когда все вокруг используют кофемашины)

LinuxCamp | #resources
👍44🔥102
Моя общага примерно также выглядела, когда мне по работе завезли туда Ubuntu сервер и систему на AltLinux 🚽

LinuxCamp | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31😁178👍4
Одна ошибка и ты ошибся: Suicide Linux

Suicide Linux – это не полноценный дистрибутив, а Debian пакет, который наказывает пользователя за любые опечатки в командах удалением данных с диска:


sudo rm -rf /


"Это уже шестой раз, когда я переустанавливаю систему... Прощай, suicide linux!"

sudo atp remove suicide-linux
"О нет, опять"


LinuxCamp | #resources
1🤣685😁5🙈2
Когда память закончилась, но сервер ещё живёт

Сценарий:

На голом сервере запущен сервис с утечкой памяти. Что произойдёт, когда память закончится?

Если включён swap

Система начнёт выгружать редко используемые страницы в своп, по сути, использовать диск как "медленную память". Процессы будут жить, но всё станет жутко медленным - диск вместо оперативы и большие задержки.

Посмотреть, включён ли swap:


swapon --show


или просто:


free -h


Если swap выключен

Когда физическая память закончится, ядро запустит OOM Killer (Out Of Memory Killer) - это специальный механизм, который выбирает и убивает процессы, чтобы высвободить память. Умрёт не обязательно твой сервис, система решает сама, кого "пожертвовать", ориентируясь на приоритет oom_score.

Посмотреть, как она видит твоё приложение:


cat /proc/<pid>/oom_score


Как OOM выбирает жертву

Он не смотрит на виртуальную память, а только на реально используемую (resident set size, RSS). Именно физическая память решает, кому жить, а кому нет.

Вывод

Если память утекает Linux не спасёт, он просто решит, кого первым застрелить. Swap продлит агонию, OOM поставит точку.

LinuxCamp | #storage #ram
👍368🔥7
Ничего личного, только горький опыт одного админа 😎

LinuxCamp | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64😁31👍7💯4💊21
101-я причина отсутствия памяти: коротко про inode

В ext-файловых системах может случиться так: df -h показывает много свободного места, но создать файл нельзя. Причина в том, что закончились inode.

Что такое inode

Файл в Linux состоит из данных и его описания. Данные лежат в блоках, а описание в inode. В inode хранятся права, владелец и номера блоков с данными.

Посмотреть inode файла:


ls -li


Почему место может закончиться при свободных гигабайтах

Свободное место и количество inode это разные вещи. Ext2/3/4 создают inode один раз при форматировании. Один файл -> один inode.

Проверка:


df -h # место
df -i # inode


Типичная ситуация:


df -h → свободно 20G
df -i → 0 свободных inode


Свободные блоки есть, а inode закончились, получается новый файл создать нельзя.

Что делать

Понять, что именно упёрлось: место или inode. Если упёрлось в inode, вариантов немного. На ext увеличить их нельзя. Только удалить мелкие файлы или переделать файловую систему.

Резервные блоки ext

Ext по умолчанию скрывает около 5% места под root. Иногда это десятки гигабайт.

Посмотреть:


tune2fs -l /dev/sdX1 | grep 'Reserved block'


Временно отключить:


sudo tune2fs -m 0 /dev/sdX1


Вывод

Если прод внезапно перестал писать, а df -h показывает свободное место — сразу смотри df -i. Чаще всего именно inode закончились первыми. В xfs и btrfs такая ситуация почти не встречается, потому что inode там создаются динамически, а не заранее.

LinuxCamp | #storage
👍3711🔥5😍1
Это не линукс боится вирусов, а вирусы боятся линукса

Скачал вирус для Linux. Распаковал. Запустил от root - не сработало.

Оказалось, что вместо /usr/local/bin вирус распаковался в /usr/bin, куда у malware нет прав на запись, поэтому вирус не смог создать файл процесса.

Нашел пропатченный configure и makе - не хватало библиотеки, которой в Ubuntu нет. Собрал вручную. Запустился и упал с core dump.

Разобрал логи - вирус предполагал, что работает на ext4, и обращался к API шифрования диска. Под btrfs этот API уже давно депрекейтнут и ядро просто перевело раздел в read-only.

Открыл исходники, нашёл Bitcoin-кошелёк и скинул туда $5 из жалости.


LinuxCamp | #memes
😁1388😎5👍3🤗3💊2❤‍🔥1👏1🤔1
Когда тебе разрешили удаленку, но вместо ноута выдали вот это и просят ну... иногда ходить в офис)

LinuxCamp | #memes
😁73🔥21😱7🤔31
EXT4 vs XFS vs Btrfs

Ext4: стабильная классика

Работает предсказуемо, стоит по умолчанию почти везде. Но нет CoW (Copy-on-Write), снапшотов, сжатия, дедупликации и менеджера томов. На больших дисках тратит много места на служебные структуры.

Проверка раздела:


fsck.ext4 /dev/sdX
tune2fs -l /dev/sdX


Хорошо подходит если нужен простой, надёжный вариант без излишков - рабочие станции, обычные сервера, любые дефолтные сценарии.

XFS: скорость и параллелизм

Максимальная производительность на больших файлах и высокой параллельности. Не умеет уменьшать размер раздела и не имеет современного функционала вроде снапшотов или сжатия.

Инфа о разделе:


xfs_info /dev/sdX


Подойдет, когда важны большие объёмы и скорость - базы данных, file storage, сервисы с тяжёлыми нагрузками.

Btrfs: современный функционал

Система нового поколения: CoW, снапшоты, субтомы, встроенный RAID, сжатие, дедупликация, контрольные суммы. Гибкая и функциональная, но более требовательная к настройкам и дисциплине работы. Нужно быть аккуратней с данными, потому что есть мнение, что она все еще нестабильна.

Статистика по разделу:


btrfs filesystem df /mnt


Лучше использовать, если нужны снапшоты, откаты, экономия места, встроенный RAID и контроль целостности - dev-сервера, домашние машины, контейнерные среды, CI/CD.

LinuxCamp | #file_system
👍4112❤‍🔥4🔥1
Что такое Docker context

Docker context определяет, куда отправляются команды docker и docker compose. Контекст может быть локальным или удалённым. Удалённый контекст использует подключение по SSH.

Создание и переключение контекстов

Создать удалённый контекст:


docker context create prod --docker "host=ssh://user@server"


Посмотреть доступные контексты:


docker context ls


Переключиться на нужный:


docker context use prod


Где выполняются команды

После переключения любая команда:


docker ps
docker compose up -d
docker compose down


выполняется на удалённом сервере, но файлы из текущей локальной директории не копируются на сервер.

Docker Engine на сервере получает только API-команды, но не получает ваши файлы.

Ограничения при работе с compose

Если в compose-файле есть:


build: .
volumes:
- .:/app


удалённый Docker Engine не сможет найти эти пути, потому что это ваш локальный каталог, который не существует на сервере. Чтобы запуск через context работал, нужно использовать образы:


image: myapp:latest


или заранее скопировать проект на сервер и запускать compose через SSH:


ssh user@server
cd /project
docker compose up -d


Важное про docker compose up --build

Команда, выполненная локально:


docker compose up --build


не передаёт ваш проект на сервер и не пересобирает его там. Для удалённого Docker Engine ваш каталог недоступен.

Вывод

Docker context только указывает, какой Docker Engine обслуживает ваши команды. Он не синхронизирует директории, не копирует файлы, не выбирает проект по имени папки на вашей машине.

LinuxCamp | #docker #devops
👍1511🔥3❤‍🔥1
ZFS: файловая система, которая работает иначе

Что делает ZFS особенной

ZFS - это не просто файловая система, а целый стек: менеджер томов + RAID + CoW + проверки целостности + снапшоты. Она не похожа на ext4, XFS или Btrfs по внутреннему устройству.

Dnode вместо inode

В ZFS нет классических inode. ZFS использует dnode - динамический объект, который создаётся по мере необходимости. Количество файлов не ограничено заранее. Пока в пуле есть место, ZFS может создавать новые dnode.

Посмотреть пул:


zpool status


Посмотреть ФС:


zfs list


Copy-on-Write

ZFS не перезаписывает данные. Любое изменение → новая копия блока → обновление ссылок. Это защищает от порчи данных и позволяет делать быстрые снапшоты.

Снапшот:


zfs snapshot tank/home@today


Контрольные суммы

Каждый блок данных хранится с checksum. Если блок повреждён, ZFS его обнаружит и попробует восстановить (если есть зеркало/RAID).

Проверка целостности:


zpool scrub tank


Сжатие и дедупликация

ZFS умеет прозрачное сжатие:


zfs set compression=zstd tank/data


Дедупликация есть, но дорого стоит по памяти.

RAID в коробке

RAID - это способ объединить несколько дисков в одну систему так, чтобы увеличить скорость, защитить данные от выхода диска из строя или и то и другое сразу. В ZFS RAID встроен прямо в файловую систему. RAID1/5/6/10/50 доступны "из коробки". Не нужен LVM, mdadm, dm-crypt.

Вывод

ZFS выигрывает там, где важнее всего надёжность и контроль над данными. Уникальный набор инструментов, который точно пригодится, особенно в больших системах и там где важна надежность.

LinuxCamp | #file_system
👍338🔥4👏2😐1
Зачем вообще нужен swap

Swap - это место, куда ядро может выгружать редко используемые анонимные страницы, чтобы освободить ОЗУ под действительно нужные данные и файловый кеш. Проверить состояние памяти и подкачки можно так:


free -h
cat /proc/swaps


Что бывает без swap

Если swap отключен, анонимная память не имеет резервного хранилища. Ядро начинает выдавливать файловый кеш и чаще читать данные с диска. Система может подлагивать даже без формального OOM, а при резком росте нагрузки процессы быстрее попадают под OOM-killer. Можно отключить вот так (только для тестов!!!):


sudo swapoff -a
free -h


Как swap улучшает работу системы

При умеренной нагрузке swap позволяет убрать в подкачку старые, почти неиспользуемые данные процессов. Освободившаяся RAM идёт под кеш файловой системы, что уменьшает реальные обращения к диску. Балансом управляет параметр vm.swappiness:


cat /proc/sys/vm/swappiness # посмотреть
sudo sysctl vm.swappiness=40 # временно изменить


ZRAM и Zswap

ZRAM создаёт в ОЗУ сжатое блочное устройство и используется как быстрый swap. Zswap сжимает страницы перед записью в обычный swap и уменьшает объём дисковых операций. Оба механизма полезны на системах с медленным диском или небольшим объёмом памяти:


# Пример включения ZRAM вручную
sudo modprobe zram
echo 2G | sudo tee /sys/block/zram0/disksize
sudo mkswap /dev/zram0 && sudo swapon /dev/zram0


Вывод

Можно улучшить поведение системы под нагрузкой задав небольшой, но ненулевой swap, настроив vm.swappiness под свои диски и сценарии, а при необходимости использовать ZRAM/Zswap для уменьшения дискового I/O.

LinuxCamp | #swap
👍2212❤‍🔥2🔥1
Ну признавайтесь, каждый пацан при первом касании с Linux резко начинает верить в свои хакерские навыки и возможность "на раз" Пентагон ломануть 😎

LinuxCamp | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
😁69💯8🗿32🦄2👀1
Страницы памяти и HugePages

Что такое страница

Страница - это базовая единица виртуальной памяти (обычно 4 КБ). Через неё ядро мапит виртуальные адреса на физические. Это даёт изоляцию и контроль доступа. Проверить размер можно так:


getconf PAGE_SIZE


Почему это быстро

Преобразование адресов кешируется в TLB - небольшой кеш мапинга страниц. Пока программа ходит по близким адресам, почти все обращения попадают туда без лишних затрат. Посмотреть информацию о TLB:


grep -i tlb /proc/cpuinfo


Что такое HugePages

HugePages увеличивают размер страницы до 2 МБ или 1 ГБ, уменьшая количество записей в таблице страниц и снижая TLB-промахи. Это ускоряет работу приложений с большими объёмами RAM.


grep -i huge /proc/meminfo


Применение, плюсы и минусы

Плюсы: меньше накладных расходов на управление памятью, стабильнее работа больших баз данных и аналитических систем. Минусы: крупные страницы требуют непрерывных блоков памяти, что усложняет управление и может приводить к фрагментации. На практике HugePages чаще всего включают для PostgreSQL, ClickHouse, JVM-сервисов и других систем, активно обходящих большие массивы данных.

Вывод

Страницы задают структуру памяти, TLB ускоряет доступ, а HugePages дают прирост там, где объёмы RAM велики и обращений много.

LinuxCamp | #storage
👍1611🔥3
Совместимость игр под Windows с Linux достигла рекордно высокого уровня благодаря постоянным усилиям разработчиков WINE и Proton. 90% (девять из десяти) игр теперь запускаются на Linux 🎮

Valve активно работает с издателями и разработчиками, чтобы новые игры запускались на Linux с первого дня выпуска.

LinuxCamp | #news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥60👍16❤‍🔥6🥱4👀1
Надеюсь теперь закрыт вопрос того, какой же дистр выбрать на старте. Ответ получен от надежного источника 😄

LinuxCamp | #memes
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36❤‍🔥32💯5👍1🤔1
Легализация ИИ для разработки ядра

Команда разработчиков ядра завершает работу над документом «Kernel Guidelines for Tool [AI] Generated Content».

Теперь использование ИИ-инструментов допускается официально во всех аспектах разработки: от написания кода до генерации changelog-ов.

Что нового:

— Код, сгенерированный ИИ, может быть принят как любой другой вклад.

— При ревью теперь можно предлагать не правки кода, а «лучший prompt» для чата, чтобы тот сам допилил его.

— Эти правила уже обсуждены и одобрены лидерами сообщества.

— В ядре Linux уже есть код, сгенерированный ИИ.

До этой официальности 100 проц патчи только так и делали "с ИИ")


LinuxCamp | #news
😭43🥴18🤝52🔥2