-
man 2 fstat
-
mmap
-
mprotect
- Grub 2 supports Linux mdraid volumes natively.
- part-type важен только для MBR разделов. В GPT всегда primary
- перенос дескрипторов рабочих процесов
- inodes
-
Copy on write snapshot
-
Thin provisioning
-
LVM stripes
-
device mapper
-
Почиттаь про LVM Snapshot
-
overbooking
-
CLVM
-
HA-LVM
-
tmpfs. ramfs. rootfs. initramfs
-
где хранятся inodes? Каков их размер?
-
где устанавливается кол-во inodes
-
reserved block count - зарезервированные 5% блоков диска. Изменяемо
dumpe2fs, lsblk, blkid, pdflush, man hier, man fsync, man 2 sync, tune2fs, stat, ncdu, lsof, fuser, fsck, mkfs, mount, blockdev, debugfs, xfs_info, mount, ls -i, find, hdparm, smartctl, lvcreate(8), lvconvert(8), lvchange(8), dm_multipath, multipathd, dm_crypt, cryptsetup(8), dmsetup, lslocks
- LVM Cache
- sysfs
- inodes
- LVM Snapshot & Virtualization
- RedHat LVM Administrator Guide RU
- как используется дисковое пространство в Linux
В современных системах имеет смысл выделять при установке: / - 8G /home - 8G /var - 16G
Для приложений стоит выделять отдельные тома (например для mysql - отдельный том в /var/lib/mysql)
- block. superblock. inode. hardlink.. Block - единица измерения данных на блочном устройстве. Диск оперирует блоками. Файл любого размера не может занимать меньше одного блока. Superblock - информация о ФС:
- размер ФС
- размер блока
- битмап занятых блоков
- расположение и размер групп блоков и таблиц inode
- Суперблок находится в 1024 байтах от начала раздела
- несколько копий суперблока разбросаны по диску
Inode (индексный дескриптор) - информация о файле:
- размер файла в байтах
- идентификатор владельца файла
- идентификатор группы-владельца файла
- режим доступа к файлу, определяющий кто и какой доступ имеет к файлу
- дополнительные системные и пользовательские флаги, которые дополнительно могут ограничивать доступ к файлу и его модификацию
- временные метки, отражающие время модификации индексного дескриптора (ctime, changing time), время модификации содержимого файла (mtime, modification time) и время последнего доступа к файлу (atime, access time)
- счётчик для учёта количества жёстких ссылок на файл
- указатели на физические блоки диска, в которых хранится содержимое файла
- "Inode - это "вещи", на которые указывают записи каталога. Когда вы создаёте жёсткую ссылку на существующий файл, вы создаёте новый элемент директории, но не создаёте новый inode." (UNIX and Linux System Administration Handbook)
- Индексные дескрипторы объединены в таблицу, которая содержится в начале каждой группы блоков. Обычно при создании файловой системы примерно 1 % её объёма выделяется под индексные дескрипторы . Все айноды хранятся в одной фиксированной таблице. Аллоцируются при создании ФС (новые ФС умеют динамически создавать)
- ext2 - standard
- ext3 = ext2 + journaling
- ext4 - increases few size limits, increases performance + extents (несколько блоков)
ФС кэширует дисковые блоки. Любые блоки могут кэшироваться, включая суперблоки, блоки с айнодами. sync записывает кэш в нужные блоки диска
Состоит из ячеек флеш памяти, каждая из которых гораздо медленнее HDD, но благодаря параллельности работает быстрее. Страница (4 KiB) может быть перезаписана ограниченное количество раз. Поэтому прошивка распределяет запись между всеми страницами. Похоже на virtual memory
Страницы должны быть стерты перед записью. Стирание - гораздо более медленная опрерация, чем запись. Отдельные страницы не стираются - только кластеры из смежных страниц (обычно 128 страниц или 512 KiB)
/proc/cmdline - строка запуска ядра, конфигурация
bootparam, mkinitrd
/sbin/init fork, setsid В основе systemd лежит cgroups Systemd-nspawn
- telinit
- systemd-analyze time, systemd-analyze blame
- man systemd-system.conf
- ulimit
- setrlimit
- mount
- timer
- machinectl
- systemd docs
- systemd для системного администратора
- Using systemd features to secure services
test set -x - debug mode exec
- Advanced Bash-Scripting Guide
- Язык обработки данных AWK
- sed
- bash-скрипты на хабре
- Bash Guide for Beginners
- Bash Cheatsheet
- Anybody can write good bash
- Google Shell Style Guide
- Дюжина приемов в Linux, которые действительно сэкономят уйму времени
- pure sh bible
- pure bash bible
- 20 приёмов работы в командной строке Linux, которые сэкономят уйму времени
- Security implications of forgetting to quote a variable in bash/POSIX shells
- Better BASHing Through Technology
- ShellCheck, a static analysis tool for shell scripts
- Bash obfuscation framework
- GNU make
- Mock
- RPM Guide. RU
- Сборка RPM - быстрый старт
- RPM Packaging Guide
- Working with Source RPMs
- RPM Packaging Guide
- renice
- ionice
- setuid, setgid
- ps
- smem
- fork, clone
- unshare, nsenter
- Основы работы с сигналами
- Linux process states with examples
- Updating ulimit on a running Linux process
- Linux Performance Analysis in 60,000 Milliseconds
[Forwarded from Протестировал]
Контейнерная и гипервизорная виртуализация сильно упростили создание тестовых стендов и уже трудно представить как мы обходились без этого раньше. Расстраивает, что из-за высокой популярности инструментов коллеги начинают переусложняют вещи, которые можно было бы сделать проще. Если процессу нужно ограничить доступ к файловой системе, то вполне можно обойтись chroot(8), если нужно изолировать сетевой стек или сделать ограничение по доступу к ресурсам системы, то обойтись unshare(1). Это не намного сложнее, чем использовать тот же docker или podman, но нужно один раз разобраться в том, из чего построены контейнеры.
Базовых механизмов всего четыре:
- namespaces (пространства имён) используются для группировки объектов ядра в различные наборы, к которым могут обращаться определенные деревья процессов. Звучит немного сложно, поэтому сразу пример - пространства имен PID ограничивают представление списка процессов процессами в пространстве имен. Всего есть несколько видов пространства имен, см. ниже.
- capability используются для более тонкой настройки полномочий для процесса. Если вы использовали опцию -cap-add для docker, то это оно.
- cgroups это механизм установки ограничений на доступ процесса к ресурсам системы (память, процессор).
- setrlimit - ещё один механизм для ограничения доступа к ресурсам системы наряду с cgroups. Он старее, чем cgroups, но может делать то, что cgroups не позволяют.
Пространства имён бывают следующими:
- mount namespace - монтирование и размонтирование ФС не будет иметь никакого эффекта на ФС самой системы.
- UTS namespace - установка имени машины (hostname) или доменного имени не будет иметь никакого эффекта для основной ОС.
- IPC namespace - процесс будет иметь независимые от основной ОС объекты IPC: очереди сообщений, семафоры и разделяемую память.
- network namespace - процесс сможет иметь независимые от основной ОС стеки протоколов IPv4 и IPv6, таблицы маршрутизации и др.
- PID namespace - процесс будет иметь отдельное представление дерева процессов.
- user namespace - процесс с таким пространством имён будет иметь отдельный набор UID, GID. Например суперпользователь в этом пространстве имён не будет иметь ничего общего с суперпользователем из основной ОС.
Чтобы понять лучше эти механизмы можно воспользоваться двумя утилитами: unshare и nsenter. Первая позволить из командной строки создавать пространства имен для отдельных процессов, а вторая подключаться к уже созданным пространствам имён.
Когда прийдёт понимание этих механизмов, то при необходимости использования контейнерной виртуализации вы сами себя будете спрашивать: "- Мне действительно нужно использовать docker с его абстракциями в тысячи строк кода или можно обойтись более простыми средствами?".
Прекрасной иллюстрацией к сказанному будет статья, в которой автор описывает тестирование сетевого сервера lldpd с использованием pytest и сетевых пространств имён - https://vincent.bernat.ch/en/blog/2016-testing-pytest-linux-namespaces.
ansible-inventory --graph --vars
- systemd-cgtop, systemd-cls
- chroot, jail, clone, setns, unshare, nsenter, /proc//ns/, subuid, lsns, unshare, libcgroup-tools, cgget
- /etc/subuid, /etc/subgid
- atop, sar
- seccomp, captest, filecap, netcap, pscap
- cgroups
- namespaces, part 2
- Изолируем демоны с systemd
- A deep dive into Linux namespaces
- blkio: управление доступно полосой при доступе к блочным устройствам
- cpu: управление доступом к ресурсам процессора
- cpuacct: аккаунтинг cpu; используется совместно с контроллером cpu
- cpuset: выделение отдельных процессоров группе
- devices: ограничение доступа к устройствам
- freezer: заморозка процессов (спасибо команде OpenVZ)
- memory: ограничение памяти для группы
- net_cls: шейпинг (man 8 tc)
- perf_event: интерфей сдля perf
- hugetlb: ограничение работы с huge pages
- pid: ограничение числа процессов
vmstat, pidstat, iostat, iotop, sar, top, atop vmstat поле b - uninterruptable sleep - Если процессы в системе приостанавливаются из-за перегрузки памяти, то прирост нитей отражает именно значение в столбце b отчета vmstat, а не число нитей в очереди выполнения.(нить = поток?)отсюда Кол-во процессов >500 на ядро - плохо. Много вермени уходит на переключение контекста
- Paging refers to writing portions, termed pages, of a process' memory to disk. Swapping, strictly speaking, refers to writing the entire process, not just part, to disk
- Page-Out - запись страницы на диск. Page-In - возврат с диска в физическую память
- Page fault - когда ядру нужна страница, но её нет в физической памяти. Требуется выполнить Page-In
- thrashing - постоянный page-in - page-out
- Huge Page - большие страницы (больше 4 кБ)
- Page Cache - файлы с HDD, хранящиеся в RAM для бстрого доступа к ним. Поле Cache в выводе команды free
- Dirty Pages - страницы в Page Cache, которые ещё не были записаны на диск. После вызова sync пишутся на диск
- strace в Linux
useradd, passwd, usermod, userdel, groupadd, groupdel, groupmod, groups, id, newgrp, gpasswd, chgrp, chown, chmod
- SUID, SGID
- sticky bit - Каталог с установленным sticky-битом означает, что удалить файл из этого каталога может только владелец файла или суперпользователь
- umask - вычитаемая маска для определения прав файлов и каталогов при создании:
- полная маска для каталога 777
- umask - 022
- созданный каталог с правами 755
- capabilities: getcap, setcap, capsh
- PolKit: pkaction, pkcheck, pkexec, pkttyagent
- ACL: setfacl,
- PAM: ldd /bin/su | grep pam
- Whai is PAM?
- Основы и настройка PAM
- CAP_SYS_ADMIN: the new root
- OpenNET. Как работает PAM
- Linux Capabilities In Practice
- AppArmor
sesearch, seinfo, findcon, audit2allow, audit2why, chcon, restorecon, autorelabel, getsebool, setsebool
- vagrant-bacula
- Linux rsync command
- Cкоростная синхронизация миллиарда файлов
- Сравнение способов резервного копирования
- Аудит системных событий в Linux
- Kdump — диагностика и анализ причин сбоев ядра
- Анализ падения ядра в Linux
- Аудит системных событий
- Удаленное логирование в journald или Всё ещё «это вам не нужно»?
- Настройка Rsyslog
- Управление демоном syslogD
- journalctl --field=_TRANSPORT - все доступные транспорты
- journalctl _TRANSPORT=syslog - то, что пришло через syslog
- journalctl _TRANSPORT=syslog -o verbose - структурированные данные
- journalctl -p crit -p emerg (0) alert (1) - PRIORITY=1 crit (2) - PRIORITY=1 err (3) - PRIORITY=3 warning (4) notice (5) info (6) debug (7)
- journactl -u mysqld.service -f - отслеживание лога mysql (аналог tail -f)
- journalctl _UID=0 - все с UID 0
- journalctl --list-boots - показать время ребутов сервера (если нет директории то будет показан только последний)
- journalctl -b -2 - показать логи второго бута
- Network Manager CLI
- A tcpdump Tutorial with Examples
- tcpdump examples
- IPROUTE2 Utility Suite Howto
- []
FreeIPA, Apache Directory Studio, ldapvi, NSSS, SSSD, NSSwitch
- Учебник IPTables U32
- Руководство по iptables
- FirewallD
- TPROXY
- ipset
- Port knocking
- Iptables Tutorial
- Борьба с SYN-флудом при помощи iptables и SYNPROXY
- sysctl_conntrack
- Understanding Firewalld in Multi-Zone Configurations
- How DNSSEC Works
- the Bundy Administration Guide
- Split DNS
- Understanding views in BIND 9, by example
- DNS сервер BIND (теория)
- Настройка Dynamic DNS на базе Bind9 и nsupdate
- Пряморукий DNS: делаем правильно
- Настройка DNSSEC на BIND
https://github.com/erlong15/vagrant-bind
siege, Yandex tank, tsung, proxysql, odyssey (SQL DB) syscalls: select(), epoll(), io_submit() ghost
- nginx. Руководство для начинающих
- nginx tutorial
- nginx tutorials
- High Performance Browser Networking
- DO nginx configurator
- select, poll, epoll
- PHP FPM Optimization
nginx, resty, lua - сборка RPM - самое начало видео 11 части AWS
ctrl+r - redo
A/I (^$)- string start/end
w/W (b/B) - one word forward (backward)
gg - to first line
G - to last line
:30 - to line 30
ctrl+u/d - pgup/pgdn
z/zt -
dd/d^/d$/dw - delete line, to linestart, to linednd, delete word
dt. - delete all before .
x - delete symbol under cursor
2yy - copy 2 lines
p/P - paste
s/что менять/на что менять - в строке
%s/что менять/на что менять - во всем файле
<</>> - сдвинуть строку
S - прыгнуть на нужное кол-во отступов
% - прыгнуть на открывающую/закрывающую скобку
Частые вопросы на собеседованиях: Ещё
- работа тут glassdoor, quora, myvisajobs, indeed
- как устраиваться Цинизм в IT: Павел Одинцов, CloudFlare LoadAvarage, Process Scheduling, IO Scheduling, Kernel Modules File Systems: Deny root delete, Suid Bit, Journaling file system, COW Network: TIME_WAIT, Shaped Ingress, Vlan, NAT, Bridge, Cluster Networking: K8, Swarm
- Процесс на С съел 100% CPU. Как узнать почему?
- Сервер писал в файл. Произошел kernel panic, данные стерлись. Почему? Как этого избежать?
- Что такое Page Cache? Coredump? CPU HW exception?
- Есть ли утечки памяти в языках с garbage collector?
- SIGKILL VS SIGINT
- Будет ли блокироваться запись в сетевой сокет если удаленный сервер ещё не принял данные?
- Что делает скрипт?
#!/bin/env bash
while read k;
do echo $k;
done < ./r;
---
- Что происходит при kubectl create pod? Взаимодействие etcd, api-manager, resource-controller, kubelet