Блог "Дети ОИТа"
/поиск

Объединенная статья: Алгоритмы восстановления файловой системы XFS: расширенное руководство и eBPF для наблюдаемости Linux: архитектура, production-ready примеры и типовые ошибки

Введение

Файловая система XFS является одной из наиболее популярных и мощных файловых систем в Linux, особенно для высокопроизводительных систем хранения данных. Однако, как и любая другая файловая система, XFS может быть подвержена повреждениям из-за аппаратных сбоев, программных ошибок или человеческого фактора. Восстановление файловой системы XFS — это критически важный процесс, требующий глубокого понимания её архитектуры и инструментов восстановления.

Важность восстановления XFS

Повреждение файловой системы может привести к потере данных, что в критически важных системах может иметь катастрофические последствия. Восстановление XFS позволяет минимизировать риск потери данных и обеспечить непрерывность работы систем.

Типичные причины повреждений

Перед рассмотрением методов восстановления важно понять, почему файловые системы могут повреждаться:

  • Аппаратные сбои: отказы жестких дисков, RAID-массивов или других компонентов хранения.
  • Программные ошибки: некорректная работа приложений или системных утилит.
  • Человеческий фактор: случайное удаление данных или неправильные действия администраторов.
  • Вирусы и вредоносное ПО: атаки, приводящие к повреждению файловой системы.

Инструменты для восстановления XFS

xfs_repair

xfs_repair — основной инструмент для проверки и восстановления файловых систем XFS. Он поддерживает различные типы операций, включая проверку целостности метаданных и их восстановление.

Использование:

sudo xfs_repair /dev/sda1

xfs_metadump

xfs_metadump позволяет создавать копии метаданных файловой системы для анализа и восстановления.

Использование:

sudo xfs_metadump /dev/sda1 /path/to/metadump

xfs_copy

xfs_copy используется для создания копий файловых систем XFS на другие носители или в файлы.

Использование:

sudo xfs_copy /dev/sda1 /path/to/backup

Методы восстановления

1. Проверка файловой системы

Перед началом восстановления рекомендуется выполнить полную проверку файловой системы с помощью xfs_repair.

2. Создание резервной копии

Перед любыми действиями по восстановлению рекомендуется создать резервную копию поврежденного раздела.

sudo xfs_copy /dev/sda1 /path/to/backup

3. Восстановление данных

Если проверка и восстановление с помощью стандартных инструментов не помогли, можно использовать специализированные утилиты для восстановления данных:

  • testdisk: для восстановления разделов и файловых систем.
  • photorec: для восстановления удаленных файлов.

4. Использование RAID и LVM

Если данные хранятся на RAID-массиве или LVM, важно учитывать особенности восстановления:

  • RAID: восстановление данных с помощью резервных копий или замены неисправных дисков.
  • LVM: использование логических томов для восстановления данных.

Примеры сценариев восстановления

Сценарий 1: Повреждение метаданных

  1. Отключить файловую систему:
    sudo umount /dev/sda1
    
  2. Создать резервную копию метаданных:
    sudo xfs_metadump /dev/sda1 /path/to/metadump
    
  3. Выполнить восстановление:
    sudo xfs_repair /dev/sda1
    

Сценарий 2: Повреждение журнала

  1. Проверить журнал:
    sudo xfs_repair -n /dev/sda1
    
  2. Если журнал поврежден, выполнить восстановление:
    sudo xfs_repair /dev/sda1
    

Рекомендации по предотвращению повреждений

  1. Регулярно выполняйте резервное копирование данных.
  2. Используйте RAID и LVM для повышения надежности хранения данных.
  3. Периодически проверяйте целостность файловых систем с помощью xfs_repair.
  4. Обучайте администраторов методам восстановления и лучшим практикам.

Заключение

Восстановление файловой системы XFS — это критически важная задача, требующая тщательного подхода и использования правильных инструментов. Следуя описанным методам и рекомендациям, системные администраторы могут значительно повысить надежность и доступность данных в Linux-системах.

Хештеги

#XFS #восстановление #файловые_системы #Linux #администрирование #методы_восстановления #инструменты_восстановления

eBPF для наблюдаемости Linux: архитектура, production-ready примеры и типовые ошибки

Аннотация

Практическое руководство по применению eBPF в production: архитектура подсистемы, безопасная загрузка программ, observability-стек (метрики, трейсы, логи), типовые ошибки и чек-лист внедрения. Подходит для SRE и platform-инженеров.

1. Архитектура и безопасность

Компоненты:

  • Ядро: verifier, JIT, maps, helpers, tail calls, BTF.
  • Пользовательское пространство: libbpf/libbpfgo, bpftool, bpftrace.
  • Безопасность: privilege model (CAP_BPF/CAP_PERFMON/CAP_SYS_ADMIN), signed programs, LSM/BPF, ограничение bpf() через sysctl.

Ключевые свойства:

  • Нулевая или минимальная задержка instrumentation.
  • Программируемость без перезагрузки сервисов.
  • Изоляция через верификатор и BTF типов.

2. Production-ready стек

2.1 Метрики: трассировка системных вызовов и latency

Пример на bpftrace для latency fsync:

bpftrace -e 'tracepoint:syscalls:sys_enter_fsync { @start[tid] = nsecs; } tracepoint:syscalls:sys_exit_fsync /@start[tid]/ { @lat = hist(nsecs - @start[tid]); delete(@start[tid]); }'

Экспорт в Prometheus через exporter (например, bcc/parca-agent или кастомный на libbpf):

  • Карты BPF: HISTOGRAM, COUNTER.
  • Скрейпинг каждые 10–15 секунд.

2.2 Трейсы: распределённая трассировка через BPF/USDT

  • USDT в приложениях (PostgreSQL, Nginx, Java): tracepoints без перекомпиляции.
  • Корреляция через сквозные идентификаторы (trace_id) в maps.
  • Агрегация в коллекторе (OpenTelemetry Collector с BPF receiver или vendor-решения).

2.3 Логирование и безопасность

  • Мониторинг аномалий: частые OOM/execve, необычные сетевые соединения.
  • LSM-BPF политики: ограничение file_create/socket_connect по меткам.
  • Audit-совместимость: экспорт в journald/syslog-ng/rsyslog с structured-data.

3. Практические примеры

3.1 Контейнерный observability

  • Отслеживание cgroup переходов, latency планировщика, ошибок cgroup BPF.
  • Изоляция per-namespace: отдельный maps namespace, mount namespace для BPF FS.

3.2 Сетевая наблюдаемость

  • XDP для ранней отбраковки DDoS, учёт по 5-tuple, latency TCP handshake.
  • TC-BPF для маркировки и rate-limit без изменения приложения.

3.3 Профилирование CPU/IO

n

  • perf/perf-tools замена на BPF: on-CPU flamegraphs через stack traces и maps.
  • IO latency по устройствам, выявление «шумных соседей».

4. Типовые ошибки

  • Игнорирование verifier: сложные циклы, недоступные пути, рост стека > 512.
  • Несогласованность BTF: ядро vs user-space, разные версии пакетов.
  • Утечки maps: отсутствие gc, лимиты rlimit_memlock.
  • Отсутствие fallback: программа не загрузилась — сервис без наблюдаемости.
  • Неправильные права: избыточный CAP_SYS_ADMIN вместо CAP_BPF/CAP_PERFMON.

5. Чек-лист внедрения

  • Ядро с CONFIG_BPF, CONFIG_BPF_JIT, BTF включён.
  • Привилегии минимальны: CAP_BPF/CAP_PERFMON.
  • CI проверяет verifier на CI-образе ядра.
  • Maps с лимитами и GC; мониторинг rlimit_memlock.
  • Экспорт метрик в Prometheus; алерты на drop/verifier errors.
  • Runbooks: загрузка/откат BPF-программы, диагностика verifier.
  • Тест восстановления: отключение BPF не ломает SLO.

6. Инструментарий

  • libbpf/bpftool/bpftrace; Cilium/ebpf_exporter/parca-agent.
  • BTF: pahole, kernel-devel-btf, синхронизация с prod-ядром.
  • CI: github actions с matrix по ядрам, signed BPF.

Заключение

eBPF — зрелый production-инструмент при соблюдении дисциплины: минимизация привилегий, BTF-совместимость, наблюдаемость самого eBPF и чёткие runbooks.