Главная Темы Тема 3: Файловые операции и диски
$
Главная Темы Упражнения Шпаргалка Ресурсы
03
Диски и хранилища

Файловые операции и диски

Файловые системы, inode, монтирование, ссылки, RAID-массивы, LVM, разметка дисков и этапы загрузки Linux.

🕐 ~30 мин чтения 🟡 Уровень: средний
💡
Что узнаешь из этой темы:
  • Как данные хранятся на дисках и что такое файловая система
  • Что такое inode и почему имя файла — это не файл
  • Как мониторить место и нагрузку на диск
  • Как подключать (монтировать) устройства
  • Чем отличаются жёсткие и символические ссылки
  • Что такое RAID, LVM, MBR и GPT
  • Как происходит загрузка Linux от нажатия кнопки до рабочего стола

💾 Что такое файловая система?

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

📂

Организация данных

Создание структуры каталогов и файлов — то самое дерево папок, которое ты видишь в системе.

🔐

Управление доступом

Кто может читать, записывать и выполнять файлы — права rwx из предыдущей темы.

📋

Метаданные

Размер файла, дата создания, владелец, права — всё это хранится в специальных структурах (inode).

Эффективность

Минимизация фрагментации и быстрый доступ к данным — ключевая задача любой ФС.

📊 Популярные файловые системы

Файловая системаОСОсобенности
ext4LinuxСтандарт в большинстве дистрибутивов. Стабильная, журналируемая, до 1 ЭБ
ext3LinuxПредшественник ext4. Журналирование, но медленнее и меньше лимиты
XFSLinuxВысокая производительность на больших файлах. Используется в RHEL/CentOS
BtrfsLinuxСовременная ФС: снимки (snapshots), сжатие, самовосстановление
NTFSWindowsШифрование, сжатие, восстановление данных. Linux может читать/писать через ntfs-3g
FAT32Кросс-платформаСовместима с любой ОС. Лимит файла — 4 ГБ. Для флешек
exFATКросс-платформаЭволюция FAT32 без лимита 4 ГБ. Для SD-карт, внешних дисков
💡
Какую выбрать? Для Linux-сервера — ext4 (надёжность) или XFS (большие файлы). Для флешки — exFAT. Для экспериментов — Btrfs (snapshots!).

🧩 Inode (индексный дескриптор)

Inode — это структура данных, которая хранит всю информацию о файле, кроме его имени и содержимого. Каждый файл и каталог имеет свой уникальный номер inode.

📏
Размер файла

Сколько байт занимает файл на диске

🕐
Временные метки

Создание, изменение, последний доступ

🔐
Права и владелец

rwx, UID, GID — кто и что может делать

💿
Ссылки на блоки

Где физически лежат данные на диске

inode
user@linux:~$
ls -i file.txt
12345 file.txt
# -i показывает номер inode. У каждого файла он уникален
user@linux:~$
stat file.txt
File: file.txt Size: 1234 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 12345 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2026-04-17 08:00:00 Modify: 2026-04-16 15:30:00 Change: 2026-04-16 15:30:00
📝
Важно: Имя файла хранится не в inode, а в записи каталога. Каталог — это таблица, где каждая строка связывает имя с номером inode. Поэтому один файл может иметь несколько имён (жёстких ссылок).

📊 Просмотр места на диске

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

место на диске
user@linux:~$
df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 23G 25G 48% / /dev/sdb1 100G 67G 28G 71% /data tmpfs 3.9G 0 3.9G 0% /dev/shm
# -h человекочитаемый формат (GB, MB), -T покажет тип ФС
user@linux:~$
du -sh /var/log
1.2G /var/log
# -s итог по каталогу, -h читаемый формат. Полезно найти «тяжёлые» папки
user@linux:~$
du -sh /var/log/* | sort -rh | head -5
# Топ-5 самых больших файлов/папок в /var/log
user@linux:~$
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk └─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data
# Информация о дисках и разделах. Показывает структуру без лишних деталей
user@linux:~$
ncdu /home
# Интерактивный анализ диска (нужно установить: sudo apt install ncdu)

⚡ Нагрузка на диск

Если система тормозит, а CPU не загружен — часто виноват именно диск. Эти утилиты помогут найти проблему.

📈

iotop

Показывает процессы, которые больше всего нагружают диск. Аналог top, но для I/O.

sudo iotop
📊

iostat

Статистика ввода-вывода. Ключевые метрики: %util (загрузка), await (время ожидания).

iostat -x 1
🖥️

vmstat

Общая информация о ресурсах: CPU, память, I/O. Колонки bi/bo — дисковые операции.

vmstat 1
💡
Совет: если %util в iostat близок к 100% — диск перегружен. Посмотри через iotop, какой процесс создаёт нагрузку, и реши: оптимизировать, перенести на другой диск или заменить на SSD.

🔌 Монтирование

Монтирование — это подключение файловой системы (диска, флешки, сетевого ресурса) к определённому каталогу в дереве Linux. Без монтирования система «не видит» устройство.

📂
Точка монтирования — любой существующий каталог (обычно в /mnt или /media). После монтирования через него доступно содержимое устройства.
монтирование
user@linux:~$
lsblk
# Посмотреть доступные устройства и разделы перед монтированием
user@linux:~$
sudo mount /dev/sdb1 /mnt
# Подключить раздел /dev/sdb1 к каталогу /mnt
user@linux:~$
mount | grep sdb1
# Проверить, что устройство подключено
user@linux:~$
sudo umount /mnt
# Размонтировать (отключить). Нельзя, если каталог используется!
user@linux:~$
cat /etc/fstab
# Файл автомонтирования при загрузке системы
💡
/etc/fstab — файл, в котором прописаны устройства, монтируемые автоматически при старте системы. Каждая строка: устройство, точка монтирования, тип ФС, опции, дамп, проверка.

🗄️ RAID

RAID (Redundant Array of Independent Disks) — технология объединения нескольких дисков в массив для повышения производительности или надёжности.

УровеньПринципСкоростьОтказоустойчивостьПрименение
RAID 0
Striping
Данные делятся на блоки и пишутся на все диски параллельно ⚡ Максимум ❌ Нет (сбой 1 диска = потеря всего) Кеш, временные данные
RAID 1
Mirroring
Данные зеркалируются: записываются одновременно на все диски 👍 Обычная ✅ Высокая (работает пока есть хоть 1 диск) Критичные данные, БД
RAID 5
Striping + Parity
Данные + блоки чётности распределены по всем дискам 👍 Хорошая ✅ Выдержит 1 сбой Серверы, NAS-хранилища
RAID 10
1+0
Сначала зеркалирование (RAID 1), потом распределение (RAID 0) ⚡ Высокая ✅ Очень высокая Высоконагруженные БД
💡
RAID — не замена резервным копиям! RAID защищает от отказа диска, но не от случайного удаления данных, вирусов или пожара. Всегда делай бэкапы по правилу 3-2-1.

📦 LVM — Logical Volume Manager

LVM — система управления дисковыми разделами, которая делает их гибкими. Можно изменять размеры, объединять диски и добавлять новые — без остановки системы.

1
Physical Volume (PV)

Физический диск или раздел: /dev/sda1, /dev/sdb

2
Volume Group (VG)

Группа PV — общий «пул» памяти

3
Logical Volume (LV)

Логический раздел внутри VG — виден системе как обычный диск

LVM — основные команды
root@linux:~#
pvcreate /dev/sdb
# Инициализировать диск как Physical Volume
root@linux:~#
vgcreate my_vg /dev/sdb
# Создать Volume Group из PV
root@linux:~#
lvcreate -L 20G -n my_lv my_vg
# Создать Logical Volume на 20 GB
root@linux:~#
lvextend -L +10G /dev/my_vg/my_lv
# Расширить LV на 10 GB без остановки системы!
root@linux:~#
pvs && vgs && lvs
# Просмотр PV, VG и LV

💿 MBR и GPT

Прежде чем создать файловую систему, диск нужно разметить. Существуют два стандарта разметки: старый MBR и современный GPT.

🧓 MBR (Master Boot Record)

Первый сектор диска (512 байт): загрузчик + таблица разделов.

⚠️ Ограничения:

  • Максимум 4 основных раздела
  • Максимальный размер раздела — 2 ТБ
  • Таблица хранится в одном месте — риск повреждения
🆕 GPT (GUID Partition Table)

Часть стандарта UEFI. Современная замена MBR.

✅ Преимущества:

  • До 128 разделов
  • Диски свыше 9 зеттабайт
  • Несколько копий таблицы разделов
  • Контрольные суммы CRC32
📝
Вывод: для современных дисков — всегда выбирай GPT. MBR актуален только для старых систем с BIOS или дисков меньше 2 ТБ, где нужна максимальная совместимость.

🚀 Этапы загрузки Linux

Что происходит от нажатия кнопки питания до появления командной строки — 4 ключевых этапа.

1️⃣
BIOS / UEFI

BIOS: проверяет оборудование (POST), ищет загрузочный диск по MBR, передаёт управление загрузчику.
UEFI: современная замена BIOS. Поддерживает GPT, графический интерфейс, Secure Boot, быстрый старт. Ищет файл EFI/BOOT/BOOTX64.EFI.

2️⃣
Загрузчик (Bootloader) — GRUB

GRUB (GNU GRand Unified Bootloader) — самый популярный загрузчик для Linux.
Показывает меню выбора ОС, загружает ядро в память и передаёт ему управление.
⚠️ Повреждённый GRUB = система не запустится. Восстанавливается через Live USB.

3️⃣
Ядро Linux (Kernel)

Ядро загружается в память, инициализирует оборудование (драйверы, прерывания), монтирует корневую файловую систему /.
Если ядро не способно найти / — ты увидишь «kernel panic».

4️⃣
Инициализация сервисов — Systemd

systemd — современный менеджер запуска (PID 1). Монтирует остальные разделы (/home, /var), запускает все фоновые службы параллельно.
После завершения — появляется экран входа или командная строка.
Старый аналог: SysVinit (поочерёдный запуск служб — медленнее).

загрузка и systemd
user@linux:~$
systemctl list-units --type=service --state=running
# Посмотреть все запущенные службы
user@linux:~$
systemd-analyze
# Время загрузки системы по этапам
user@linux:~$
systemd-analyze blame | head -10
# Топ-10 служб по времени запуска — найди тормоза загрузки
user@linux:~$
dmesg | less
# Журнал ядра при загрузке — ошибки оборудования, драйверов

🏋️ Практические упражнения

Задания для закрепления материала. Выполняй на виртуальной машине (VM) или VPS.

01

Разметка дисков и файловые системы

Средний ~20 мин

Требования:

  1. Создайте 3 виртуальных диска (файла), объёмом по 1ГБ каждый.
  2. Разметьте созданные диски:
    • Разметьте disk1.img в формате MBR, создайте один раздел и отформатируйте его в ext4.
    • Разметьте disk2.img в формате GPT, создайте два раздела: xfs и btrfs.
    • Используйте parted для гибкой разметки третьего диска (disk3.img).
  3. Настройка файловой системы:
    • (По возможности) на btrfs или ext4 измените настройки inodes или другие параменты, если ФС это позволяет.
    • Выполните команды для проверки состояния файловой системы.
💡 Показать решение
задание 1
user@linux:~$
fallocate -l 1G disk1.img && fallocate -l 1G disk2.img && fallocate -l 1G disk3.img
# Создаем виртуальные диски по 1GB
user@linux:~$
sudo fdisk disk1.img
# MBR: нажми 'o' (создать DOS/MBR таблицу), затем 'n' (новый раздел), 'p', enter, enter, enter, 'w' (сохранить)
user@linux:~$
sudo partprobe disk1.img
user@linux:~$
sudo losetup -fP disk1.img
# Монтируем файл как loop-устройство (например, /dev/loop0)
user@linux:~$
sudo mkfs.ext4 /dev/loop0p1
# Форматируем раздел в ext4
user@linux:~$
sudo gdisk disk2.img
# GPT: нажми 'o' (GPT таблица), затем 'n', enter, enter, '+500M', 'n', enter, enter, enter. И 'w' (сохранить)
user@linux:~$
sudo losetup -fP disk2.img
# Например, это стало /dev/loop1 (содержит loop1p1 и loop1p2)
user@linux:~$
sudo mkfs.xfs /dev/loop1p1
user@linux:~$
sudo mkfs.btrfs /dev/loop1p2
user@linux:~$
sudo parted disk3.img mktable gpt mkpart primary ext4 1MiB 100%
# Гибкая разметка диска 3 одним разделом через parted
user@linux:~$
sudo tune2fs -i 30d /dev/loop0p1
# Изменение параметров. Здесь задаем интервал проверки ФС в 30 дней для ext4
user@linux:~$
sudo e2fsck -f /dev/loop0p1
# Проверка состояния файловой системы (ext4)
02

Ручное и автоматическое монтирование

Новичок ~15 мин

Требования:

  1. Смонтируйте созданные разделы (из задания 1) в директории /mnt/disk1, /mnt/disk2, /mnt/disk3.
  2. Проверьте доступность дисков через lsblk и df -h.
  3. Добавьте записи для каждого диска в файл /etc/fstab.
  4. Перезагрузите систему (или перемонтируйте всё) и проверьте, что диски автоматически монтируются.
💡 Показать решение
задание 2
user@linux:~$
sudo mkdir -p /mnt/disk1 /mnt/disk2 /mnt/disk3
# Создаем точки монтирования
user@linux:~$
sudo mount /dev/loop0p1 /mnt/disk1
user@linux:~$
sudo mount /dev/loop1p1 /mnt/disk2
user@linux:~$
sudo mount /dev/loop1p2 /mnt/disk3
# Ручное монтирование
user@linux:~$
df -h && lsblk
# Проверка доступности
user@linux:~$
sudo nano /etc/fstab
# Добавляем строки (замените loop-устройства на нужные, либо используйте UUID - можно узнать через blkid):
# /dev/loop0p1 /mnt/disk1 ext4 defaults 0 2
# /dev/loop1p1 /mnt/disk2 xfs defaults 0 2
# /dev/loop1p2 /mnt/disk3 btrfs defaults 0 2
user@linux:~$
sudo umount /mnt/disk* && sudo mount -a
# Отмонтируем и проверяем работу fstab. Если ошибок нет — монтирование прошло успешно.
03

Мониторинг места, поиск файлов и SMART

Средний ~15 мин

Требования:

  1. Выполните df -h для анализа свободного и занятого пространства.
  2. Создайте несколько крупных файлов (например, 500 МБ, 700 МБ) и найдите их с помощью du.
  3. Установите и используйте ncdu для интерактивного анализа использования пространства.
  4. Проверьте состояние ваших реальных физических дисков (не loop-устройств) с помощью smartctl.
💡 Показать решение
задание 3
user@linux:~$
df -h
user@linux:~$
fallocate -l 500M /mnt/disk1/bigfile1.dat
user@linux:~$
fallocate -l 700M /mnt/disk2/bigfile2.dat
# Создаем крупные файлы
user@linux:~$
du -ah /mnt/disk1 /mnt/disk2 | grep 'M\lG' | sort -rn
# Ищем файлы, с размерами в МБ и ГБ
user@linux:~$
sudo apt install ncdu && ncdu /mnt
# Устанавливаем и запускаем ncdu для директории /mnt
user@linux:~$
sudo apt install smartmontools
user@linux:~$
sudo smartctl -a /dev/sda
# Устанавливаем smartctl и смотрим состояние основного диска /dev/sda
04

Опции монтирования и квоты

Продвинутый ~20 мин

Требования:

  1. Измените опции монтирования в /etc/fstab. Настройте:
    • Только для чтения (ro)
    • Без кеширования (sync)
    • Ограничение выполнения скриптов/файлов (noexec)
  2. Включите поддержку квот на одном из дисков (опция usrquota,grpquota).
  3. Создайте тестового пользователя и назначьте ему квоту (например, 100МБ) через edquota.
💡 Показать решение
задание 4
user@linux:~$
sudo nano /etc/fstab
# Изменяем fstab (пример). Добавляем опции:
# /dev/loop0p1 /mnt/disk1 ext4 defaults,ro 0 2
# /dev/loop1p1 /mnt/disk2 xfs defaults,sync,noexec 0 2
# /dev/loop1p2 /mnt/disk3 btrfs defaults,usrquota,grpquota 0 2
user@linux:~$
sudo mount -a -o remount
# Перечитываем опции (remount)
user@linux:~$
sudo quotacheck -cumg /mnt/disk3 && sudo quotaon -v /mnt/disk3
# Инициализируем и включаем квоты (требуется пакет quota)
user@linux:~$
sudo useradd -m testuser
user@linux:~$
sudo edquota -u testuser -f /mnt/disk3
# Откроется редактор настроек квоты пользователей.
# Увеличьте soft и hard лимиты (в блоках по 1KB) до нужных величин (напр 100000 110000)
05

Скорость и отказоустойчивость

Средний ~15 мин

Требования:

  1. С помощью dd выполните тест скорости записи на каждую файловую систему.
  2. Аналогично выполните тест скорости чтения.
  3. Создайте файлы на дисках и имитируйте аварийную загрузку: сбросьте кэш (sync), выполните reboot (либо используйте SysRq комбинацию echo b > /proc/sysrq-trigger, однако это крашнет вашу машину - лучше проверьте обычным образом). Проверьте целостность дисковой ФС (fsck).
  4. Используйте iostat для анализа метрик I/O при записи.
💡 Показать решение
задание 5
user@linux:~$
dd if=/dev/zero of=/mnt/disk1/test_write.raw bs=1M count=200 oflag=dsync
# Тест скорости записи. Флаг dsync отключает кеширование для точности. Повторить для disk2/disk3
user@linux:~$
sysctl -w vm.drop_caches=3
# Очистка кешей чтения перед тестом
user@linux:~$
dd if=/mnt/disk1/test_write.raw of=/dev/null bs=1M
# Тест скорости чтения.
user@linux:~$
iostat -d 1 10
# Мониторинг I/O метрик раз в секунду в течение 10 секунд (рекомендуется запустить в отдельном окне параллельно с dd)
user@linux:~$
sudo rmdir /mnt/disk1; sudo e2fsck -f /dev/loop0p1
# Для проверки целостности ФС (ext4) должна быть размонтирована. Выявляем сбои.