Перейти к содержимому
Технологии IT обновлён 21.04.2024

Admin Guides

Admin Guides — ваш проводник в мир управления Linux и Windows! Наш канал создан, чтобы помочь начинающим и опытным администраторам освоить азы и углубить свои знания в области операционных систем. Здесь вы найдёте ценные советы, инструкции и руководства, которые сделают вашу работу проще и эффективнее. Не упустите возможность стать экспертом в администрировании с нами! 🚀🔧

Публикации канала

💬 Вопрос на собеседовании для DevOps-инженера Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать. ❓Вопрос: Что такое TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) и зачем он нужен? ✅Ответ: TCP BBR - это алгоритм управления перегрузкой в TCP, разработанный Google. В отличие от классических алгоритмов (Reno, Cubic), которые регулируют скорость передачи на основе потерь пакетов, BBR измеряет доступную пропускную способность канала и время задержки (RTT), чтобы оптимально использовать сеть. Как это работает: • Алгоритм оценивает текущую пропускную способность и RTT. • Регулирует скорость отправки данных, чтобы максимально использовать канал, не вызывая излишних задержек. • Позволяет эффективно работать даже в сетях с высокой задержкой или переменной пропускной способностью.

Открыть в Telegram

chroot vs pivot_root: два способа сменить корень Linux Обе команды позволяют процессу увидеть другой каталог как /. Но работают они по-разному, и заменить одну другой получается далеко не всегда. ⏺chroot - меняем точку отсчёта chroot() изменяет корневой каталог, относительно которого процесс разрешает абсолютные пути. Например: sudo chroot /srv/rootfs /bin/sh Теперь /etc для оболочки означает /srv/rootfs/etc на хосте. Но таблица монтирования не меняется. Старые mount points остаются на месте, а сам chroot не создаёт полноценной изоляции: процесс с достаточными привилегиями может выйти за его пределы. ⏺pivot_root - переставляем монтирования pivot_root() работает на другом уровне. Он заменяет корневое монтирование в текущем mount namespace и перемещает старый корень в указанный каталог. Упрощённо: До: / → старый root /newroot → новый root После: / → новый root /oldroot → старый root Старый корень затем можно размонтировать, если он больше не используется. Именно такой подход применяют контейнерные runtime: вместе с mount namespace он позволяет построить отдельное файловое окружение. ⏺В чём главное различие? chroot меняет корень для разрешения путей конкретного процесса. pivot_root перестраивает расположение корневого монтирования внутри mount namespace. Для него нужны соответствующие привилегии и соблюдение требований к монтированиям.

Открыть в Telegram

Потолок зарплаты в IT — ВСЁ Даже Senior-разработчики упираются в потолок. Дальше — менеджмент, смена компании или годы ожидания повышения. Но есть другой путь — зарабатывать больше на уже накопленном IT-опыте. И для этого необязательно переучиваться с нуля. Как именно, рассказывает Артём Алехин — экс-тимлид Сбера, работавший на валютных удаленках. Он совмещал российский найм с валютным контрактом, зарабатывая $8–9 тысяч в месяц. Артем создал проект в рамках которого получил для своих 200 учеников 40+ офферов на 200к+. Три направления, с которыми работает Артём: — Валютная удалёнка: выход на зарубежный рынок и поиск офферов от $5 000. — Монетизация экспертизы: превращать свой IT-опыт в доход через обучение и менторство — Свой IT-продукт: запуск SaaS с проверкой спроса сервиса для селлеров. Артём помогает выбрать подходящий путь и выстроить стратегию роста дохода, чтобы перестать зависеть от одного работодателя. Переходи в канал Артёма и изучай: @artem_itishnaya

Открыть в Telegram

Как получить SIGBUS, просто уменьшив файл Обычно SIGBUS связывают с проблемами оборудования или памяти. Но в Linux этот сигнал можно получить даже на исправном компьютере - достаточно изменить размер файла, с которым работает программа. Разберём небольшой эксперимент с mmap() и truncate(). ⏺Что происходит mmap() позволяет отобразить файл в виртуальную память процесса. После этого приложение обращается к его содержимому как к обычному массиву. Но представим, что файл занимал 8 КиБ, а другой процесс уменьшил его до нуля через truncate(). Отображение mmap() при этом не исчезнет. Однако при обращении к странице, которая теперь целиком находится за пределами файла, ядро отправит процессу SIGBUS. ⏺Проверяем на практике Создадим файл и небольшую программу: truncate -s 8192 /tmp/test.bin #include <fcntl.h> #include <sys/mman.h> #include <unistd.h> int main(void) { int fd = open(«/tmp/test.bin», O_RDONLY); char *p = mmap(NULL, 8192, PROT_READ, MAP_SHARED, fd, 0); close(fd); sleep(5); return p[4096]; } Компилируем и запускаем: gcc test.c -o test ./test & truncate -s 0 /tmp/test.bin wait Программа сначала создаёт отображение, затем ждёт пять секунд. За это время мы уменьшаем файл до нуля. При чтении p[4096] процесс получит SIGBUS, а оболочка обычно сообщит Bus error. ⏺Почему не SIGSEGV? Адрес остаётся частью допустимого виртуального отображения. Проблема не в отсутствии mmap, а в том, что соответствующей страницы файла больше нет. Именно поэтому Linux использует SIGBUS, а не обычный SIGSEGV.

Открыть в Telegram

Почему mmap(MAP_PRIVATE) не всегда создаёт отдельную копию файла в RAM? Anonymous Quiz 23% - Используется 0_DIRECT 26% - Ядро отключает Page Cache 36% - Копирование происходит при записи 15% - Данные всегда размещаются в swap

Открыть в Telegram

Как проверить, какие файлы изменились после установки пакета Установили пакет, а после этого сервис начал работать иначе. Возможно, обновились библиотеки, изменились конфиги или появились новые файлы. Но как понять, что именно произошло? В Linux есть несколько способов проверить изменения, причём без ручного просмотра каждого каталога. ⏺debsums - проверяем файлы Debian/Ubuntu sudo apt install debsums debsums -s nginx Утилита сравнивает контрольные суммы установленных файлов с эталонными MD5-суммами, если они доступны в метаданных пакета. Если файл изменён, debsums сообщит об этом. Для проверки конфигурационных файлов можно добавить -a: debsums -as nginx Но это проверка текущего состояния, а не история изменений после установки. ⏺rpm -V - ищем изменения в RPM-пакетах Для Fedora, RHEL и других RPM-систем: rpm -V nginx Команда проверяет размер, контрольную сумму, права, владельца и другие атрибуты файлов относительно данных RPM. Например: S.5....T. c /etc/nginx/nginx.conf Здесь изменились размер, контрольная сумма и время модификации конфигурационного файла. ⏺Как узнать, что добавилось после установки debsums и rpm -V не показывают полноценную разницу между состояниями системы. Для этого можно заранее сохранить список файлов: find /etc /usr/local -type f | sort > before.txt После установки: find /etc /usr/local -type f | sort > after.txt comm -13 before.txt after.txt Так увидим новые пути. Но изменения содержимого существующих файлов этот способ не обнаружит - для них нужно сравнивать контрольные суммы или использовать snapshot.

Открыть в Telegram

Два типа дисков на одном сервере, чтобы не выбирать между скоростью и объёмом. Для корпоративного портала или Bitrix24 на SSD можно разместить приложения, а HDD использовать для документов, файлов и внутренних данных компании. В Рег.облаке такая конфигурация стоит 8 330 ₽/мес. В неё входят: • Xeon E3-1270v3 • 16 ГБ RAM • 2 × 240 ГБ SSD • 2 × 2 ТБ HDD В итоге на одной машине можно разместить рабочие сервисы и хранилище для команды, не арендуя отдельный сервер под каждую задачу. Переезд тоже не обязательно организовывать самостоятельно: миграция бесплатная, как и установка BitrixEnv. Посмотрите предложение на сайте Рег.облака

Открыть в Telegram

В Windows 11 сохранился код диспетчера памяти Windows 95 Механизм совместимости EmulateHeap помогает старым приложениям, которые зависят от особенностей работы с памятью в Windows 95. Microsoft взяла исходный код её менеджера кучи, перекомпилировала и включила в систему совместимости. Один из известных примеров подобных проблем - оригинальная SimCity. Игра читала память, которую сама уже освободила. В Windows 3.x ошибка не мешала работе, а в Windows 95 приводила к сбоям. Тогда Microsoft добавила для игры специальный режим работы с памятью. ⏺EmulateHeap воспроизводит старое поведение кучи и загружается только для приложений, которым включено это исправление. Найти его можно в Compatibility Administrator из Windows ADK. При этом Windows 95 в фоне не запускается.

Открыть в Telegram

Что будет, если ограничить диск до 1 МБ/с через cgroup? Быстрый SSD может выдавать сотни мегабайт в секунду. Но Linux позволяет ограничить скорость I/O отдельной группы процессов, даже если сам диск почти не загружен. Для этого в cgroup v2 есть контроллер io и параметр io.max. ⏺Ставим ограничение Создадим тестовую cgroup и ограничим запись до 1 МиБ/с: sudo mkdir /sys/fs/cgroup/slowio Узнаем major:minor нужного блочного устройства: lsblk -o NAME,MAJ:MIN Например, для устройства 259:0: echo "259:0 wbps=1048576" | sudo tee /sys/fs/cgroup/slowio/io.max Теперь процессы внутри этой cgroup будут ограничены по скорости записи на указанное устройство. ⏺Проверяем на практике Запустим тест с прямой записью, чтобы минимизировать влияние page cache: sudo sh -c ' echo $$ > /sys/fs/cgroup/slowio/cgroup.procs dd if=/dev/zero of=/mnt/test/slow.bin \ bs=1M count=100 oflag=direct ' Если файловая система расположена на выбранном устройстве и контроллер работает, скорость должна приблизиться к 1 МиБ/с. Запись 100 МиБ в таком случае займёт около 100 секунд, хотя физически SSD способен закончить её гораздо быстрее. ⏺Что происходит внутри Block layer учитывает I/O, отправляемый процессами cgroup, и задерживает операции, если они превышают заданный лимит. Application ↓ cgroup io.max ↓ I/O throttling ↓ SSD В результате приложение ждёт разрешения отправить следующие запросы. При этом диск может оставаться почти свободным. Посмотреть статистику можно через: cat /sys/fs/cgroup/slowio/io.stat

Открыть в Telegram

Если вы планировали в 2026 году прокачать свои навыки в k8s и освоить их на новом, продвинутом уровне - велком! Но скажем сразу, курс подходит только продвинутым специалистам. Не покупайте Kubernetes Мега, если ...вы только знакомитесь с K8s. Мы здесь не учим kubectl apply и не разбираем YAML построчно. Для этого есть “K8s: Базовый уровень” - это отдельный, более спокойный маршрут. ...у вас нет 8-10 часов в неделю. Мы не растянем курс. Мы про максимум эффективности. ...вы ждете слайдов и красивых схем. 78 часов практики против 44 часов теории. Готовьте терминал. А теперь кому это нужно: Тем, кто уже держит кластеры в проде и упирается в потолок. Кто хочет разобраться с KEDA, операторами, отказоустойчивостью БД, продвинутым Helm и продакшен-эксплуатацией под нагрузкой Подробнее о курсе. #реклама О рекламодателе

Открыть в Telegram

Трюки с SSH для продуктивности SSH — это не только удалённый терминал, но и мощный инструмент для повышения эффективности работы. Рассмотрим три полезных фишки: мультиплексирование, проброс портов и ProxyJump. 1️⃣Мультиплексирование соединений (ControlMaster): Обычно при каждом новом SSH-подключении создаётся отдельное соединение — это тормозит и требует ресурсов. ControlMaster позволяет использовать одно главное соединение для нескольких сессий, ускоряя подключение. Как настроить: Добавьте в ~/.ssh/config: Host * ControlMaster auto ControlPath ~/.ssh/cm-%r@%h:%p ControlPersist 10m Теперь новые подключения к одному серверу будут использовать уже открытое соединение, а не создавать новое. 2️⃣ Проброс портов (Port Forwarding): SSH умеет «прокидывать» порты, что полезно для безопасного доступа к внутренним сервисам: • Локальный проброс: доступ к удалённому порту через локальный ssh -L 8080:localhost:80 user@server Теперь на вашей машине localhost:8080 будет перенаправлен на server:80. • Удалённый проброс: наоборот, проброс с сервера на клиент ssh -R 9090:localhost:3000 user@server • Динамический проброс (SOCKS Proxy): ssh -D 1080 user@server Создаёт SOCKS5-прокси на локальном порту 1080, который можно использовать в браузере. 3️⃣ ProxyJump (перескакивание через bastion): Если сервер доступен только через промежуточный bastion, удобно использовать ProxyJump вместо ручных туннелей: В ~/.ssh/config: Host internal-server HostName internal.example.com User user ProxyJump bastion-user@bastion.example.com Теперь достаточно одной команды ssh internal-server, и соединение пройдёт через bastion автоматически.

Открыть в Telegram

💬👨‍💻🐍💩🤖🤖🐧👩‍💻🧑‍💻👋🦀 Дождались! Ребята сделали крутейший канал про IT новой эпохи Нейросети, ИИ-агенты, вайбкодинг, вайбхакинг и новые инструменты уже меняют привычный мир технологий. Там разбирают эти изменения и другие интересные IT-темы на простых картинках и понятном языке, а еще делятся полезными ресурсами и свежими новостями Подписывайтесь: @IT_Portal

Открыть в Telegram

Lazy TLB: почему Linux не всегда переключает адресное пространство При переключении процессов Linux может менять таблицы страниц, через которые виртуальные адреса переводятся в физические. Но иногда ядро оставляет прежнее адресное пространство активным, даже если CPU уже выполняет другую задачу. Это называется Lazy TLB. ⏺Когда переключение не нужно У пользовательского процесса есть свой mm_struct, описывающий адресное пространство. А kernel threads, например kworker, обычно собственного mm_struct не имеют. Поэтому при переходе с приложения на kernel thread ядро может сохранить прежние таблицы страниц: Process A (mm_A) ↓ kworker ↓ Process B (mm_B) Пока выполняется kworker, CPU может использовать адресное пространство процесса A, хотя сам поток не обращается к его пользовательской памяти. ⏺Зачем это нужно Смена адресного пространства требует управления TLB - кэшем трансляций виртуальных адресов. Lazy TLB позволяет избежать части этих расходов. При этом ядро продолжает учитывать изменения отображений, чтобы не использовать устаревшие трансляции. ⏺Как это реализовано В Linux за переходы отвечают механизмы enter_lazy_tlb() и switch_mm(). user task → kernel thread enter_lazy_tlb() kernel thread → user task switch_mm() Конкретная реализация зависит от архитектуры процессора.

Открыть в Telegram

💬 Вопрос на собеседовании для сисадмина Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать. ❓Вопрос: Почему NFS-клиент может продолжать видеть старые данные, хотя файл на сервере уже изменился? ✅Ответ: Причина может быть в кэшировании атрибутов и содержимого файлов на стороне NFS-клиента. Чтобы не обращаться к серверу при каждой операции, Linux сохраняет в кэше данные файлов и их метаданные. Из-за этого изменения, сделанные другим клиентом, не всегда становятся видны мгновенно. Например, два сервера работают с одной NFS-директорией. Первый обновляет файл конфигурации, а второй некоторое время продолжает читать старую версию. Это связано с тем, что NFS использует модель согласованности close-to-open: при открытии файла клиент обычно проверяет, не изменился ли он на сервере. Но это не гарантирует мгновенную синхронизацию всех операций. Посмотреть параметры монтирования можно: nfsstat -m

Открыть в Telegram

Комментарии

0

Комментарии пишут вошедшие — так видно, кто автор.

Войти

Комментариев пока нет

Будьте первым, кто расскажет о канале другим.

Пожаловаться на канал

Расскажите, что не так: модератор проверит канал и примет решение. Подпись не нужна, но почту можно оставить — тогда ответим.

Причина Что не так (необязательно) Почта для ответа (необязательно)
Открыть в Telegram