Admin Guides | Сисадмин
Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов. Админ, реклама: @Ak_Mihail Биржа: https://telega.in/c/admguides РКН: https://kurl.ru/nQejS
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Admin Guides | Сисадмин
تُعد قناة Admin Guides | Сисадмин (@admguides) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 11 974 مشتركاً، محتلاً المرتبة 10 349 في فئة التكنولوجيات والتطبيقات والمرتبة 53 777 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 11 974 مشتركاً.
بحسب آخر البيانات بتاريخ 15 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 55، وفي آخر 24 ساعة بمقدار 5، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 11.66%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 6.72% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 396 مشاهدة. وخلال اليوم الأول يجمع عادةً 805 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 10.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل ядро, /proc, grep, latency, linux.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Обучающий канал по ОС Linux & Windows для начинающих и действующих администраторов.
Админ, реклама: @Ak_Mihail
Биржа: https://telega.in/c/admguides
РКН: https://kurl.ru/nQejS”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 16 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
bio. Внутри находятся адреса данных, размер и информация о том, с какими секторами нужно работать.
Но устройство не обязано принимать запрос любого размера.
Посмотреть его ограничения можно через sysfs:
cat /sys/block/nvme0n1/queue/max_sectors_kb
cat /sys/block/nvme0n1/queue/max_segments
cat /sys/block/nvme0n1/queue/max_segment_size
Первый параметр ограничивает объём данных в запросе, второй - количество сегментов, третий - размер отдельного сегмента.
Например, если допустимый размер запроса составляет 128 КБ, один bio на 512 КБ нельзя просто передать устройству целиком.
⏺Что происходит при splitting
Block layer может разделить исходный bio на несколько частей:
Исходный bio: 512 KB
|
v
Block layer
|
+-- bio 128 KB
+-- bio 128 KB
+-- bio 128 KB
+-- bio 128 KB
Каждая часть получает свой диапазон секторов и ссылки на соответствующие участки памяти.
При этом данные не обязательно копируются. Разделение касается прежде всего описания I/O и его границ.
⏺Почему размер - не единственная причина
Даже небольшой запрос может не пройти ограничения устройства.
Например, если данные представлены слишком большим количеством сегментов памяти или запрос пересекает границу, которую контроллер не умеет обрабатывать за одну операцию.
Дополнительные ограничения могут появляться и в стеке Device Mapper или RAID. Поэтому один запрос приложения, один bio и одна команда накопителю - далеко не всегда одно и то же.OverlayFS, который Docker использует для организации файловой системы контейнера.
Образ состоит из слоёв, доступных только для чтения. При запуске контейнера поверх них создаётся отдельный записываемый слой.
Когда приложение пытается изменить файл из образа, срабатывает механизм copy-up: файл копируется в записываемый слой, и изменения происходят уже там.
Посмотреть использование диска Docker можно командой:
docker system df -vА размер записываемого слоя конкретного контейнера:
docker inspect --size <container_id>struct my_device *dev;
dev = kmalloc(sizeof(*dev), GFP_KERNEL);
Здесь всё правильно. Но kmalloc() получает только размер в байтах. Какой именно объект будет храниться в памяти, allocator не знает.
Если разработчик ошибётся в sizeof(), можно получить слишком маленький буфер.
⏺Что меняет kmalloc_obj
Идея типизированного выделения - связать размер памяти непосредственно с типом объекта.
Вместо ручного указания размера используется выражение, по которому компилятор определяет нужный тип:
dev = kmalloc_obj(*dev, GFP_KERNEL);Для массива предусмотрен аналогичный подход:
dev = kmalloc_objs(*dev, 16, GFP_KERNEL);Так меньше шансов перепутать размер структуры или неправильно рассчитать память под несколько элементов. ⏺А что с защитой памяти Важно понимать: типизированное выделение не превращает C в безопасный язык и не устраняет все ошибки работы с указателями. Но оно убирает один источник проблем - несоответствие размера выделяемой памяти объекту, для которого она предназначена. Особенно это полезно в kernel-коде, где подобная ошибка может закончиться повреждением памяти, а не просто падением одного приложения.
В программе: — сценарии классической виртуализации и сочетание веб-интерфейса с декларативным управлением; — подготовка «золотых образов» и первичная настройка ВМ; — развёртывание через Terraform, манифесты, шаблонизатор и GitOps; — управление конфигурацией ВМ с помощью Ansible.🎁 Бонусы: розыгрыш мерча и обучения.
Зарегистрироваться16 октября, 12:00
Один вызывал функцию, которую второй считал подозрительной. Второй пытался её заблокировать и сам вызывал подозрения у первого. Вместо защиты получился взаимный конфликт, приводивший к сбоям.Антивирусы глубоко вмешиваются в работу Windows, в том числе перехватывают системные функции. Если несколько программ одновременно контролируют одни и те же операции, их действия могут мешать друг другу и вызывать зависания. Чен сравнил это с двумя охранными фирмами, которым поручили патрулировать один этаж, но не сообщили о присутствии коллег. Какие продукты конфликтовали и как устранили проблему, он не уточнил. В рассказе использованы вымышленные названия Fabrikam и Contoso.
Input/output error.
В Linux такое можно воспроизвести специально. Для этого есть dm-dust - target Device Mapper, который имитирует повреждённые блоки и позволяет проверить, как файловая система или приложение переживёт ошибку чтения.
1️⃣Создаём тестовый диск
Чтобы не рисковать настоящим накопителем, используем файл и loop-устройство:
truncate -s 64M /tmp/dust.img
LOOP=$(sudo losetup --find --show /tmp/dust.img)
SECTORS=$(sudo blockdev --getsz "$LOOP")
echo "0 $SECTORS dust $LOOP 0 512" |
sudo dmsetup create dusttest
Теперь /dev/mapper/dusttest выглядит как обычное блочное устройство. Пока все операции проходят без искусственных ошибок.
2️⃣ Ломаем конкретный блок
Допустим, хотим сделать нечитаемым блок №64:
sudo dmsetup message dusttest 0 addbadblock 64
sudo dmsetup message dusttest 0 enable
Пробуем прочитать его напрямую:
sudo dd if=/dev/mapper/dusttest \
of=/dev/null bs=512 count=1 skip=64 \
iflag=direct
Вместо данных получим:
dd: error reading '/dev/mapper/dusttest':
Input/output error
Причём ошибка возникает в Device Mapper. Сам backing storage остаётся исправным.
3️⃣ Проверяем восстановление
У dm-dust есть интересная особенность: запись в повреждённый блок проходит успешно и удаляет его из списка bad blocks.
Так имитируется поведение диска, который переназначил проблемный сектор.
Для проверки файловой системы можно сначала создать её на /dev/mapper/dusttest, записать тестовые файлы, а затем включить ошибки на выбранных блоках данных или метаданных.
Дальше смотрим:
sudo dmesg -w
sudo dmsetup status dusttest
Интересно, вернёт ли приложение EIO, продолжит ли файловая система работать и не перейдёт ли она в read-only режим. Конкретная реакция зависит от файловой системы и того, какой блок оказался недоступен.
После эксперимента:
sudo dmsetup message dusttest 0 disable
sudo dmsetup message dusttest 0 clearbadblocks
sudo dmsetup remove dusttest
sudo losetup -d "$LOOP"# /etc/login.defs PASS_MAX_DAYS 90 PASS_MIN_DAYS 1 PASS_WARN_AGE 14PASS_MAX_DAYS: через сколько дней пароль истекает. PASS_MIN_DAYS: минимум дней до смены, защищает от немедленной смены обратно на старый. PASS_WARN_AGE: за сколько дней предупреждать пользователя. Для существующих пользователей login.defs не применяется задним числом, только chage:
chage -M 90 -m 1 -W 14 username
Смотрим текущую политику пользователя
chage -l username
passwd -S username
chage -l покажет даты последней смены, истечения, предупреждения и блокировки.
Применяем ко всем пользователям разом
for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd); do
chage -M 90 -W 14 $user
echo "$user: $(chage -l $user | grep 'Password expires')"
done
Фильтруем по UID >= 1000 чтобы не трогать системных пользователей.
Принудительная смена при следующем входе
Если нужно сбросить пароль конкретному пользователю:
chage -d 0 username
При следующем SSH-входе система потребует сменить пароль до того как пустит в систему.docker network ls
Смотрим все сети и их типы. Первая проверка - сеть существует и активна ли она.
2️⃣Разбираемся с конкретной сетью
docker network inspect <name>
Проверяем настройки bridge, IP-адреса и какие контейнеры к ней подключены. Часто именно здесь всплывает конфликт IP.
3️⃣Какой IP у контейнера?
docker exec -it <container> ip addr
Быстрая проверка: назначен ли контейнеру правильный IP и подключен ли к нужной сети.
4️⃣Контейнеры видят друг друга?
docker exec -it <container> ping <ip>
Если пинги не проходят - смотрим bridge и firewall.
5️⃣Правила iptables для Docker
iptables -L -n -v | grep DOCKER
Иногда проблема не в Docker, а в том, что iptables заблокировал трафик.Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
❓Вопрос: Что такое CFS bandwidth control и как оно управляет CPU-ресурсами в Linux?
✅Ответ: CFS bandwidth control — это механизм планировщика Completely Fair Scheduler (CFS) для ограничения доли процессорного времени, доступного группе задач (cgroup). Он позволяет задавать квоты CPU для контейнеров и процессов, предотвращая «захват» CPU одним нагрузочным процессом.
Как это работает:
• Задаётся период (cpu.cfs_period_us) и квота (cpu.cfs_quota_us).
• Планировщик распределяет CPU среди процессов так, чтобы группа не превышала выделенную квоту за период.
• Если квота исчерпана, процессы группы ждут до следующего периода, а остальные задачи продолжают выполняться.dm-delay, который специально добавляет задержку к I/O.
Это удобно для тестов: можно проверить, как система, файловая система или приложение ведут себя с медленным storage, не меняя реальный диск.
⏺Создаём задержку
Например, добавим 100 мс к чтению и 200 мс к записи:
echo "0 $(blockdev --getsz /dev/nvme0n1) delay /dev/nvme0n1 0 100 /dev/nvme0n1 0 200" \
| dmsetup create slowdisk
Проверяем:
dmsetup table slowdisk lsblkТеперь /dev/mapper/slowdisk обращается к тому же storage, но I/O проходит через dm-delay. ⏺Где возникает задержка Схематично путь выглядит так:
application
↓
filesystem
↓
block layer
↓
dm-delay
↓
NVMe / SSD
dm-delay получает bio, удерживает его заданное время и только потом отправляет дальше.
Важно: физический диск при этом ничего не «замедляет». Дополнительная latency появляется именно в Device Mapper.
⏺Зачем это нужно
Например, можно воспроизвести ситуацию:
обычный SSD ↓ latency ~ сотни μs dm-delay ↓ latency ~ сотни msИ посмотреть, что произойдёт с timeout’ами, очередями I/O, fsync, RAID или приложением. После теста mapping удаляется:
dmsetup remove slowdisk
