bubnovd / Linux-admin

Articles from Linux admin course with my own additions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

01. Kernel

Utilites & man pages


02. Disk, RAID


03. LVM, FS, Storage

  • 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% блоков диска. Изменяемо

Utilites & man pages

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

В современных системах имеет смысл выделять при установке: / - 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 % её объёма выделяется под индексные дескрипторы . Все айноды хранятся в одной фиксированной таблице. Аллоцируются при создании ФС (новые ФС умеют динамически создавать)

FS

  • ext2 - standard
  • ext3 = ext2 + journaling
  • ext4 - increases few size limits, increases performance + extents (несколько блоков)

ФС кэширует дисковые блоки. Любые блоки могут кэшироваться, включая суперблоки, блоки с айнодами. sync записывает кэш в нужные блоки диска

SSD

Состоит из ячеек флеш памяти, каждая из которых гораздо медленнее HDD, но благодаря параллельности работает быстрее. Страница (4 KiB) может быть перезаписана ограниченное количество раз. Поэтому прошивка распределяет запись между всеми страницами. Похоже на virtual memory

Страницы должны быть стерты перед записью. Стирание - гораздо более медленная опрерация, чем запись. Отдельные страницы не стираются - только кластеры из смежных страниц (обычно 128 страниц или 512 KiB)


04. Boot, BIOS, GRUB

/proc/cmdline - строка запуска ядра, конфигурация

Utilites & man pages

bootparam, mkinitrd


05. SystemD

/sbin/init fork, setsid В основе systemd лежит cgroups Systemd-nspawn

systemd

Utilites & man pages


06. BASH, AWK

test set -x - debug mode exec

Utilites & man pages

hotkeys


07. Package Management

Utilites & man pages


08. Processes

Utilites & man pages

ps

[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.

09. Docker


10. Ansible

ansible-inventory --graph --vars


11 Namespaces, cgroups

Controllers

  • blkio: управление доступно полосой при доступе к блочным устройствам
  • cpu: управление доступом к ресурсам процессора
  • cpuacct: аккаунтинг cpu; используется совместно с контроллером cpu
  • cpuset: выделение отдельных процессоров группе
  • devices: ограничение доступа к устройствам
  • freezer: заморозка процессов (спасибо команде OpenVZ)
  • memory: ограничение памяти для группы
  • net_cls: шейпинг (man 8 tc)
  • perf_event: интерфей сдля perf
  • hugetlb: ограничение работы с huge pages
  • pid: ограничение числа процессов

12. Performance

Utilites & man pages

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

14. AAA

Utilites & man pages

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

15. SELinux

Utilites & man pages

sesearch, seinfo, findcon, audit2allow, audit2why, chcon, restorecon, autorelabel, getsebool, setsebool


16. Backup


17. Logs

JournalD options

  • 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 - показать логи второго бута

18. Архитектура сетей


19. LDAP

FreeIPA, Apache Directory Studio, ldapvi, NSSS, SSSD, NSSwitch


20. VLAN, LACP

Network Tuning


21. Trffic Filtering


26.DNS

Homework

https://github.com/erlong15/vagrant-bind


27. Web

siege, Yandex tank, tsung, proxysql, odyssey (SQL DB) syscalls: select(), epoll(), io_submit() ghost


Additional

nginx, resty, lua - сборка RPM - самое начало видео 11 части AWS


vim

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

About

Articles from Linux admin course with my own additions


Languages

Language:Shell 82.4%Language:Python 15.0%Language:Dockerfile 1.0%Language:C 0.9%Language:Awk 0.7%