Разрежённые файлы (sparse files) и экономия диска!
В Linux файл может иметь логический размер, превышающий фактически занятое место на диске. Незаписанные области представлены как дыры (holes) и физически места не занимают.
Создание файла большого размера без записи данных:
Файл имеет логический размер 10G, но почти не занимает место на диске.
Проверка:
Создание sparse-файла через
Смещение файлового офсета устанавливается на 10G без записи данных — создаётся файл с дырой.
Частичная запись данных:
Физически будет занят только небольшой участок около 1G, остальное останется дырами.
Просмотр расположения данных:
Показывает, какие диапазоны файла реально занимают блоки на диске (для классических FS вроде ext4/xfs).
Освобождение места внутри существующего файла, автоматическое преобразование участков, заполненных нулями, в дыры:
Точечное выбивание физических блоков с сохранением логического размера:
Корректное копирование sparse-файлов:
Для архивов:
Важно: поддержка sparse-файлов и hole punching зависит от файловой системы и её конфигурации (ext4, xfs — поддерживают).
🔥 Sparse-файлы — базовый механизм экономии диска для образов, дампов и крупных артефактов.
➡️ DevOps Ready | #практика
В Linux файл может иметь логический размер, превышающий фактически занятое место на диске. Незаписанные области представлены как дыры (holes) и физически места не занимают.
Создание файла большого размера без записи данных:
truncate -s 10G bigfile.img
Файл имеет логический размер 10G, но почти не занимает место на диске.
Проверка:
ls -lh bigfile.img
du -h bigfile.img
ls показывает логический размер файла, du — реально занятое дисковое пространство.Создание sparse-файла через
dd:dd if=/dev/zero of=bigfile.img bs=1 count=0 seek=10G
Смещение файлового офсета устанавливается на 10G без записи данных — создаётся файл с дырой.
Частичная запись данных:
printf 'DATA' | dd of=bigfile.img bs=1 seek=1G conv=notrunc
Физически будет занят только небольшой участок около 1G, остальное останется дырами.
Просмотр расположения данных:
filefrag -v bigfile.img
Показывает, какие диапазоны файла реально занимают блоки на диске (для классических FS вроде ext4/xfs).
Освобождение места внутри существующего файла, автоматическое преобразование участков, заполненных нулями, в дыры:
fallocate -d bigfile.img
Точечное выбивание физических блоков с сохранением логического размера:
fallocate --punch-hole --offset 1G --length 500M --keep-size bigfile.img
Корректное копирование sparse-файлов:
cp --sparse=always src.img dst.img
Для архивов:
tar --sparse -cf backup.tar bigfile.img
Важно: поддержка sparse-файлов и hole punching зависит от файловой системы и её конфигурации (ext4, xfs — поддерживают).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥6🤝1
В этом посте собраны методы управления Environment Variables: от простого вывода списка до маскирования данных и передачи значений между этапами сборки. Работают в GitLab CI, GitHub Actions и локальных Docker-контейнерах.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥7👍5🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Особенно кайф для тех, кто работает в Linux/DevOps/CI среде и хочет разбираться, а не наугад копипастить из StackOverflow.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥14🤝9
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь собран большой русскоязычный список полезного софта: консольные утилиты, системные инструменты, графические приложения, окружения рабочего стола, а также ссылки на форумы и полезные ресурсы по Linux.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤝9❤7🔥1
Как убрать зависший процесс, дав ему шанс завершиться нормально?
Иногда процесс нужно убрать, но
Сначала отправь корректный сигнал завершения:
Подожди пару секунд (значение условное, часто этого достаточно):
Если не вышел, завершаем принудительно:
🔥
➡️ DevOps Ready | #совет
Иногда процесс нужно убрать, но
SIGKILL сразу не всегда правильно, можно потерять буферы, получить битые временные файлы.Сначала отправь корректный сигнал завершения:
kill -TERM 1234
SIGTERM даёт процессу шанс закрыть файлы, сохранить состояние и выйти.Подожди пару секунд (значение условное, часто этого достаточно):
sleep 2
Если не вышел, завершаем принудительно:
kill -KILL 1234 2>/dev/null || true
SIGKILL нельзя перехватить: ядро завершит процесс (за исключением редких случаев D-state из-за I/O).SIGTERM - позволяет процессу корректно освободить ресурсы и закрыть файловые дескрипторы; SIGKILL используй только как fallback, когда процесс игнорирует сигналы и завис.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤝10🔥8
Почему grep выводит данные с задержкой в пайпах?
Бывало
Это не баг. Большинство CLI-утилит буферизуют
Классический сценарий мониторинга логов без задержек:
Альтернатива специально для
Работает и с другими командами:
🔥 Если команда в пайпе не отвечает, почти всегда виновата буферизация.
➡️ DevOps Ready | #совет
Бывало
tail -f app.log | grep ERROR - лог пишется, а grep молчит и выводит всё сразу через секунды?Это не баг. Большинство CLI-утилит буферизуют
stdout, когда работают не в TTY, а в пайпе. Отключаем буферизацию:stdbuf -oL grep "ERROR" app.log
-oL — построчный вывод (line-buffered).Классический сценарий мониторинга логов без задержек:
tail -f app.log | stdbuf -oL grep "ERROR"
Альтернатива специально для
grep:tail -f app.log | grep --line-buffered "ERROR"
Работает и с другими командами:
journalctl -f | stdbuf -oL grep nginx
stdbuf -oL (или grep --line-buffered) возвращает вывод без переписывания пайпа.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥6🤝4
Например, tar czf создаёт архив с сжатием, а tar xzf позволяет быстро распаковать .tar.gz.
На картинке — команды tar, которые стоит держать под рукой: создание архивов, распаковка, просмотр содержимого и работа с gzip / bzip2 / xz.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥7👍5🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Этот ресурс объясняет основы и важные концепции через примеры и живые объяснения. Тут ты найдёшь темы по синтаксису, функциям, структурам данных, алгоритмам и архитектуре. Полезно как новичкам, так и тем, кто хочет укрепить фундамент, понять внутренние механизмы и перестать путаться в деталях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍9❤4🤝4
В этом посте собраны ключевые параметры и типы проверок (Liveness, Readiness, Startup), которые помогут кластеру понять, когда ваш контейнер готов принимать трафик, а когда его пора перезагрузить.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥10👍5🤝1
NAT позволяет устройствам из приватной сети выходить в интернет через один публичный IP, подменяя IP и порты на роутере.
На картинке — как меняется пакет до и после NAT, как работает NAT-таблица и почему несколько устройств могут использовать один public IP.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥10🤝7❤1
Работа с символическими и жёсткими ссылками!
Ссылки используются для повторного доступа к файлам и каталогам без дублирования данных. Применяются в пакетных менеджерах, конфигурациях, деплое и файловых структурах.
Создание жёсткой ссылки:
Жёсткая ссылка указывает на тот же inode, что и исходный файл. Удаление одного имени не удаляет данные, пока существует хотя бы одна ссылка.
Ограничения жёстких ссылок: они практически всегда применимы только к файлам; на каталоги, как правило, запрещены на уровне файловой системы.
Создание символической ссылки:
Симлинк — это отдельный файл, содержащий путь к целевому объекту (файлу или каталогу).
Просмотр ссылок и inode:
Одинаковый inode — жёсткие ссылки на один файл. Симлинк имеет собственный inode.
Проверка, куда указывает символическая ссылка:
Перезапись существующей символической ссылки:
Удаление ссылки:
Для жёсткой ссылки это удаление имени, а не данных.
🔥 Симлинки зависят от пути и могут «сломаться»; жёсткие ссылки устойчивы, но ограничены одной файловой системой и практически не применяются для каталогов.
➡️ DevOps Ready | #практика
Ссылки используются для повторного доступа к файлам и каталогам без дублирования данных. Применяются в пакетных менеджерах, конфигурациях, деплое и файловых структурах.
Создание жёсткой ссылки:
ln original.txt hardlink.txt
Жёсткая ссылка указывает на тот же inode, что и исходный файл. Удаление одного имени не удаляет данные, пока существует хотя бы одна ссылка.
Ограничения жёстких ссылок: они практически всегда применимы только к файлам; на каталоги, как правило, запрещены на уровне файловой системы.
Создание символической ссылки:
ln -s /path/to/original symlink
Симлинк — это отдельный файл, содержащий путь к целевому объекту (файлу или каталогу).
Просмотр ссылок и inode:
ls -li
Одинаковый inode — жёсткие ссылки на один файл. Симлинк имеет собственный inode.
Проверка, куда указывает символическая ссылка:
readlink symlink
readlink -f symlink
-f разворачивает цепочку ссылок до реального пути.Перезапись существующей символической ссылки:
ln -sfn /new/path symlink
-s — symbolic-f — удаляет существующий путь назначения перед созданием-n — не разыменовывать симлинк на каталогУдаление ссылки:
rm symlink
rm hardlink.txt
Для жёсткой ссылки это удаление имени, а не данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍8🔥7
Например, HTTP/1.1 использует постоянные соединения, HTTP/2 умеет мультиплексировать запросы в одном TCP-канале, а HTTP/3 работает поверх QUIC и UDP.
На картинке — наглядная эволюция HTTP от первых версий до современных стандартов.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍6🤝6❤3