Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Mostrar más📈 Análisis del canal de Telegram Bash Days | Linux | DevOps
El canal Bash Days | Linux | DevOps (@bashdays) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 23 741 suscriptores, ocupando la posición 5 571 en la categoría Tecnologías y Aplicaciones y el puesto 27 919 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 23 741 suscriptores.
Según los últimos datos del 30 julio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de 7, y en las últimas 24 horas de 0, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 22.02%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 12.73% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 5 228 visualizaciones. En el primer día suele acumular 3 023 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 22.
- Intereses temáticos: El contenido se centra en temas clave como bashdays, linux, bash, docker, скрипт.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 31 julio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
Дорогой Тирекс, пишет тебе мальчик Рома, мне 40 лет и весь год я себя вёл очень хорошо, учился на одни пятерки, убирал гавно за котом и помогал маме. На новый год я хочу получить выделенный сервер с 32 гигабайтами оперативной памяти и жирненьким рейдом + S3 хранилище. На этом сервере я буду крутить свой «очень полезный» стартап и помогать людям. Сейчас у меня всё крутится на raspberry pi 3 и ресурсов не хватает. Буду рассчитывать на твою помощь и поддержку. Надеюсь ради меня ты пожертвуешь Мальдивами. Спасибо, до свидания, всего хорошего, адью!Отправляем это письмо (но со своей историей) через форму до 30 января 2026 и если твой проект действительно искренний и нужный, то в течение 10 дней ты получишь: - до 30к бонусов на облачные сервисы - кешбэк до 1кк бонусов от расходов - до 1кк бонусов на бесплатный переезд в Selectel
Количество бонусы зависит от проекта. Нюанс — получить поддержку могут только юридические лица и ИП.Короче предложение довольно вкусное и я закинул заявку, чем чёрт не шутит. Главное верить в чудо и оно обязательно сбудется. Напиши письмо прямо сейчас: https://slc.tl/2008u С Наступающим ребят! 🎄🎄🎄 Реклама, АО «Селектел», erid: 2VtzqwVEWdQ
Pi-hole — это сетевой DNS‑фильтр и блокировщик рекламы с открытым исходным кодом. Он работает как свой DNS‑сервер, перехватывает DNS‑запросы от устройств в локальной сети и блокирует домены из списков рекламы, трекеров и вредоносных сайтов, возвращая «пустой» ответ вместо IP‑адреса рекламного ресурса.Стратегия такая, одна нода будет master, где производятся все основное настройки, затем все эти настройки раскатываются на другие ноды (slave). Раньше такой кейс разруливали с помощью Orbital Sync, Nebula Sync и т.п. Но одно сдохло, другое работает через хуй-пизда-копыто. Короче нужно рабочее решение. Пишем свой велосипед
#!/usr/bin/env bash
set -euo pipefail
PRIMARY_PIH_DIR="/etc/pihole"
SECONDARY_USER="root"
SECONDARY_PIH_DIR="/etc/pihole"
SECONDARY_HOSTS=(
"192.168.10.97"
"192.168.10.98"
"192.168.10.99"
)
RSYNC_EXCLUDES=(
"--exclude=pihole-FTL.db"
"--exclude=macvendor.db"
"--exclude=*.log"
)
echo "[pihole-sync] $(date): start"
for host in "${SECONDARY_HOSTS[@]}"; do
echo "[pihole-sync] ---- host ${host} ----"
rsync -az \
"${RSYNC_EXCLUDES[@]}" \
"${PRIMARY_PIH_DIR}/" \
"${SECONDARY_USER}@${host}:${SECONDARY_PIH_DIR}/"
echo "[pihole-sync] ${host}: restart dns"
ssh "${SECONDARY_USER}@${host}" "pihole restartdns >/dev/null 2>&1" || \
echo "[pihole-sync] ${host}: FAILED to restart dns"
done
echo "[pihole-sync] $(date): done"
В SECONDARY_HOSTS забиваем айпишники slave инстансов, этакий массив. На этом настройка скрипта закончена. Весь лишний мусор вроде логов и статистики синхронизироваться не будет.
Сохраняем, чмодим, кидаем в крон (а лучше в systemd с таймерами):
Про таймеры подробно писал тут и тут.
crontab -e
*/5 * * * * /usr/local/sbin/pihole-sync.sh >> /var/log/pihole-sync.log 2>&1
Не забываем прокинуть ssh ключи с master на slave, чтобы скрипт не уперся рогом в логин и пароль.
Вроде мелочь, а полезная, да еще и на bash. Хороших тебе предстоящих выходных и береги себя!
🛠 #bash #linux #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog«Бросить курить легко. Я делал это сотни раз» Марк Твен.Вот, к этой дате я и решил поделиться с народом собственным опытом. Для начала расскажу, как я бросил курить. ㅤ Если статья наберет хотя бы 70 лайков - продолжу и напишу, как я бросил пить и похудел со 130 до 85 кг.
Лицензионное соглашение. Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.Я бросил курить в конце августа 1998 года. К тому времени у меня был многолетний опыт курильщика. Да и бросал я уже не первый раз. Я решил завязать с куревом, потому что у меня начало ухудшаться здоровье. Я начал кашлять по утрам. Во рту была такая вонь, как-будто кошки нагадили. Да, совсем забыл напомнить, это были девяностые, с деньгами и куревом было плохо, поэтому курил я "Приму". И за день выкуривал 2 пачки. Прикиньте, какую дозу всякой дряни я получал. Ошибки, которые я делая раньше, пытаясь бросить: 1. Снижал дозу. Довел до одной сигареты в НЕДЕЛЮ!!! Пофигу. Ты или куришь или нет. Нельзя немного курить, немного пить и быть немного беременной. 2. На период бросания, нужно завязать с употреблением алкоголя. Он снимает тормоза, и я возобновлял пагубную привычку именно по-пьяни. 3. Друзей, которые знают, что Вы пытаетесь бросить, и которые предлагают покурить, нужно посылать далеко и надолго. Друзья - те кто поддерживают, а не те, кто помогают кожух пропить. Я бросил сразу. Одномоментно. Мне было очень плохо. Мне было так плохо, что через два месяца мне еще очень сильно хотелось курить, а через 6 месяцев хотелось периодически. Девяностые, никаких никотинозаменителей, пластырей, таблеток. Все на морально-волевых. Вместо сигарет жевал жевательную резинку, и делал дыхательную гимнастику:
Если очень сильно хочется курить - делаешь несколько глубоких и быстрых вдохов-выдохов и задерживаешь дыхание на полном вдохе. Это называется гипервентиляция легких. После задержки дыхания "организм плывет". Ощущение очень похожее, на выкуривание сигареты. С той лишь разницей, что от такой дыхательной гимнастики очень просто избавиться.В первые дни я так делал примерно через каждые 20-30 минут, что соизмеримо с периодом перекуров. Постепенно необходимость в этом отпала и я, наконец-то понял, что у меня есть сила воли. И этот ресурс я использовал для дальнейших самоограничений. Я до сих пор помню, как мне было тяжело бросать, и именно это в нескольких тяжелых жизненных случаях остановило меня от возобновления идиотской привычки. Ну, еще и понимание, что когда я курил, то расплачивался деньгами и здоровьем, а какой-то директор табачной фабрики попал себе машины, дома, а возможно и яхты. Жду 70 лайков и продолжим. 🛠 #рабочиебудни — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Если кластер потерял кворум, /etc/pve автоматически монтируется только для чтения, и никакие chmod/chown/chattr не помогут, т.к. это не обычный ext4/xfs.Прям вызов! И че делать? Очевидно вернуть ноду в кластер и произвести некие манипуляции пока кластер не развален. Мыж с тобой не пальцем деланные, давай
pvx).
vim /etc/pve/corosync.conf
Да, предварительно не забудь забекапить все файлы, в которые вносишь изменения. Вообще никогда не забывай этого делать, особенно на проде. В будущем это спасет тебе жизнь и сохранит кучу нервных клеток.В файле видим описания кластера:
nodelist {
node {
name: pvx
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.10.60
}
node {
name: wenom
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.10.55
}
}
Видим quorum_votes. Это и есть ключевая опция для хака. Для pvx ноды я меняю 1 на 2. То есть искусственно присваиваю два голоса без кворума.
И ниже в блоке totem меняем параметр config_version: c 2 на 3. Все! Ничего перезагружать не нужно.
Чтобы проверить, запускаем:
pvecm status
Membership information
----------------------
Nodeid Votes Name
0x00000001 2 192.168.10.60 (local)
0x00000002 1 192.168.10.55
И видим что нода pvx получила 2 голоса. Теперь если выключить вторую ноду. Файловая система не перейдет в режим R/O и всё будет работать, как и раньше с одной нодой.
Поздравляю, теперь ты можешь прокачать свою домашнюю лабораторию и выключать ненужные узлы кластера как тебе вздумается.
Развлекайся!
🛠 #selfhosting #proxmox #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogМного раз говорил и еще раз повторюсь — мир не стоит на месте, инструментарий развивается и расширяется. Вчера мы закручивали саморез отверткой, сегодня есть шуруповерт. Так зачем отказываться если инструмент реально сэкономит твоё время и силы.Если ты использовал ИИ и получил от него ответ — вникни в ответ, разберись почему так и что значит каждая строчка кода. В таком контексте нет ничего зазорного. Не нужно извиняться если ты прибегнул к помощи бездушной твари, ты сократил время на гуглежку. Ну а если ты просто копипастишь — ты долбаёб, который через месяц деградирует в дерево.
Раньше все плевались от nginx и предпочитали apache, сейчас nginx плотно вошел в каждую инфраструктуру и apache в хуй не упёрся. В любой вакансии будет — навыки конфигурирования nginx.Каким ИИ пользуюсь я? Всё банально: 1. Perplexity (бесплатный PRO на год) 2. GPT (бесплатный GO для студентов) Этого хватает с головой, чтобы покрыть 99% вопросов. Первая полностью заменяет мне поисковые системы, в любом месте нажал
ctrl+alt+p, забил запрос и получил краткую выжимку из 100500 источников.
Да, там есть куча другого функционала, но я пользуюсь ей как поисковиком, уж больно нравится мне получать саммари и не бегать по ссылкам. Но опять-же если в ответе не уверен, лучше перепроверь.
Вторая, ну тут и рассказывать нечего, в основном домашки ребенку решаю, потому что в программе начальных классов — какой-то пиздец, как будто собеседование в компанию проходишь. Так сколько блядь люков?
Помимо домашек оно у меня по API подключено к Obsidian, на основе постов генерю варианты заголовков и описаний для блога. Удобно, выдумывать ничего не нужно, нажал хоткей и получил 50 вариантов, выбрал, отредачил под себя, опубликовал.
Сколько плачу за всё?
Нисколько! Всё решается первоначальной гуглежкой и оформлением акционных подписок. Допустим зашел на GPT с Индии и получил 1 год на тарифе GO для студентов.
Спиздел. Плачу за API запросы для Obsidian, но год назад забросил 10$ и на балансе сейчас 8$ осталось, капля в море.Да, порой нужно потратить 15-30 минут, но оно того стоит. Просто поищи на ютубе — Как получить тариф GO для GPT или PRO для perplexity. А если уж совсем упарываться не хочется, то на авито за пару минут тебе всё оформят на твой аккаунт, причем за миску супа. Спрос рождает предложения. Выводы НЕ КОПИПАСТИ с GPT! Вникай в ответы, перепроверяй если не уверен или есть сомнения. А какими ИИ пользуешься ты? Поделись в комментариях, будет интересно. 🛠 #рабочиебудни #services — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Encryption Password и Encryption Salt, эти параметры задаются в TrueNas, соответственно нам понадобятся эти данные.
Для начала расшифруем один файл, посмотрим как всё проёдет.
Зашифрованный бекап файла я скачал к себе на машину и положил в папку /tmp/encrypted/file.jpg.bin
Если файл открыть на просмотр, увидим такое:
RCLONE......hx^..]]NN..
..=._.S...4:..b...P...3`.^u0yO Ҭ..)..fkMP...K..
Пишем конфиг ~/.config/rclone.conf:
[cryptbackup]
type = crypt
remote = /tmp/encrypted
filename_encryption = off
directory_name_encryption = false
password = ZK6U8CZRqP-vT5fK0HwjO_Q
password2 = -GGulJpRclHETHVhp1MMs
Этот конфиг сгенерился автоматически, после запуска rclone config и заполнения данных.
Чтобы получить зашифрованный пароль из командной строки, воспользуйся командой:
rclone obscure "<password>"
rclone obscure "<salt>"
Потом эти данные можешь подставить в конфиг.
Если в TrueNas включено шифрование имен, то в параметре filename_encryption нужно прописать standard. Не проебись, на конце буква «d».Проверяем:
rclone ls cryptbackup:
1974875 file.jpg
Отлично! Что-то сработало. Давай наконец-то расшифруем этот файл:
rclone copy cryptbackup: /tmp/decrypted
Всё, задача решена, в папке /tmp/decrypted лежит расшифрованная картинка и прекрасно открывается.
Аналогично поступаешь и с другими файлами. Тут суть закинуть весь зашифрованный бекап в папку /tmp/encrypted и одной командой copy все прекрасно расшифруется в /tmp/decrypted сохраняя структуру папок.
По итогу имеем удобный и практичный способ восстанавливать такие штуки без участия TrueNas.
А так-же можно проверять такие бекапы после заливки их в облако, чтобы точно быть уверенным, что бекап точно рабочий.
Концепт проверки: автоматически забрать несколько контрольных файлов из бекапа, расшифровать, сверить внутренности с шаблоном и при проблемах — плюнуть в графану или в телегу алертом.
На этом всё. Хороших тебе выходных!
🔥 Да, забыл, до 01.01.26 действует промокод FACTORY_26 (1000р) на первый месяц в Linux Factory.🛠 #selfhosting #backup #crypt — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
source ~/.zhsrc после очередных изменений, да и плагинов я актуальных найти так и не смог.
По-хорошему можно было бы и плагин для сообщества накидать, но я ленивая скотина и обошелся Bash скриптом.Поэтому открываем
~/.zshrc и пихаем в него такое:
ZSH_LAST_MOD=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
precmd() {
local new_mod=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
if [[ $new_mod != $ZSH_LAST_MOD ]]; then
if zsh -n ~/.zshrc; then
source ~/.zshrc
ZSH_LAST_MOD=$new_mod
echo "🔄 .zshrc auto-reloaded (OK)"
else
echo "⚠️ .zshrc has syntax errors — reload skipped"
fi
fi
}
Теперь после каждого изменения файла ~/.zshrc конфиг будет автоматически перечитан. НО перечитан он будет только после проверки, если ты своими кривыми руками где-то накосорезил — идешь нахуй. Логично? Логично!
Как это работает:
1. Сохраняет timestamp последней модификации .zshrc 2. precmd() — специальная функция zsh, которая автоматически вызывается перед каждым выводом prompt (после любой команды или Enter). Вызывается незаметно, идеально для фоновых проверок без вмешательства в работу. 3. Дальше логика, сравнивает timestamps — если .zshrc отредактирован и сохранен, переходит к проверке. 4. zsh -n файл — проверяет синтаксис без выполнения (no-execute mode). Возвращает 0 при успехе, > 0 при ошибках (дубликаты, незакрытые скобки и т.п.). 5. Ну а дальше сообщает тебе, все ок или идешь нахуй.Нюанс:
echo 'syntax error' >> ~/.zshrc
/home/user/.zshrc:226: command not found: syntax
🔄 .zshrc auto-reloaded (OK)
Проблема в том, что zsh -n проверяет только синтаксис (скобки, конструкции), но не выполнение команд. Имей это ввиду.
Если сделать так:
echo '# syntax error' >> ~/.zshrc
🔄 .zshrc auto-reloaded (OK)
То всё пройдёт замечательно. Ну ты понял к чему я клоню.
Тема прикольная, экспериментируй.
🛠 #bash #linux #shell
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Bloggrep. Он очень функциональный и быстрый, но иногда использование встроенных в bash регулярок может здорово упростить скрипты.
🔤🔤🔤🔤🔤🔤🔤
Приведу простой пример:
#!/bin/bash
declare PREF="FILE"
#создаем 10 файлов с "плавающим" префиксом
for FILE in "202512"{01..10};do
touch ${PREF:$RANDOM%4}${FILE}".txt"
done
# Выбираем только файлы с префиксом из двух или трех символов и "даты"
for FILE in *;do
if [[ $FILE =~ (.{2,3})([0-9]{4})([0-9]{2})([0-9]{2}) ]];then
# echo $FILE
declare -p BASH_REMATCH
fi
done
Первый for создает 10 тестовых файлов c «случайным» префиксом (1-4 последние буквы слова FILE).
Второй for — основной выбирает нужные нам файлы. А что именно нам нужно — задает регулярное выражение.
Разберем подробнее:
(.{2,3})([0-9]{4})([0-9]{2})([0-9]{2})
Обратите внимание — регулярку нельзя заключать в кавычки, иначе она превратиться в . - заменяет любой символ, кроме перевода строки {2,3} - определяет количество захватываемых символов [0-9] - любой символ в диапазоне 0-9 () - захватываемая группаПервая группа
(.{2,3}) — Захватывает от 2 до 3 любых символов {2,3} указывает минимальное и максимальное количество.
Вторая группа ([0-9]{4}) — Захватывает ровно 4 цифры (0–9).
Третья и четвёртая группы ([0-9]{2})([0-9]{2}): Каждая захватывает ровно 2 цифры.
➡️ И теперь самое главное:
Если строка (в данном случае имя файла) соответствует regexp - захваченный результат помещается в массив BASH_REMATCH с индексом 0
Все остальные группы помещаются в следующие элементы массива. Получаем что-то типа:
declare -a BASH_REMATCH=([0]="LE20251204" [1]="LE" [2]="2025" [3]="12" [4]="04")
...
По итогу — с помощью одного if мы получили: Префикс файла (1), год (2), месяц (3) и день (4).
Ну, на всякий случай напомню, если вдруг решите дни или месяцы использовать в математических операциях — придется избавиться от ведущих нулей, поскольку числа, начинающиеся на «0» bash считает восьмеричными.
Для перфекционистов скажу, что данная регулярка не является строгой по отношению к датам, но в большинстве практических скриптов ее можно использовать.
Всем кода без багов.
🛠 #bash
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogБез внятного ТЗ — Результат ХЗ.При любой задаче всегда необходимо составить ТЗ. Если ТЗ составлено хорошо, то сразу определяются инструменты, которые будут необходимы для работы и сразу ограничивается область с которой будет проведена работа. Это значительно сокращает время на поиск решения. ㅤ Допустим вам нужно купить новый ноутбук. Изначально у вас есть ограничение — бюджет. Далее вы выделяете те характеристики которые вам необходимы. При этом часть характеристик будут друг другу противопостовляться.
Ноутбук с 17 дюймовым экраном практически не может быть легче чем ноутбук с 12 дюймовым экраном.Если ТЗ было составлено правильно и выделены нужные параметры, то круг покупки сужается и выбрать ноутбук становится значительно легче. При создании какого-то проекта, опять же чем детальнее и лучше ты опишешь что ты хочешь — тем легче тебе будет работать с проектом. При проекте: 🔤 Все рисуем и документируем (чтобы было потом понятно куда и что ставить) 🔤 Схема сети (чем лучше проработана схема — тем проще потом будет создавать защиту на сетевом уровне) 🔤Какие требования ты предъявляешь к проекту (ОТП, сертификаты, хранилище образов и конфигураций, dns, ntp, proxy для управления трафиком, где будет точки управления (mgmt segment) и как ты все это будешь защищать.) 🔤 Далее подбираются решения по каждому вопросу, описанному выше. 🔤 Проверяется во сколько обойдется данный проект (бюджетирование) 🔤 Описывается общая политика кому и что позволено в данном проекте. 🔤 На основе этих планов выискиваются узкие места, которые могут не справится с нагрузкой и продумывается возможность их масштабирования. После подробного описания (в документации) можно начинать вообще что-то делать 😲 Поэтому прежде чем задавать вопросы на форуме/чате сначала напишите:
🤩 Что хотите получить. 🤩 Приложите логи где ошибка. 🤩 При сетевых вопросах — хотя бы схему от руки как минимум как вы хотите чтобы это работало.🛠 #рабочиебудни #workflow — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Добро пожаловать в третью часть лучшего симулятора. Наслаждайтесь незабываемыми ощущениями, воплощая в жизнь свои фантазии и получая при этом деньги на обустройство дома и своей жизни.Если гуглить умеешь, сам найдешь всё необходимое. Дерзай. SIMS на максималках. 🛠 #linux #games #debug — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Тема крайне полезная, бери на вооружение, однажды в хозяйстве однозначно сгодится.Создаем синтетику
#!/bin/bash
while :; do :; done
Чмодим и запускаем. По итогу твой проц начинает хуярить как не в себя, выжирая на 100500% все свободные ресурсы. Хуита!
ㅤ
Давай это исправим и разрешим скрипту хуячить лишь на 50%.
Для начала проверяем, сможем ли мы это сделать
mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers
Если получил выхлоп, то в большинстве случаев у тебя всё получится.
Создадим клетку «bashdays.slice»:
sudo su
cd /sys/fs/cgroup
mkdir bashdays.slice
echo "+cpu +memory +io" > cgroup.subtree_control
cd bashdays.slice
echo $$ > cgroup.procs
echo "50000 100000" > cpu.max
Здесь мы включаем нужные контроллеры для дочерних директорий, запихиваем туда текущий shell и в последней строчке выставляем 50% для CPU.
Снова запускаем первый скрипт-пожиратель и наблюдаем как проц перестал хуярить как не в себя и ограничен теперь половинкой (50%). Отличная работа!
Что такое cgroups — это такая комната наказаний в ядре Linux. Ты создаёшь группу процессов, ядро начинает следить за их CPU, памятью, диском, IO и карать, если они жрут больше положенного.Аналогично можно сделать и с RAM и с IO.
echo $((512*1024*1024)) > memory.max
Создаем еще одну синтетику:
#!/bin/bash
blocks=()
while true; do
blocks+=("$(head -c 104857600 </dev/zero | tr '\0' 'A')")
echo "Allocated ${#blocks[@]}00 MB"
sleep 1
done
Жрём память пачками по 100 МБ. Сначала увидишь замедление (reclaim), потом — пиздец! Нас выкинет локальный OOM, но только внутри cgroup, а не всей системы.
Посмотреть статистику в реальном времени:
cat memory.current
cat memory.events
Ну и давай посмотрим IO (тормозим винт и превращаем его в флешку USB1.1). Цель — мы хотим, чтобы процесс читал с диска не быстрее 10 МБ/с:
Узнаем major:minor:
lsblk --output NAME,MAJ:MIN
Допустим, диск — 8:0 (типичное для /dev/sda).
echo "8:0 rbps=10485760" > io.max
И запускаем:
#!/bin/bash
dd if=/dev/sda of=/dev/null bs=1M
Теперь твой винт начинает работать как древняя флешка, хотя железо у тебя современное.
Кстати это отличные способы заподлостроения либо как вариант подойдут для технических собеседований. Например, говоришь кандидату — найди почему тормозит винт, либо — объясни почему скрипт жрет 50% процессора, а не 100%. Сразу вычислишь бродяг вайтишных, им даже ГПТ не поможет.Короче такие вот приколы! Изучай! 🛠 #linux #cgroup #debug — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
➡️ Как я обновлял Proxmox и остался живСегодня посмотрим как OCI работает на практике. ㅤ OCI это не какая-то отдельная сущность, это тот же самый LXC контейнер в котором будет запущен нужный тебе контейнер. Тут важное замечание — тебе не нужно устанавливать руками docker демона в LXC и только затем запускать контейнер. OCI все сделает само. Это не какой-то встроенный docker или k8s. Всё так или иначе работает под управлением LXC. К примеру возьмем заезженный образ nginx, который валяется в dockerhub:
nginx:latest
Заходим в Proxmox и идем в раздел с шаблонами, там будет кнопка Pull from OCI Registry.
➡️ ЧИТАТЬ ПРОДОЛЖЕНИЕ
🛠 #proxmox #devops #selfhosting
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog