Загрузка данных
Отлично. Тогда соберём это не как набор команд, а как **теоретическую картину**, чтобы ты понимал, что именно происходило с диском на каждом этапе и мог объяснить это преподавателю.
---
# 1. Главная идея: диск → раздел → файловая система → монтирование
Это самое важное, что нужно понять.
Когда ты подключил новый виртуальный диск на 100 ГБ, он прошёл через несколько независимых этапов:
```text
Виртуальный HDD 100 ГБ
│
▼
/dev/sdb
│
│ разметка fdisk
▼
┌──────────────┬──────────────┐
│ /dev/sdb1 │ /dev/sdb2 │
│ ~50 ГБ │ ~50 ГБ │
└──────────────┴──────────────┘
│ │
│ mkfs.ext4 │ mkfs.xfs
▼ ▼
ext4 XFS
│ │
│ mount │ mount
▼ ▼
/mnt/fam_ext /mnt/fam_xfs
```
И вот здесь важно различать четыре понятия:
### Диск
Физический или виртуальный накопитель:
```text
/dev/sdb
```
### Раздел
Часть диска:
```text
/dev/sdb1
/dev/sdb2
```
### Файловая система
Способ организации файлов внутри раздела:
```text
ext4
xfs
```
### Точка монтирования
Каталог, через который файловая система становится доступной:
```text
/mnt/fam_ext
/mnt/fam_xfs
```
---
# 2. Что такое `/dev`
`/dev` — один из важнейших каталогов Linux.
В нём находятся **файлы устройств**.
Например:
```text
/dev/sda
/dev/sdb
/dev/sdb1
/dev/sdb2
```
Это не обычные файлы с содержимым диска.
Linux представляет устройства через специальные файлы, благодаря которым программы могут взаимодействовать с устройствами через стандартный интерфейс.
Поэтому:
```text
/dev/sdb
```
означает:
> устройство, соответствующее второму диску.
А:
```text
/dev/sdb1
```
означает:
> первый раздел второго диска.
---
# 3. Как Linux называет диски
В классической схеме:
```text
/dev/sda
/dev/sdb
/dev/sdc
/dev/sdd
```
То есть:
```text
a → первый диск
b → второй
c → третий
d → четвёртый
```
Разделы получают номер:
```text
/dev/sda1
/dev/sda2
/dev/sdb1
/dev/sdb2
```
Однако в современных системах ты также можешь встретить:
```text
/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2
```
Это NVMe-накопители.
Здесь:
```text
nvme0n1
```
— сам диск,
а:
```text
nvme0n1p1
```
— его первый раздел.
---
# 4. Что произошло, когда мы добавили диск
Когда ты создал виртуальный HDD в VirtualBox, гипервизор предоставил виртуальной машине новое блочное устройство.
Linux обнаружил его и создал соответствующий device node:
```text
/dev/sdb
```
Важно:
**Linux обнаружил диск, но это ещё не означает, что на нём есть файловая система.**
На начальном этапе это был просто:
```text
/dev/sdb
100 ГБ
```
Практически пустой накопитель.
---
# 5. Что такое блочное устройство
Диски относятся к **block devices**.
Можно посмотреть:
```bash
ls -l /dev/sdb
```
или:
```bash
lsblk
```
Блочные устройства работают с данными блоками.
Другой распространённый тип устройств — **character devices**.
Например:
```text
/dev/tty
/dev/null
```
Упрощённо:
* block device → диски, SSD, разделы;
* character device → устройства, работающие с потоками символов/байтов.
---
# 6. Зачем нужна разметка диска
Изначально у нас:
```text
/dev/sdb
┌────────────────────────────────────┐
│ 100 GB │
└────────────────────────────────────┘
```
Мы захотели получить два отдельных раздела:
```text
/dev/sdb
┌──────────────────┬─────────────────┐
│ sdb1 │ sdb2 │
│ 50 GB │ 50 GB │
└──────────────────┴─────────────────┘
```
Для этого используется **таблица разделов**.
Она хранит информацию о том:
* где начинается раздел;
* где заканчивается;
* какой у него тип;
* какой размер;
* какие характеристики он имеет.
---
# 7. Что такое `fdisk`
`fdisk` — консольная программа для управления таблицами разделов.
Мы запускали:
```bash
sudo fdisk /dev/sdb
```
То есть сказали:
> «Работай с таблицей разделов диска `/dev/sdb`».
Важно понимать:
**`fdisk` не создаёт файловую систему.**
Он только создаёт/изменяет **разделы**.
То есть:
```text
fdisk
↓
/dev/sdb1
/dev/sdb2
```
А уже:
```text
mkfs.ext4
mkfs.xfs
```
создают файловые системы.
---
# 8. Что такое таблица разделов
Таблица разделов — это структура на самом диске, описывающая его разделы.
Сегодня наиболее распространены:
### MBR
Старый формат.
Ограничения:
* максимум 4 primary-раздела;
* ограничение на размер диска примерно 2 ТБ при классическом использовании;
* используется в старых системах.
### GPT
Современный стандарт.
Преимущества:
* поддерживает очень большие диски;
* большое количество разделов;
* хранит резервные копии структуры;
* используется совместно с современными UEFI-системами.
На современных системах обычно используется **GPT**.
---
# 9. Что делает команда `n` в fdisk
Когда мы вводили:
```text
n
```
мы говорили:
> New partition — создать новый раздел.
После этого `fdisk` спрашивал:
```text
Partition number
First sector
Last sector
```
---
# 10. Что такое сектор
Диск физически/логически разделён на небольшие блоки адресуемого пространства — сектора.
Например:
```text
Sector 2048
Sector 2049
Sector 2050
...
```
Поэтому `fdisk` позволяет указать:
```text
First sector
Last sector
```
Когда мы написали:
```text
+50G
```
мы фактически сказали:
> Сделай этот раздел размером примерно 50 ГБ.
---
# 11. Почему после `fdisk` появились `sdb1` и `sdb2`
Потому что мы изменили таблицу разделов:
```text
/dev/sdb
```
превратился логически в:
```text
/dev/sdb1
/dev/sdb2
```
Но **разделы всё ещё не были готовы для хранения файлов**.
Это очень важный момент.
После `fdisk`:
```text
sdb1 → раздел
sdb2 → раздел
```
Но ещё не:
```text
sdb1 → ext4
sdb2 → xfs
```
---
# 12. Что делает `mkfs`
`mkfs` означает:
> **make filesystem**
То есть создать файловую систему.
Например:
```bash
sudo mkfs.ext4 /dev/sdb1
```
означает:
> Создать файловую систему ext4 на разделе `/dev/sdb1`.
А:
```bash
sudo mkfs.xfs /dev/sdb2
```
означает:
> Создать XFS на `/dev/sdb2`.
---
# 13. Что происходит при создании файловой системы
Это гораздо интереснее, чем кажется.
Файловая система создаёт на разделе собственные структуры данных.
Условно:
```text
/dev/sdb1
┌──────────────────────────────────────┐
│ метаданные файловой системы │
├──────────────────────────────────────┤
│ информация о файлах │
├──────────────────────────────────────┤
│ таблицы/структуры │
├──────────────────────────────────────┤
│ данные файлов │
├──────────────────────────────────────┤
│ ... │
└──────────────────────────────────────┘
```
Файловая система отвечает за:
* имена файлов;
* каталоги;
* права доступа;
* владельцев;
* размеры;
* расположение данных;
* свободное место;
* метаданные.
---
# 14. Что такое inode
Особенно важно для ext4.
Файл — это не просто:
```text
имя → данные
```
Файловая система должна хранить информацию о файле:
* размере;
* владельце;
* правах;
* времени создания/изменения;
* где находятся его блоки данных.
В Unix-подобных файловых системах значительная часть этой информации хранится в **inode**.
Упрощённо:
```text
filename
│
▼
inode
│
├── owner
├── permissions
├── size
├── timestamps
└── pointers → blocks with data
```
При этом имя файла и inode — концептуально разные вещи.
---
# 15. Что такое ext4
**ext4** — одна из основных файловых систем Linux.
Название:
> Fourth Extended Filesystem.
То есть четвёртая версия семейства ext.
Характеристики ext4:
* журналирование;
* поддержка больших файлов;
* поддержка больших файловых систем;
* inode;
* extents;
* хорошая универсальность;
* широко используется в Linux.
---
# 16. Что такое журналирование
ext4 является **journaling filesystem**.
Идея примерно такая.
Представим, что система выполняет сложную операцию записи.
Без журнала при внезапном отключении питания файловая система могла бы оказаться в противоречивом состоянии.
Журнал позволяет сначала записать информацию о предполагаемых изменениях, а затем выполнить их.
Упрощённо:
```text
Операция
↓
journal
↓
изменение ФС
```
После сбоя система может использовать журнал для восстановления согласованности.
---
# 17. Что такое XFS
**XFS** — высокопроизводительная журналируемая файловая система Linux.
Она особенно хорошо подходит для:
* больших файлов;
* больших файловых систем;
* серверов;
* больших объёмов данных;
* высоких нагрузок на ввод-вывод.
У XFS есть важная особенность:
> **XFS нельзя штатно уменьшить.**
То есть:
```text
100 GB XFS
↓
50 GB
```
сделать простым уменьшением файловой системы нельзя.
Обычно нужно создавать новую файловую систему нужного размера и переносить данные.
---
# 18. ext4 vs XFS
| Характеристика | ext4 | XFS |
| --------------- | ---------------- | ------------------------------ |
| Linux | Да | Да |
| Журналирование | Да | Да |
| Большие файлы | Да | Да |
| Серверы | Да | Да |
| Можно увеличить | Да | Да |
| Можно уменьшить | Да | Нет |
| Универсальность | Очень высокая | Очень высокая |
| Использование | Общее назначение | Часто серверные/большие данные |
Не стоит воспринимать это как:
> XFS хорошая, ext4 плохая.
Это разные инструменты для разных сценариев.
---
# 19. Зачем был нужен `xfsprogs`
Ты устанавливал:
```bash
sudo apt install xfsprogs
```
`xfsprogs` содержит инструменты для работы с XFS.
Например:
```bash
mkfs.xfs
xfs_info
xfs_repair
xfs_growfs
```
Поэтому после установки стало возможно выполнить:
```bash
sudo mkfs.xfs /dev/sdb2
```
---
# 20. Что такое UUID
После создания файловой системы у неё появляется идентификатор:
```text
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```
UUID — **Universally Unique Identifier**.
Посмотреть его можно:
```bash
blkid
```
или:
```bash
lsblk -f
```
Например:
```text
/dev/sdb1
UUID="1234-5678..."
TYPE="ext4"
/dev/sdb2
UUID="abcd-efgh..."
TYPE="xfs"
```
---
# 21. Почему `fstab` использует UUID
Можно было написать:
```text
/dev/sdb1 /mnt/fam_ext ext4 defaults 0 2
```
Но это не лучший вариант.
Потому что имена устройств могут измениться.
Сегодня:
```text
/dev/sdb
```
завтра устройство в другой конфигурации может оказаться:
```text
/dev/sdc
```
UUID файловой системы при этом остаётся тем же.
Поэтому:
```text
UUID=...
```
надёжнее.
---
# 22. Что такое монтирование
Вот это одна из **самых важных концепций Linux**.
В Windows ты привык:
```text
C:\
D:\
E:\
```
В Linux нет такого принципа.
Есть **единое дерево каталогов**, начинающееся с:
```text
/
```
Новый диск не становится автоматически:
```text
D:\
```
Вместо этого его файловая система подключается к существующему каталогу.
Например:
```text
/mnt/fam_ext
```
---
# 23. Что произошло при `mount`
Мы выполнили:
```bash
sudo mount /dev/sdb1 /mnt/fam_ext
```
Это означает:
> Возьми файловую систему, находящуюся на `/dev/sdb1`, и подключи её к каталогу `/mnt/fam_ext`.
До монтирования:
```text
/mnt/fam_ext
```
был обычным каталогом.
После:
```text
/mnt/fam_ext
│
▼
/dev/sdb1
│
▼
ext4
```
Теперь содержимое `/dev/sdb1` доступно через:
```text
/mnt/fam_ext
```
---
# 24. А что происходит со старыми файлами каталога?
Это интересный момент.
Если в:
```text
/mnt/fam_ext
```
были какие-то файлы, а потом туда смонтировали файловую систему, эти файлы **не удаляются**, но становятся временно невидимыми.
Почему?
Потому что поверх каталога появилась смонтированная файловая система.
После `umount` они снова станут видны.
---
# 25. `mount` и `umount`
Монтирование:
```bash
mount
```
Размонтирование:
```bash
umount
```
Например:
```bash
sudo umount /mnt/fam_ext
```
Обрати внимание:
команда называется **`umount`**, а не `unmount`.
---
# 26. Почему нельзя просто так размонтировать занятую файловую систему
Если какой-нибудь процесс использует:
```text
/mnt/fam_ext
```
Linux может сказать:
```text
target is busy
```
Например, если ты находишься внутри:
```bash
cd /mnt/fam_ext
```
и пытаешься:
```bash
sudo umount /mnt/fam_ext
```
может возникнуть проблема.
Нужно сначала выйти:
```bash
cd ~
```
и потом размонтировать.
---
# 27. Что такое `/mnt`
`/mnt` — стандартное место для **временного/ручного монтирования файловых систем**.
Например:
```text
/mnt/fam_ext
/mnt/fam_xfs
```
Также существует:
```text
/media
```
который часто используется для автоматически подключаемых съёмных носителей.
---
# 28. Важные каталоги Linux
Это тоже стоит знать.
## `/`
Корень файловой системы.
Всё начинается здесь:
```text
/
```
---
## `/bin`
Основные пользовательские команды.
В современных Debian `/bin` часто является символической ссылкой на `/usr/bin`.
Например:
```text
/bin/ls
/bin/cp
/bin/mv
```
---
## `/sbin`
Системные административные программы.
Например:
```text
/sbin/fsck
```
В современных Debian также часто связан с `/usr/sbin`.
---
## `/etc`
**Конфигурация системы.**
Очень важный каталог.
Например:
```text
/etc/fstab
/etc/hosts
/etc/passwd
/etc/ssh/
```
В нашей лабораторной именно здесь находится:
```text
/etc/fstab
```
---
# 29. `/home`
Домашние каталоги пользователей:
```text
/home
├── user1
├── user2
└── nasyrov
```
Например:
```text
/home/nasyrov
```
---
# 30. `/root`
Домашний каталог суперпользователя `root`.
Не путать:
```text
/
```
и:
```text
/root
```
`/` — корень всей файловой системы.
`/root` — домашний каталог пользователя root.
---
# 31. `/var`
Переменные данные:
```text
/var/log
/var/cache
/var/lib
```
Например:
```text
/var/log
```
содержит журналы системы и программ.
---
# 32. `/tmp`
Временные файлы.
```text
/tmp
```
Используется программами для временных данных.
---
# 33. `/usr`
Один из крупнейших каталогов Linux.
В нём находятся:
* программы;
* библиотеки;
* документация;
* другие ресурсы.
Например:
```text
/usr/bin
/usr/lib
/usr/share
```
---
# 34. `/dev`
Представление устройств:
```text
/dev/sda
/dev/sdb
/dev/null
/dev/random
```
---
# 35. `/proc`
Очень интересный каталог.
Это **виртуальная файловая система**, предоставляющая информацию о ядре и процессах.
Например:
```text
/proc/cpuinfo
/proc/meminfo
/proc/1/
```
Это не обычные файлы, лежащие на диске.
---
# 36. `/sys`
Ещё одна виртуальная файловая система.
Она предоставляет информацию о:
* устройствах;
* драйверах;
* ядре;
* аппаратных компонентах.
---
# 37. `/run`
Временные данные работающей системы:
```text
/run
```
Например:
* PID-файлы;
* Unix sockets;
* runtime information.
---
# 38. Что такое `/etc/fstab`
Название исторически означает:
> **filesystem table**
То есть таблица файловых систем.
Файл:
```text
/etc/fstab
```
описывает файловые системы, которые должны автоматически подключаться системой.
Пример:
```text
UUID=... /mnt/fam_ext ext4 defaults 0 2
UUID=... /mnt/fam_xfs xfs defaults 0 2
```
---
# 39. Структура строки `fstab`
У нас:
```text
UUID=... /mnt/fam_ext ext4 defaults 0 2
```
Есть шесть полей:
```text
┌──────────┬──────────────┬──────┬──────────┬─────┬─────┐
│ device │ mount point │ type │ options │dump │fsck │
└──────────┴──────────────┴──────┴──────────┴─────┴─────┘
```
### 1. Device
```text
UUID=...
```
Что монтировать.
### 2. Mount point
```text
/mnt/fam_ext
```
Куда.
### 3. Filesystem type
```text
ext4
```
Какая файловая система.
### 4. Options
```text
defaults
```
Параметры монтирования.
### 5. Dump
```text
0
```
Не использовать старый механизм `dump`.
### 6. fsck
```text
2
```
Порядок проверки файловой системы.
---
# 40. Что означает `defaults`
Это набор стандартных параметров монтирования.
Обычно включает:
* `rw` — read/write;
* `suid`;
* `dev`;
* `exec`;
* `auto`;
* `nouser`;
* `async`.
То есть:
```text
defaults
```
— стандартное поведение.
---
# 41. Что такое `fsck`
`fsck`:
> **filesystem check**
Инструмент проверки файловой системы.
Условно:
```text
fsck
│
├── обнаруживает проблемы
└── пытается исправить их
```
Для ext4 используется соответствующий механизм проверки, например `e2fsck`.
Для XFS применяется собственный инструмент:
```text
xfs_repair
```
---
# 42. Почему в `fstab` стоит `0 2`
Мы уже обсуждали:
```text
0
```
— не использовать `dump`.
А:
```text
2
```
— при необходимости проверять файловую систему после корневой.
Обычно:
```text
/ → 1
остальные локальные ФС → 2
не проверять → 0
```
---
# 43. Зачем нужен `mount -a`
Очень полезная команда:
```bash
sudo mount -a
```
`-a` означает:
> Mount all.
Linux читает `/etc/fstab` и пытается смонтировать файловые системы, которые там указаны и должны автоматически монтироваться.
Поэтому после изменения:
```text
/etc/fstab
```
можно не перезагружать компьютер.
Просто:
```bash
sudo mount -a
```
Если ошибок нет — конфигурация, скорее всего, корректна.
---
# 44. Как проверить диски
### `lsblk`
Главный инструмент для просмотра блочных устройств:
```bash
lsblk
```
Более информативно:
```bash
lsblk -f
```
Показывает:
* устройство;
* раздел;
* файловую систему;
* UUID;
* точку монтирования.
---
### `blkid`
```bash
sudo blkid
```
Показывает:
* UUID;
* тип файловой системы;
* иногда label.
---
### `df`
```bash
df -h
```
Показывает **использование смонтированных файловых систем**.
Например:
```text
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 50G 100M 47G 1% /mnt/fam_ext
```
Ключ:
```text
-h
```
означает human-readable.
---
### `du`
А вот `du` отвечает уже за использование места **конкретными файлами/каталогами**.
Например:
```bash
du -sh /mnt/fam_ext
```
---
# 45. Разница между `df` и `du`
Очень полезно запомнить:
```text
df → сколько занято на файловой системе
du → сколько занимают конкретные файлы
```
Например:
```bash
df -h /mnt/fam_ext
```
и:
```bash
du -sh /mnt/fam_ext
```
отвечают на немного разные вопросы.
---
# 46. Что такое `sudo`
Мы постоянно использовали:
```bash
sudo fdisk ...
sudo mkfs...
sudo mount...
```
`sudo` позволяет выполнить команду с правами другого пользователя, обычно `root`.
Работа с:
* дисками;
* файловыми системами;
* `/etc`;
* монтированием
обычно требует административных прав.
---
# 47. Почему нельзя бездумно использовать `mkfs`
Команда:
```bash
mkfs.ext4 /dev/sdb1
```
**создаёт новую файловую систему и фактически уничтожает существующую файловую систему на этом разделе.**
Поэтому очень опасно перепутать:
```text
/dev/sdb1
```
с:
```text
/dev/sda1
```
Если сделать:
```bash
sudo mkfs.ext4 /dev/sda1
```
на системном разделе, последствия будут совсем другими.
Поэтому перед работой с дисками всегда:
```bash
lsblk
```
---
# 48. Полный жизненный цикл диска
Теперь можешь мысленно воспроизвести всю лабораторную:
### Шаг 1. Гипервизор
Создаём:
```text
Virtual HDD 100 GB
```
↓
### Шаг 2. Linux обнаруживает устройство
```text
/dev/sdb
```
↓
### Шаг 3. Размечаем диск
```text
fdisk /dev/sdb
```
↓
Получаем:
```text
/dev/sdb1
/dev/sdb2
```
↓
### Шаг 4. Создаём файловые системы
```text
sdb1 → ext4
sdb2 → XFS
```
↓
### Шаг 5. Создаём точки монтирования
```text
/mnt/fam_ext
/mnt/fam_xfs
```
↓
### Шаг 6. Монтируем
```text
sdb1 → /mnt/fam_ext
sdb2 → /mnt/fam_xfs
```
↓
### Шаг 7. Получаем UUID
```bash
blkid
```
↓
### Шаг 8. Записываем в `/etc/fstab`
```text
UUID=... /mnt/fam_ext ext4 defaults 0 2
UUID=... /mnt/fam_xfs xfs defaults 0 2
```
↓
### Шаг 9. Проверяем
```bash
mount -a
```
↓
### Шаг 10. Проверяем результат
```bash
lsblk -f
df -h
```
---
# 49. Что нужно уметь объяснить преподавателю
Если это лабораторная защита, я бы особенно хорошо выучил следующие вопросы.
### «Чем диск отличается от раздела?»
**Диск** — весь накопитель:
```text
/dev/sdb
```
**Раздел** — выделенная область диска:
```text
/dev/sdb1
```
---
### «Чем раздел отличается от файловой системы?»
Раздел определяет **область дискового пространства**, а файловая система определяет **структуру хранения данных внутри этой области**.
---
### «Что делает `fdisk`?»
Создаёт и изменяет таблицу разделов. Саму файловую систему он не создаёт.
---
### «Что делает `mkfs.ext4`?»
Создаёт файловую систему ext4 на указанном разделе.
---
### «Что такое mount?»
Подключает файловую систему к определённой точке дерева каталогов Linux.
---
### «Почему `/dev/sdb1` можно смонтировать в `/mnt/fam_ext`?»
Потому что `/dev/sdb1` — устройство, содержащее файловую систему, а `/mnt/fam_ext` — точка, через которую эта файловая система становится доступной пользователю.
---
### «Почему используется UUID?»
Чтобы однозначно идентифицировать файловую систему независимо от имени устройства вроде `/dev/sdb1`.
---
### «Для чего `/etc/fstab`?»
Для описания файловых систем, которые должны автоматически монтироваться при загрузке.
---
### «Что делает `mount -a`?»
Пытается смонтировать файловые системы из `/etc/fstab`, которые ещё не смонтированы и которым разрешено автоматическое монтирование.
---
### «Что такое ext4 и XFS?»
Это файловые системы Linux.
---
### «Зачем `xfsprogs`?»
Это пакет с инструментами для работы с XFS.
---
### «Что такое `/mnt`?»
Стандартный каталог для временных/ручных точек монтирования.
---
### «Что такое `/dev`?»
Каталог специальных файлов устройств, через которые Linux предоставляет доступ к аппаратным и виртуальным устройствам.
---
# 50. Самая важная схема для запоминания
Если тебе нужно оставить в голове **одну схему**, то вот эту:
```text
ДИСК
/dev/sdb
│
┌──────┴──────┐
│ fdisk │
▼ ▼
/dev/sdb1 /dev/sdb2
│ │
mkfs.ext4 mkfs.xfs
│ │
ext4 XFS
│ │
mount mount
│ │
▼ ▼
/mnt/fam_ext /mnt/fam_xfs
│ │
└──────┬──────┘
│
/etc/fstab
│
▼
автоматическое
монтирование
```
А рядом держи в голове:
```text
fdisk → разделы
mkfs → файловая система
mount → подключение ФС к каталогу
fstab → автоматическое подключение
UUID → идентификатор ФС
lsblk → посмотреть диски
blkid → посмотреть UUID и ФС
df → посмотреть использование ФС
umount → отключить ФС
```
Если ты понимаешь именно эту цепочку, то ты уже не просто «выполнил команды по инструкции», а понимаешь, **как Linux превращает пустой виртуальный диск в доступное файловое хранилище**.