Блок 11
Диски, файловые системы, резервное копирование
Мы уже касались темы дисков и файловых систем на концептуальном уровне в Блоке 2, при установке системы, и в Блоке 5, изучая inode и структуру каталогов. Теперь настало время разобраться в этой тем…
Введение в блок
Мы уже касались темы дисков и файловых систем на концептуальном уровне в Блоке 2, при установке системы, и в Блоке 5, изучая inode и структуру каталогов. Теперь настало время разобраться в этой теме глубже и куда более практически: как устроены физические диски, какие бывают файловые системы, как создавать разделы и монтировать их, что такое своп-память, и, что особенно важно для практической работы администратора — как организовать надёжное резервное копирование данных. Материал этого блока напрямую готовит нас к Блоку 20, где мы будем полноценно администрировать реальный сервер.
Урок 11.1. Устройство дисков: HDD/SSD, разделы, `/dev/sda`, `/dev/nvme0n1`
Понять физическое устройство накопителей данных и то, как Linux их обозначает в файловой системе, продолжая и углубляя материал урока 5.2, где мы впервые кратко упомянули папку /dev.
Теория
Разберём два основных типа физических накопителей данных, с которыми вы, скорее всего, сталкивались.
HDD (Hard Disk Drive, «жёсткий диск») — традиционный накопитель, хранящий данные на быстро вращающихся магнитных пластинах, считываемых специальной механической головкой. Такая механическая природа делает HDD относительно медленным (особенно при произвольном, не последовательном доступе к данным) по сравнению с современной альтернативой, но при этом обеспечивает относительно низкую стоимость хранения большого объёма данных.
SSD (Solid State Drive, «твердотельный накопитель») — современный тип накопителя, не имеющий движущихся механических частей, хранящий данные в специальных микросхемах флеш-памяти, аналогичных используемым в обычных USB-флешках (хотя и значительно более быстрым и надёжным вариантом этой технологии). SSD значительно быстрее HDD, особенно при случайном доступе к множеству мелких файлов, что делает загрузку системы и запуск программ заметно более быстрыми.
Мы уже упоминали в уроке 5.2 философский принцип UNIX «всё есть файл» — и диски не исключение: в Linux каждый физический накопитель представлен в виде специального файла-устройства внутри уже знакомой нам папки /dev. Традиционное, историческое обозначение для дисков, подключённых по интерфейсам вроде SATA (наиболее распространённый интерфейс для HDD и части SSD) — /dev/sda» для самого первого обнаруженного диска, /dev/sdb» для второго, и так далее (буква после `sd» увеличивается по алфавиту для каждого следующего диска; «sd» исторически означает «SCSI disk», хотя сегодня применяется значительно шире исходного узкого технического смысла этой аббревиатуры).
Более современный и высокоскоростной интерфейс подключения SSD-накопителей, всё более распространённый в современных компьютерах — NVMe (Non-Volatile Memory Express) — использует другое, отдельное обозначение: /dev/nvme0n1» для первого диска (где nvme0» означает первый обнаруженный NVMe-контроллер, а n1» — первый диск, подключённый к этому контроллеру), /dev/nvme1n1» для следующего, и так далее.
Отдельные разделы на диске (вспомните урок 2.4, где мы впервые познакомились с этим понятием при установке системы) обозначаются добавлением числа к имени самого диска: /dev/sda1» — первый раздел первого диска, /dev/sda2» — второй раздел того же диска, и так далее; для NVMe-дисков используется чуть иной, дополнительно разделённый символом p» (partition) формат: /dev/nvme0n1p1» — первый раздел первого NVMe-диска.
Практика
Шаг 1. Просмотрите список всех подключённых к системе блочных устройств (термин «блочное устройство», block device, — более техническое, общее наименование для дисков и подобных им устройств, обозначающее, что данные на них читаются и записываются блоками фиксированного размера, а не произвольным потоком байт, как, например, при вводе с клавиатуры) с помощью команды lsblk (list block devices): `lsblk».
Что вы увидите: наглядное, древовидное представление всех дисков вашей виртуальной машины и их разделов, с указанием размера каждого и точки монтирования (концепцию которой мы подробно раскроем позже в этом блоке), например sda» с вложенными sda1, sda2`.
[Скриншот терминала]
Шаг 2. Просмотрите более подробную информацию о разделах диска с помощью уже более специализированной команды fdisk», требующей sudo: sudo fdisk -l» (list, показать список — данная команда без явного указания конкретного диска в качестве аргумента, при использовании именно с параметром -l, покажет информацию сразу обо всех подключённых дисках).
Что вы увидите: подробную техническую информацию о каждом обнаруженном диске — общий размер, тип разметки диска (мы вернёмся к этой теме в следующем уроке), и список всех разделов с их размерами и типами файловых систем.
[Скриншот результата]
Шаг 3. Определите тип используемого в вашей виртуальной машине диска (в подавляющем большинстве случаев VirtualBox эмулирует диск как обычное устройство /dev/sda, вне зависимости от того, HDD или SSD используется на вашем реальном компьютере) — просто зафиксируйте в конспекте, какое именно обозначение диска (sda» или nvme0n1`) вы обнаружили в своей системе через выполненные на предыдущих шагах команды.
Разбор команд
Команда lsblk
- Назначение:** показывает список всех блочных устройств (дисков и их разделов) в удобном, наглядном древовидном формате.
- Синтаксис:**
lsblk [опции] - Основные параметры:** `-f» (filesystem, дополнительно показать тип файловой системы каждого раздела, тему которых подробно раскроем в следующем уроке).
- Реальные примеры использования:** быстрая первичная диагностика — сколько дисков подключено к системе, как они разбиты на разделы, куда каждый раздел смонтирован.
Команда fdisk
- Назначение:** просмотр (с параметром
-l) и, с дополнительными интерактивными возможностями (тема следующих уроков), редактирование разметки дисков. - Синтаксис:**
sudo fdisk [опции] [устройство] - Основные параметры:** `-l» (list, показать подробную информацию о разметке дисков).
Возможные ошибки
- Ошибка:** попытка выполнить
fdisk -l» безsudo`, ожидая получить полную информацию.
Почему возникает: новичок ещё не выработал устойчивую привычку из Блока 8 и Блока 9 автоматически задумываться о необходимости повышенных прав для операций, затрагивающих системный уровень.
Как определить: команда может либо полностью отказать в доступе, либо показать неполную, ограниченную информацию.
Как исправить: добавить `sudo» перед командой.
Как избежать: запомнить, что операции, связанные с низкоуровневым доступом к дискам, почти всегда требуют повышенных прав, в отличие, например, от более безопасного и менее детального lsblk, часто доступного и без `sudo».
Практические задания
- Выполните
lsblkи `sudo fdisk -l» на своей виртуальной машине и сравните объём информации, которую предоставляет каждая из этих двух команд, зафиксировав наблюдение в конспекте. - Определите точное обозначение своего основного диска (`/dev/sda» или иное) и запишите в конспект список всех обнаруженных на нём разделов с их примерными размерами.
- Своими словами объясните в конспекте (без подглядывания) разницу между HDD и SSD, и почему эта разница влияет на практическую производительность системы.
Проверка знаний
Вопрос 1. Как называется папка, в которой в Linux физические диски представлены в виде специальных файлов-устройств, и почему именно так, в соответствии с философией UNIX?
Ответ: Папка `/dev» (devices). Такое представление соответствует принципу «всё есть файл», унаследованному Linux от UNIX (урок 1.1) — даже физическое оборудование представляется через уже знакомый и универсальный интерфейс работы с файлами.
Вопрос 2. Как обозначается третий раздел второго обнаруженного SATA-диска в системе?
Ответ: /dev/sdb3 (sdb» — второй диск по алфавиту, 3» — третий раздел на нём).
Итоги урока
Вы изучили: различие между HDD и SSD, принципы обозначения дисков и разделов в Linux через /dev/sda/`/dev/nvme0n1» и подобные им обозначения.
Вы умеете: просматривать список дисков и разделов с помощью lsblk и `fdisk -l».
В следующем уроке потребуется: это понимание физической разметки дисков, чтобы разобраться в понятии файловых систем более подробно, чем мы уже затрагивали в Блоке 5.
Урок 11.2. Файловые системы: ext4, XFS, Btrfs, NTFS, FAT32 — обзор и отличия
Расширить уже полученное в Блоке 5 базовое понимание файловой системы, познакомившись с конкретными, наиболее распространёнными реализациями и их практическими отличиями друг от друга.
Теория
Вспомним из урока 5.1: файловая система — это набор правил организации хранения данных на диске. Разберём несколько конкретных, широко распространённых реализаций.
ext4 (fourth extended filesystem) — файловая система, о которой мы уже упоминали в уроке 2.4 как о стандартной для Ubuntu и большинства других дистрибутивов Linux. Она надёжна, хорошо протестирована временем (развивается с середины 2000-х годов как прямое продолжение более ранних версий ext2/ext3), и остаётся разумным выбором по умолчанию для большинства практических задач.
XFS — файловая система, изначально разработанная компанией Silicon Graphics ещё в 1990-х годах для высокопроизводительных серверных систем, впоследствии портированная и в мир Linux. Особенно хорошо показывает себя при работе с очень большими файлами и высокой параллельной нагрузкой, что делает её популярным выбором для серверов баз данных (тема Блока 19) и систем хранения больших объёмов данных.
Btrfs (произносится «баттерфс» или «би-три-эфэс», иногда шутливо расшифровывается как «B-tree file system», по названию используемой в её основе структуры данных) — более современная файловая система с расширенными возможностями, недоступными в классической ext4: встроенная поддержка снапшотов (snapshots — мгновенных «фотографий» состояния файловой системы на определённый момент времени, к которому можно быстро вернуться, что весьма полезно для резервного копирования, темой которого мы подробно займёмся ближе к концу этого блока), встроенное сжатие данных «на лету», и более гибкое управление разделами без необходимости их предварительной жёсткой разметки традиционным способом.
NTFS (New Technology File System) — файловая система, разработанная компанией Microsoft и являющаяся стандартной для Windows. Linux умеет читать и записывать данные на разделы NTFS (что особенно важно в контексте уже знакомого нам по уроку 2.6 сценария Dual Boot, когда требуется доступ к файлам с раздела Windows из Linux), хотя для полноценной, надёжной работы иногда может потребоваться установка дополнительных драйверов через уже хорошо знакомый нам APT.
FAT32 (File Allocation Table) — значительно более старая, но при этом до сих пор широко используемая файловая система, ценимая прежде всего за максимальную кроссплатформенную совместимость — она без каких-либо дополнительных драйверов читается практически любой современной операционной системой, включая Windows, macOS и Linux, что делает её стандартным выбором для USB-флешек и карт памяти, предназначенных для обмена файлами между разными устройствами и системами. Существенный недостаток FAT32 — историческое ограничение максимального размера одного файла величиной в 4 гигабайта, что делает её непригодной для хранения, например, современных больших видеофайлов.
Практика
Шаг 1. Определите файловую систему вашего основного диска в виртуальной машине с помощью уже знакомой нам команды lsblk», но с дополнительным параметром -f», упомянутым в предыдущем уроке: `lsblk -f».
Что вы увидите: помимо уже знакомой структуры дисков и разделов, дополнительный столбец FSTYPE» (тип файловой системы), скорее всего показывающий ext4» для основного раздела вашей установленной Ubuntu.
[Скриншот терминала]
Шаг 2. Альтернативный способ проверки файловой системы конкретного раздела — команда df (disk free, которую мы также затронем подробнее в следующем уроке), с параметром -T» (type): df -T».
Что вы увидите: список всех примонтированных файловых систем (концепцию монтирования подробно раскроем чуть позже в этом блоке) с указанием их типа, доступного и занятого пространства.
[Скриншот результата]
Шаг 3. Своими словами, опираясь на теорию этого урока, объясните в конспекте, почему для загрузочной флешки Ubuntu (вспомните урок 2.3) технически часто используется именно FAT32, несмотря на её ограничения, а не более современная ext4.
Разбор команд
Параметр -T команды df
- Назначение:** дополнительно показывает тип файловой системы каждого примонтированного раздела.
- Реальные примеры использования:** быстрая диагностика — узнать, какая именно файловая система используется на конкретном примонтированном разделе, не заглядывая отдельно в `lsblk -f».
Возможные ошибки
- Ошибка:** попытка сохранить на флешку, отформатированную в FAT32, файл размером более 4 гигабайт (например, большой видеофайл или образ ISO из Блока 2, который сам по себе может достигать нескольких гигабайт, как мы помним).
Почему возникает: незнание об историческом ограничении размера файла именно в FAT32, унаследованном от очень старых версий этой файловой системы.
Как определить: сообщение об ошибке вида «File too large» («Файл слишком большой») при попытке копирования.
Как исправить: переформатировать флешку в файловую систему без такого ограничения (например, `exFAT» — файловую систему, сохраняющую хорошую кроссплатформенную совместимость FAT32, но без ограничения размера файла, хотя мы не разбирали её подробно в основной теории этого урока, — или, если кроссплатформенность неважна, в NTFS или ext4).
Как избежать: заранее учитывать ожидаемый размер файлов, которые предполагается хранить на конкретном носителе, при выборе файловой системы для его форматирования.
Практические задания
- Выполните
lsblk -f» иdf -T» на своей системе, сравните полученную информацию и запишите в конспект тип файловой системы вашего основного раздела. - Составьте в конспекте сравнительную таблицу пяти изученных файловых систем (ext4, XFS, Btrfs, NTFS, FAT32) с краткой характеристикой типичной области применения каждой.
- Своими словами объясните в конспекте, почему при выборе файловой системы для сервера баз данных (тема Блока 19) может оказаться разумным выбором именно XFS, а не FAT32.
Проверка знаний
Вопрос 1. Какая файловая система является стандартной по умолчанию для большинства современных дистрибутивов Linux, включая Ubuntu?
Ответ: ext4.
Вопрос 2. Почему FAT32 остаётся популярным выбором для USB-флешек, несмотря на своё существенное ограничение по размеру файла?
Ответ: Благодаря максимальной кроссплатформенной совместимости — она без каких-либо дополнительных драйверов читается практически любой современной операционной системой (Windows, macOS, Linux), что делает её удобной именно для обмена файлами между разными устройствами и системами.
Итоги урока
Вы изучили: пять распространённых файловых систем (ext4, XFS, Btrfs, NTFS, FAT32), их практические отличия и типичные области применения.
Вы умеете: определять тип файловой системы конкретного раздела с помощью lsblk -f» и df -T».
В следующем уроке потребуется: это понимание файловых систем, чтобы освоить конкретные команды диагностики использования дискового пространства.
Урок 11.3. Просмотр дисков: `lsblk`, `fdisk -l`, `df -h`, `du -h`
Закрепить и расширить уже частично использованные в предыдущих уроках инструменты диагностики дисков, добавив к ним важную команду `du» для анализа использования пространства конкретными файлами и папками.
Теория
Мы уже познакомились с lsblk и fdisk -l в уроке 11.1, а с df -T в уроке 11.2 — здесь мы закрепим их применение в чуть более широком контексте и добавим новый, важный инструмент.
df (disk free, «свободное место на диске») — показывает общую статистику использования пространства на уровне целых примонтированных файловых систем/разделов: сколько всего места, сколько занято, сколько свободно, в процентах.
du (disk usage, «использование диска») — в отличие от df, которая показывает общую картину по разделам целиком, du» показывает использование дискового пространства конкретными файлами и папками — незаменимый инструмент, когда df» показывает, что диск почти заполнен, но неясно, какие именно файлы или папки занимают больше всего места.
Практика
Шаг 1. Проверьте общее использование дискового пространства всех примонтированных разделов в удобном, человекочитаемом формате (вспомните параметр -h из уроков 5.4 и 6.6, применяемый здесь абсолютно аналогично): `df -h».
Что вы увидите: таблицу со столбцами: файловая система/устройство, общий размер, использовано, доступно, процент использования, точка монтирования.
[Скриншот терминала]
Шаг 2. Найдите строку, соответствующую корневому разделу (точка монтирования /, вспомните урок 5.2) и запишите в конспект, сколько места сейчас занято на вашей учебной виртуальной машине.
Шаг 3. Проверьте, сколько места занимает конкретно ваша домашняя папка, с помощью du -h, добавив уже знакомый нам параметр суммирования: du -sh ~» (параметр -s», summarize, показывает только итоговую сумму для указанной папки целиком, а не подробную разбивку по каждой вложенной подпапке отдельно, что было бы поведением по умолчанию без этого параметра и могло бы дать крайне длинный, малочитаемый вывод для сложных, глубоко вложенных структур).
Что вы увидите: одно число (в удобных единицах измерения благодаря -h) — суммарный размер всего содержимого вашей домашней папки.
[Скриншот результата]
Шаг 4. Найдите, какие конкретно подпапки внутри вашей домашней директории занимают больше всего места, скомбинировав du» с уже хорошо знакомыми нам из Блока 6 sort» и head: du -h ~ --max-depth=1 | sort -rh | head -n 10» (параметр --max-depth=1» ограничивает глубину анализа только непосредственными подпапками первого уровня внутри домашней папки, не углубляясь дальше внутрь каждой из них по отдельности; `sort -rh», как мы уже упоминали в Блоке 6 применительно к похожему примеру, сортирует «человекочитаемые» размеры вроде «4.6M» и «1.2G» корректно, с учётом реальной величины, а не просто по алфавиту текста).
Что вы увидите: список из десяти самых больших подпапок вашей домашней директории, отсортированный от самой объёмной к менее объёмной.
Разбор команд
Команда df
- Назначение:** показывает общую статистику использования дискового пространства на уровне целых файловых систем.
- Синтаксис:**
df [опции] [путь] - Основные параметры:**
-h» (human-readable, удобные единицы измерения);-T» (показать тип файловой системы, изучено в предыдущем уроке).
Команда du
- Назначение:** показывает использование дискового пространства конкретными файлами и папками.
- Синтаксис:**
du [опции] [путь] - Основные параметры:**
-h» (удобные единицы измерения);-s» (summarize, показать только итоговую сумму, без подробной разбивки по вложенным подпапкам); `--max-depth=число» (ограничить глубину подробной разбивки указанным числом уровней вложенности). - Реальные примеры использования:** `du -sh /var/log» — быстро проверить, не разрослись ли системные журналы (тема Блока 10) до чрезмерного объёма, что является распространённой практической причиной неожиданного заполнения диска на реальных серверах.
Возможные ошибки
- Ошибка:** путаница между
dfи `du» из-за похожих названий и частично пересекающегося назначения.
Почему возникает: оба инструмента связаны с «использованием диска», и их сокращённые названия действительно легко перепутать на слух или при быстром наборе.
Как определить: ожидание увидеть от df» подробную информацию по отдельным папкам (что на самом деле делает du), либо наоборот, ожидание от du» общей сводки по всему разделу целиком (что на самом деле делает df).
Как исправить: мысленно закрепить чёткое разделение: df» — «Disk Free», общая картина по разделам; du» — «Disk Usage», детальная картина по конкретным файлам/папкам.
Как избежать: практиковать обе команды достаточно часто, чтобы разница закрепилась в мышечной памяти набора текста и в интуитивном понимании их разного назначения.
Практические задания
- Выполните `df -h» на своей системе и определите, сколько процентов вашего основного диска сейчас занято.
- Найдите пять самых больших подпапок в своей домашней директории с помощью команды из шага 4 практики этого урока, и запишите результат в конспект.
- Проверьте суммарный размер всей вашей учебной папки курса (
~/Linux-Course, если вы придерживались такой структуры на протяжении курса) командой `du -sh», и сравните этот показатель с общим объёмом занятого места на всём диске из задания 1 — оцените, какую долю от всего занятого пространства составляют именно ваши учебные материалы.
Проверка знаний
Вопрос 1. Какая команда покажет общий процент использования дискового пространства всего корневого раздела, а какая — сколько места занимает конкретно ваша домашняя папка?
Ответ: df -h» покажет общую статистику по всему разделу целиком, включая корневой раздел; du -sh ~» покажет суммарный размер конкретно домашней папки.
Вопрос 2. Зачем нужен параметр -s» команды du`, и что произойдёт при его отсутствии для папки со сложной, глубоко вложенной структурой?
Ответ: Параметр `-s» (summarize) показывает только итоговую сумму для указанной папки целиком. Без него команда покажет подробную построчную разбивку по каждой отдельной вложенной подпапке на всех уровнях, что для сложной структуры может дать очень длинный, трудночитаемый вывод.
Итоги урока
Вы изучили: разницу между df» (общая статистика по разделам) и du» (детальная статистика по конкретным файлам/папкам).
Вы умеете: проверять общее использование дисков и находить самые объёмные файлы и папки в конкретной директории.
В следующем уроке потребуется: это понимание диагностики дисков, чтобы научиться практически создавать и изменять сами разделы дисков.
Урок 11.4. Разметка и создание разделов: `fdisk`, `parted`
Освоить практическое создание новых разделов на диске — тема, к которой мы подступались концептуально в уроке 2.4 при установке системы, а теперь разберём уже полноценно, самостоятельно управляя разметкой через терминал.
Теория
Мы уже познакомились с fdisk -l для простого просмотра существующей разметки. В этом уроке разберём интерактивный режим fdisk» для реального создания, изменения и удаления разделов, а также кратко упомянем альтернативный, более современный инструмент **parted`».
Ключевое практическое различие между fdisk и parted, о котором стоит упомянуть: fdisk традиционно работает с таблицами разделов типа MBR (Master Boot Record — историческая, более старая схема разметки диска с определёнными ограничениями, например максимум четыре основных раздела) и, в современных версиях, также поддерживает более новую схему GPT (GUID Partition Table, снимающую многие исторические ограничения MBR, включая поддержку значительно большего числа разделов и дисков объёмом свыше 2 терабайт, о чём мы уже упоминали в уроке 2.1 применительно к UEFI). `parted» изначально проектировался с более широкой, универсальной поддержкой обеих схем и дополнительно умеет не только создавать, но и изменять размер уже существующих разделов без обязательного их предварительного удаления и пересоздания — что делает его в некоторых сценариях более гибким инструментом.
Критически важное предупреждение, которое стоит сделать перед практической частью этого урока: работа с разметкой дисков — одна из самых потенциально разрушительных операций во всей системе, способная привести к полной, безвозвратной потере всех данных на диске при малейшей невнимательности. Именно поэтому мы будем практиковаться исключительно на дополнительном, специально созданном виртуальном диске, а не на основном диске вашей виртуальной машины с уже установленной системой — это позволит вам получить реальный практический опыт совершенно безопасно.
Практика
Подготовка: создание дополнительного виртуального диска.
Шаг 1. Полностью выключите вашу виртуальную машину (через меню системы в Ubuntu, как мы делали в предыдущих блоках).
Шаг 2. В главном окне VirtualBox выделите вашу виртуальную машину, откройте «Settings» → «Storage» (аналогично тому, как мы подключали ISO-образ в уроке 2.5), и добавьте новый виртуальный жёсткий диск (обычно кнопка с иконкой диска и знаком «+» рядом с контроллером) — создайте новый, динамически расширяемый диск объёмом, скажем, 5 ГБ, специально для практики этого урока.
Шаг 3. Запустите виртуальную машину и войдите в систему обычным образом.
Основная практика.
Шаг 4. Определите обозначение нового диска через уже знакомую нам команду lsblk: `lsblk».
Что вы увидите: помимо уже знакомого основного диска (/dev/sda» с разделами), появится новый, ещё не размеченный диск без каких-либо разделов внутри него (скорее всего, /dev/sdb`, так как это второй по счёту обнаруженный диск, согласно алфавитному правилу, изученному в уроке 11.1).
[Скриншот терминала]
Шаг 5. Запустите интерактивный режим fdisk» для нового диска (обязательно убедитесь, что вы указываете именно новый, пустой диск, а не свой основной /dev/sda» — это критически важная проверка перед выполнением следующих шагов): `sudo fdisk /dev/sdb».
Что произойдёт: откроется интерактивное приглашение fdisk», отличное от вашего обычного приглашения командной строки Bash — теперь команды вводятся уже в специальном, собственном мини-языке fdisk».
Шаг 6. Введите `n» (new, создать новый раздел) и нажмите Enter. Программа задаст несколько уточняющих вопросов (тип раздела, номер, начальный и конечный сектор) — для простоты вашей первой практики соглашайтесь со значениями по умолчанию, просто нажимая Enter на каждый вопрос, что создаст один раздел, занимающий весь доступный объём диска.
[Скриншот настроек]
Шаг 7. Введите `p» (print, показать текущее состояние разметки) и нажмите Enter, чтобы увидеть предварительный результат ещё до фактического применения изменений.
Что вы увидите: список с одним новым разделом (/dev/sdb1), созданным на предыдущем шаге, но пока ещё не примонтированным и не отформатированным — это будет темой следующего урока.
Шаг 8. Введите `w» (write, записать изменения на диск и выйти) и нажмите Enter, чтобы окончательно применить созданную разметку.
Что произойдёт: `fdisk» физически запишет новую таблицу разделов на диск и завершит интерактивный режим, вернув вас к обычному приглашению Bash.
[Скриншот результата]
Шаг 9. Подтвердите результат уже знакомой нам командой lsblk», убедившись, что новый раздел /dev/sdb1» действительно появился в списке.
Разбор команд
Интерактивные команды внутри fdisk
- `n» — создать новый раздел (new).
- `p» — показать текущую таблицу разделов (print).
- `d» — удалить существующий раздел (delete).
- `w» — записать изменения и выйти (write).
- `q» — выйти без сохранения каких-либо изменений (quit), полезная команда для безопасного выхода, если вы засомневались в правильности вводимых данных, аналогично уже знакомому нам по духу «аварийному выходу» из vim в Блоке 7.
Команда parted
- Назначение:** альтернативный инструмент разметки дисков с расширенной поддержкой изменения размера существующих разделов.
- Синтаксис:**
sudo parted /dev/устройство» (для запуска интерактивного режима) илиsudo parted /dev/устройство команда» (для выполнения одной конкретной команды без входа в интерактивный режим). - Реальные примеры использования:**
sudo parted /dev/sdb resizepart 1 3GB» — изменить размер первого раздела указанного диска, задача, для которой классическийfdisk» не приспособлен так же хорошо.
Возможные ошибки
- Ошибка:** случайное указание основного, рабочего диска (
/dev/sda) вместо дополнительного, тестового (/dev/sdb) при запуске `fdisk», что может привести к катастрофическому повреждению текущей рабочей системы.
Почему возникает: невнимательность при копировании или наборе команды, особенно после многократного повторения похожих команд в ходе практики.
Как определить: самое важное — заметить эту ошибку до выполнения финальной команды w», которая физически применяет изменения — до этого момента можно безопасно выйти командой q», не сохранив никаких изменений.
Способы исправления: если ошибка замечена вовремя (до w») — просто выйти через q» без каких-либо последствий. Если изменения уже были фатально применены к основному диску — восстановление возможно только из заранее сделанной резервной копии (тема последних уроков этого блока), что ещё раз подчёркивает критическую важность резервного копирования перед любыми потенциально рискованными операциями.
Как избежать: всегда дважды, вдумчиво проверять правильность указанного устройства перед запуском fdisk и перед выполнением команды w; в учебных целях — работать исключительно с заведомо дополнительным, специально созданным для практики диском, как мы и сделали в этом уроке.
Практические задания
- Удалите созданный в практике этого урока раздел (
/dev/sdb1), снова запустивsudo fdisk /dev/sdb», используя интерактивную командуd» (delete), а затемw» для сохранения изменений — убедитесь черезlsblk», что диск снова стал полностью неразмеченным. - Создайте на том же тестовом диске не один, а два отдельных раздела меньшего размера каждый (при создании раздела через
n» на этот раз не соглашайтесь с предложенным по умолчанию размером, охватывающим весь диск, а укажите примерно половину доступного объёма для каждого из двух разделов), и убедитесь черезlsblk», что оба раздела успешно появились. - Своими словами объясните в конспекте, почему в рамках этого урока принципиально важно было создать и использовать именно дополнительный, отдельный виртуальный диск, а не проводить эксперименты на основном диске виртуальной машины.
Проверка знаний
Вопрос 1. Какая интерактивная команда внутри fdisk физически применяет и сохраняет внесённые изменения разметки на диск?
Ответ: w» (write). Важно помнить, что до выполнения именно этой команды любые внесённые изменения можно безопасно отменить, просто выйдя через q» без сохранения.
Вопрос 2. В чём ключевое практическое отличие parted от fdisk, упомянутое в теории этого урока?
Ответ: parted» умеет изменять размер уже существующих разделов без обязательного их предварительного удаления и пересоздания, что делает его более гибким инструментом для определённых сценариев по сравнению с более традиционным fdisk».
Итоги урока
Вы изучили: практическую работу с интерактивным режимом fdisk для создания и удаления разделов, а также концептуальное отличие parted как более гибкой альтернативы.
Вы умеете: безопасно создавать, просматривать и удалять разделы на дополнительном тестовом диске.
В следующем уроке потребуется: это понимание создания разделов, чтобы научиться превращать пустой раздел в полноценно используемую, смонтированную файловую систему.
Урок 11.5. Создание файловой системы и монтирование: `mkfs`, `mount`, `umount`, `/etc/fstab`
Завершить практический цикл работы с новым диском, начатый в предыдущем уроке: превратить только что созданный «сырой» раздел в полноценно рабочую, размеченную под конкретную файловую систему и доступную для использования часть файловой структуры системы.
Теория
Раздел, созданный в предыдущем уроке, пока представляет собой просто выделенное пространство на диске — на нём ещё нет самой файловой системы (в смысле конкретной реализации, изученной в уроке 11.2), которая позволила бы операционной системе действительно хранить на нём файлы и папки организованным образом. Этот процесс называется форматированием и выполняется командой mkfs (make filesystem, «создать файловую систему»).
После форматирования раздел готов к использованию, но всё ещё недоступен для непосредственной работы с файлами — его нужно смонтировать (mount), то есть, как мы уже упоминали концептуально в уроке 2.4, «подключить» к определённой точке (папке) внутри уже существующего единого дерева файловой системы Linux. Именно эту операцию выполняет команда mount, а обратную ей — «отключение» раздела — команда umount (обратите внимание на отсутствие второй буквы «n» в этом названии, распространённая опечатка новичков — это исторически сложившееся, но абсолютно стандартное написание команды).
Важная практическая деталь: монтирование, выполненное просто командой mount», действует только до следующей перезагрузки системы — при новой загрузке диск снова окажется несмонтированным, если не настроить его автоматическое монтирование при каждой загрузке. Именно для этого предназначен уже знакомый нам по уроку 5.2 файл /etc/fstab` (file systems table, «таблица файловых систем») — здесь администратор явно прописывает, какие устройства должны автоматически монтироваться при загрузке системы, в какие именно точки, с какой файловой системой, и с какими дополнительными параметрами.
Практика
Шаг 1. Создайте на дополнительном тестовом диске (напомним: /dev/sdb», используемом в предыдущем уроке) заново один раздел, если вы удалили его в рамках практических заданий предыдущего урока, повторив уже знакомую нам последовательность sudo fdisk /dev/sdb», n, Enter (соглашаясь со значениями по умолчанию), `w».
Шаг 2. Отформатируйте новый раздел в файловую систему ext4: sudo mkfs.ext4 /dev/sdb1» (обратите внимание на конкретное имя команды mkfs.ext4» — на практике для каждой конкретной файловой системы, изученной в уроке 11.2, существует своя отдельная версия команды mkfs», например mkfs.xfs» для XFS или `mkfs.vfat» для FAT32/FAT).
Что произойдёт: команда покажет процесс создания файловой системы, включая техническую информацию о размере блоков, количестве inode (вспомните урок 5.1 — при создании файловой системы заранее резервируется определённое количество будущих inode) и другие технические детали.
[Скриншот терминала]
Шаг 3. Создайте точку монтирования — обычную папку, куда будет подключён новый раздел (используя уже хорошо знакомую нам команду mkdir» из Блока 5): sudo mkdir /mnt/test_disk» (вспомните урок 5.2 — папка `/mnt» в стандарте FHS специально предназначена именно для подобных точек монтирования).
Шаг 4. Смонтируйте раздел в созданную точку: `sudo mount /dev/sdb1 /mnt/test_disk».
Шаг 5. Проверьте результат уже знакомой нам командой df -h» из предыдущего урока: df -h | grep sdb1».
Что вы увидите: строку с новым разделом, показывающую его общий объём, использованное и доступное пространство, и точку монтирования `/mnt/test_disk».
[Скриншот результата]
Шаг 6. Проверьте, что раздел действительно работоспособен, создав на нём тестовый файл (уже хорошо знакомой командой из Блока 5): sudo touch /mnt/test_disk/test_file.txt» и ls -l /mnt/test_disk».
Шаг 7. Настройте автоматическое монтирование через /etc/fstab, чтобы раздел монтировался автоматически при каждой перезагрузке. Сначала определите уникальный идентификатор раздела (UUID — Universally Unique Identifier, более надёжный способ ссылаться на конкретный раздел в fstab, чем простое имя устройства вроде /dev/sdb1, которое теоретически может измениться при изменении порядка подключения дисков): `sudo blkid /dev/sdb1».
Шаг 8. Откройте файл /etc/fstab» через уже хорошо знакомый нам из Блока 7 nano (не забывая о важном правиле резервного копирования перед редактированием системных файлов, тоже изученном в Блоке 7): sudo cp /etc/fstab /etc/fstab.bak» (резервная копия), затем `sudo nano /etc/fstab».
Шаг 9. Добавьте в конец файла новую строку по образцу (подставив реальный UUID, полученный на шаге 7): `UUID=ваш-uuid /mnt/test_disk ext4 defaults 0 2» (шесть полей: устройство, точка монтирования, тип файловой системы, параметры монтирования, флаг для утилиты резервного копирования dump — тема, выходящая за рамки этого курса, и порядок проверки файловой системы при загрузке).
Шаг 10. Сохраните и закройте файл (Ctrl+O, Enter, Ctrl+X, как мы уже практиковали в Блоке 7).
Шаг 11. Проверьте корректность синтаксиса файла fstab» без реальной перезагрузки, с помощью команды sudo mount -a» (all, эта команда пытается смонтировать все записи из fstab, которые ещё не смонтированы, и, что удобно для нашей проверки, немедленно сообщит о синтаксической ошибке, если она есть, вместо того чтобы обнаружить проблему только при следующей реальной перезагрузке системы, что было бы значительно более неудобным моментом для диагностики).
Разбор команд
Команда mkfs
- Назначение:** создаёт (форматирует) файловую систему на указанном разделе.
- Синтаксис:** `sudo mkfs.тип_фс устройство»
- Реальные примеры использования:** `sudo mkfs.ext4 /dev/sdb1» (как в практике этого урока).
- Типичные ошибки:** форматирование не того раздела по невнимательности, что приводит к безвозвратной потере всех данных на нём — предупреждение, аналогичное по серьёзности уже разобранному в предыдущем уроке применительно к `fdisk».
Команда mount
- Назначение:** подключает файловую систему раздела к указанной точке (папке) в общем дереве файловой системы.
- Синтаксис:** `sudo mount устройство точка_монтирования»
- Основные параметры:**
-a» (all, смонтировать все записи из/etc/fstab`, ещё не смонтированные, полезно для проверки корректности файла без перезагрузки, как мы практиковали).
Команда umount
- Назначение:** отключает (размонтирует) файловую систему от указанной точки монтирования.
- Синтаксис:**
sudo umount точка_монтирования» (или, альтернативно,sudo umount устройство`). - Типичные ошибки:** попытка размонтировать раздел, который в данный момент активно используется (например, если ваш текущий терминал находится именно в этой папке, или какой-либо процесс держит открытым файл внутри неё).
Как определить: сообщение об ошибке вида «target is busy» («цель занята»).
Способы исправления: перейти (командой `cd» из Блока 5) в любую другую папку, не связанную с размонтируемым разделом, закрыть любые программы, использующие файлы внутри него, и повторить попытку.
Возможные ошибки
- Ошибка:** ошибка синтаксиса в `/etc/fstab», которая обнаруживается только при следующей полной перезагрузке системы, что в худшем случае (при ошибке в записи для критически важного раздела, например корневого) может привести к невозможности нормальной загрузки системы вообще.
Почему возникает: редактирование /etc/fstab» без последующей проверки через mount -a» перед реальной перезагрузкой.
Как определить: система либо не загружается полностью, либо загружается в специальный аварийный, ограниченный режим восстановления.
Как исправить: восстановление файла `/etc/fstab» из заранее сделанной резервной копии (что мы предусмотрительно создали на шаге 8 практики этого урока) — ещё одна практическая иллюстрация важности этой привычки, уже неоднократно подчёркнутой на протяжении курса, начиная с Блока 7.
Как избежать: всегда создавать резервную копию /etc/fstab» перед его редактированием, и всегда проверять синтаксис через sudo mount -a» сразу после внесения изменений, ещё до планируемой следующей перезагрузки, чтобы обнаружить возможные ошибки в контролируемых, безопасных условиях, а не неожиданно при реальной перезагрузке.
Практические задания
- Размонтируйте тестовый раздел командой
umount», а затем смонтируйте его обратно командойmount», без использования/etc/fstab, чтобы закрепить понимание разницы между разовым, ручным монтированием и настроенным автоматическим монтированием черезfstab. - Перезагрузите виртуальную машину (полностью, реальной перезагрузкой) и после перезапуска проверьте командой
df -h», что тестовый раздел действительно смонтировался автоматически, в соответствии с настроенной вами записью в/etc/fstab». - Своими словами объясните в конспекте, почему в записи
/etc/fstab» рекомендуется использовать именно UUID раздела, а не простое имя устройства вроде/dev/sdb1».
Проверка знаний
Вопрос 1. Что произойдёт с разделом, смонтированным простой командой mount (без соответствующей записи в /etc/fstab), после перезагрузки системы?
Ответ: Он окажется размонтированным — простая, разовая команда mount» действует только до следующей перезагрузки. Для автоматического монтирования при каждой загрузке необходимо добавить соответствующую запись в /etc/fstab».
Вопрос 2. Как можно проверить корректность синтаксиса только что изменённого файла /etc/fstab, не дожидаясь реальной перезагрузки системы?
Ответ: С помощью команды sudo mount -a», которая пытается смонтировать все ещё не смонтированные записи из fstab» и немедленно сообщит о синтаксической ошибке, если таковая имеется.
Итоги урока
Вы изучили: процесс форматирования раздела (mkfs), монтирования и размонтирования (mount/umount), и настройку автоматического монтирования через /etc/fstab.
Вы умеете: создавать полноценно рабочий, автоматически монтируемый раздел с нуля.
В следующем уроке потребуется: это понимание монтирования, чтобы разобраться в отдельной, специфической разновидности использования дискового пространства — своп-памяти.
Урок 11.6. SWAP: зачем нужен, файл подкачки и раздел подкачки
Понять концепцию своп-памяти (подкачки) — механизма, позволяющего системе временно использовать дисковое пространство как «расширение» оперативной памяти, тему которой мы уже вскользь упоминали в уроке 2.4 при обсуждении типовой разметки диска.
Теория
Мы уже упоминали в Блоке 2, что при установке системы часто выделяется отдельный раздел (или, в более современных подходах — файл) под swap («подкачка», от английского swap — «обмен, замена»). Разберём эту концепцию подробнее.
Оперативная память (RAM) компьютера — быстрая, но при этом относительно небольшая по объёму и, что важно, энергозависимая (данные в ней теряются при выключении питания) память, где хранятся данные всех текущих активно работающих процессов. Если суммарный объём памяти, требуемый всеми одновременно работающими процессами, превышает физически доступный объём RAM компьютера, система может использовать специально выделенное дисковое пространство — своп — в качестве своеобразного «расширения» оперативной памяти, временно перенося туда данные наименее активно используемых в данный момент процессов, освобождая тем самым физическую RAM для более насущных, активных нужд.
Важно понимать существенный практический нюанс: диск, даже самый быстрый SSD, всё равно значительно медленнее оперативной памяти. Активное, интенсивное использование свопа (что называется «свопингом» или, в разговорной практике администраторов, часто описывается выражением «система ушла в своп») является явным признаком нехватки физической оперативной памяти и обычно сопровождается заметным замедлением работы всей системы — своп следует рассматривать как аварийный «запасной резерв» на случай кратковременных пиковых нагрузок, а не как полноценную, постоянную замену достаточному объёму реальной RAM.
Существует два технических способа организации свопа: раздел подкачки (swap partition — отдельный, специально выделенный раздел диска, как мы видели в уроке 2.4) и файл подкачки (swap file — обычный файл на уже существующем разделе, используемый для той же самой цели). Современная практика администрирования Linux, включая используемый нами Ubuntu, всё чаще отдаёт предпочтение именно файлу подкачки — благодаря значительно большей гибкости (файл, в отличие от раздела, можно относительно легко увеличить, уменьшить или вовсе удалить впоследствии, без необходимости сложных операций с разметкой всего диска, изученных в уроке 11.4).
Практика
Шаг 1. Проверьте текущее состояние и объём свопа в вашей системе с помощью команды free, уже частично затрагивающей и оперативную память, и своп в едином, наглядном представлении: free -h» (вспомните уже знакомый нам параметр -h» из множества предыдущих команд этого блока).
Что вы увидите: две основные строки — Mem» (оперативная память: общий объём, использовано, свободно) и Swap» (своп: аналогичные показатели, но применительно именно к подкачке).
[Скриншот терминала]
Шаг 2. Альтернативный способ проверить конкретно своп — уже знакомая нам команда swapon» с параметром --show: swapon --show».
Что вы увидите: список активных устройств/файлов подкачки с указанием их размера и текущего уровня использования.
Шаг 3. Проверьте, использует ли ваша система файл подкачки или отдельный раздел, с помощью уже хорошо знакомой нам команды ls, применённой к типичному пути файла подкачки в современных версиях Ubuntu: `ls -lh /swap.img» (обратите внимание: этот конкретный путь и имя файла характерны для современных версий Ubuntu, использующих подход с файлом подкачки — если у вас используется отдельный раздел, эта команда сообщит об отсутствии такого файла, что тоже является полезным диагностическим результатом).
[Скриншот результата]
Шаг 4. Своими словами, опираясь на теорию этого урока и результаты выполненной практики, запишите в конспект: используется ли в вашей учебной виртуальной машине именно файл подкачки или отдельный раздел, и какой объём свопа выделен.
Разбор команд
Команда free
- Назначение:** показывает общую сводку использования оперативной памяти и свопа.
- Синтаксис:**
free [опции] - Основные параметры:** `-h» (удобные единицы измерения).
- Реальные примеры использования:** быстрая диагностика при подозрении на нехватку памяти в системе (тема, к которой мы вернёмся более подробно в Блоке 18, посвящённом мониторингу производительности) — если строка `Swap» показывает значительное, активно растущее использование, это явный сигнал о недостатке физической RAM для текущей нагрузки.
Команда swapon
- Назначение:** активирует устройство или файл подкачки (а с параметром `--show» — показывает список уже активных).
- Синтаксис:**
sudo swapon устройство_или_файл» (для активации) /swapon --show» (для просмотра, обычно не требуетsudo).
Возможные ошибки
- Ошибка:** ошибочное представление, что своп может полностью и без каких-либо ограничений компенсировать нехватку физической оперативной памяти без какого-либо ущерба производительности.
Почему возникает: упрощённое понимание концепции «расширения памяти», без учёта существенной разницы в скорости между RAM и диском.
Как определить: система становится заметно, иногда очень существенно медленнее при интенсивном использовании свопа, что можно подтвердить, наблюдая за ростом значения Swap» в выводе free -h» в моменты замедления.
Как исправить: для временного облегчения ситуации можно закрыть наименее важные из активно потребляющих память программ; для долгосрочного, полноценного решения — либо увеличить объём физической оперативной памяти компьютера (для реального оборудования) или виртуальной машины (что мы уже практиковали настраивать в Блоке 2), либо оптимизировать работающие программы и их количество.
Как избежать: воспринимать своп именно как аварийный резерв для кратковременных пиковых нагрузок, а не как полноценную постоянную замену достаточного объёма физической оперативной памяти для типичной, ежедневной рабочей нагрузки системы.
Практические задания
- Выполните `free -h» на своей системе и запишите в конспект текущий объём выделенного свопа и степень его текущего использования.
- Своими словами объясните в конспекте (без подглядывания), почему интенсивное, постоянное использование свопа считается тревожным сигналом, а не нормальным, штатным режимом работы системы.
- Сравните (концептуально, основываясь на теории урока, без необходимости реального практического эксперимента) два подхода — раздел подкачки и файл подкачки — и запишите в конспект, какой из них считается более гибким в современной практике администрирования и почему.
Проверка знаний
Вопрос 1. Зачем нужен своп, если оперативная память работает значительно быстрее диска?
Ответ: Своп служит своеобразным «аварийным резервом», позволяющим системе временно перенести на диск данные наименее активно используемых процессов, когда суммарный объём требуемой памяти превышает физически доступный объём RAM — это позволяет системе продолжать работать (хотя и заметно медленнее) вместо немедленного отказа или принудительного завершения процессов при нехватке памяти.
Вопрос 2. Какой из двух технических способов организации свопа — раздел подкачки или файл подкачки — считается более гибким в современной практике администрирования Linux, и почему?
Ответ: Файл подкачки, так как его, в отличие от отдельного раздела, можно относительно легко увеличить, уменьшить или полностью удалить впоследствии, без необходимости сложных операций с разметкой всего диска.
Итоги урока
Вы изучили: концепцию своп-памяти, различие между разделом и файлом подкачки, и признаки чрезмерного использования свопа как сигнала о нехватке физической оперативной памяти.
Вы умеете: диагностировать текущее состояние и использование свопа с помощью free -h» и swapon --show».
В следующем уроке потребуется: весь накопленный в этом блоке материал о дисках и файловых системах, чтобы наконец перейти к одной из самых практически важных тем администрирования — резервному копированию.
Урок 11.7. Резервное копирование: `tar`, `rsync`, стратегии бэкапа (3-2-1)
Освоить принципы и практические инструменты резервного копирования — тему, важность которой подчёркивалась на протяжении практически всего курса (уроки 2.6, 6.7, 7.4, 8.7, 9.3, 11.5), и которая теперь получает полноценное, систематическое раскрытие.
Теория
Резервное копирование (backup) — это создание дополнительных, независимых копий важных данных, позволяющих восстановить их в случае утраты оригинала — будь то из-за случайного удаления, аппаратного сбоя диска, повреждения файловой системы, ошибки администратора, или, в более серьёзных случаях, вредоносной активности (тема Блока 14).
Мы уже знакомы с инструментом tar для создания архивов из Блока 6 — это один из наиболее распространённых базовых инструментов для создания резервных копий в мире Linux, особенно для полных, единовременных «снимков» состояния определённой папки на конкретный момент времени.
rsync (remote sync, «удалённая синхронизация») — более специализированный, значительно более эффективный для регулярного, повторяющегося резервного копирования инструмент. Его ключевое практическое преимущество — инкрементальность (incremental): при повторном запуске rsync» для той же самой пары «источник-назначение» команда копирует и обновляет только те файлы, которые реально изменились с момента предыдущего запуска, полностью пропуская уже идентичные, не изменившиеся файлы — что делает повторные резервные копии значительно быстрее полного копирования всех данных заново каждый раз, особенно для больших объёмов данных с относительно небольшим количеством изменений между запусками. Кроме того, rsync», как явно следует уже из самого его названия, изначально спроектирован для эффективной работы именно через сеть, что делает его естественным выбором и для резервного копирования на удалённый сервер (тему которого мы дополнительно затронем при более глубоком изучении SSH в Блоке 13).
Важная, широко признанная в профессиональной практике администрирования стратегия организации резервного копирования называется правилом 3-2-1:
- 3** копии данных как минимум (оригинал плюс минимум две резервные копии) — единственная копия данных, при всей важности резервного копирования как концепции, сама по себе остаётся уязвимой точкой отказа.
- 2** разных типа носителей для хранения этих копий (например, внутренний диск сервера и внешний, отдельный накопитель, а не только несколько копий на одном и том же физическом диске, отказ которого одномоментно уничтожил бы сразу все хранящиеся на нём копии).
- 1** копия, хранящаяся территориально в другом месте (offsite) — например, в облачном хранилище или на физически удалённом от основного сервера носителе, что защищает от катастрофических, локальных по своей природе происшествий, таких как пожар, кража оборудования, или иное физическое повреждение, способное разом уничтожить все локально хранящиеся копии.
Практика
Шаг 1. Создайте тестовую структуру данных для практики резервного копирования, используя уже хорошо знакомые нам инструменты из Блока 5: mkdir -p ~/Linux-Course/Block-11/important_data» и наполните её несколькими тестовыми файлами через touch» и `echo».
Шаг 2. Создайте полную резервную копию с помощью уже знакомого нам tar» из Блока 6, добавив в имя архива текущую дату (используя уже знакомую нам подстановку команды из Блока 8 и Блока 10, а также форматирование даты из Блока 4): tar -czvf ~/Linux-Course/Block-11/backup_$(date +%Y-%m-%d).tar.gz ~/Linux-Course/Block-11/important_data».
Что произойдёт: будет создан архив с именем, автоматически включающим сегодняшнюю дату — крайне полезный практический паттерн для организации нескольких резервных копий, сделанных в разное время, без риска случайной перезаписи предыдущей копии новой (вспомните обсуждение разницы между > и >> из Блока 6 — аналогичный принцип аккуратности применительно к резервным копиям).
[Скриншот терминала]
Шаг 3. Установите rsync, если он ещё не установлен (в Ubuntu он часто уже предустановлен по умолчанию, но для практики стоит явно проверить и, при необходимости, установить, закрепляя материал Блока 9): sudo apt update» и sudo apt install rsync».
Шаг 4. Создайте отдельную папку, имитирующую место назначения для резервной копии (в реальности это часто был бы отдельный, внешний диск или удалённый сервер, но для безопасной учебной практики используем ещё одну локальную папку): `mkdir ~/Linux-Course/Block-11/backup_destination».
Шаг 5. Выполните первую синхронизацию с помощью rsync: rsync -av ~/Linux-Course/Block-11/important_data/ ~/Linux-Course/Block-11/backup_destination/» (параметр -a», archive, включает в себя целый набор полезных для резервного копирования опций сразу — сохранение прав доступа, временных меток, символических ссылок, и рекурсивное копирование вложенных папок, аналогично уже знакомому нам -r из предыдущих команд; -v», verbose, уже хорошо знакомый нам по Блоку 5 параметр подробного вывода. Обратите особое внимание на завершающий слэш / после important_data» в пути источника — это принципиально важная деталь синтаксиса rsync, о которой мы подробнее скажем в разборе команд).
Что вы увидите: список скопированных файлов — при первом запуске `rsync» копирует всё содержимое целиком, аналогично обычному копированию.
[Скриншот результата]
Шаг 6. Измените один из файлов в исходной папке important_data» (например, дописав туда новую строку через уже знакомую нам конструкцию echo "новая строка" >> файл» из Блока 6) и добавьте туда же ещё один совершенно новый файл.
Шаг 7. Выполните ту же самую команду rsync» повторно: rsync -av ~/Linux-Course/Block-11/important_data/ ~/Linux-Course/Block-11/backup_destination/».
Что вы увидите: на этот раз в выводе будут упомянуты только изменённый и новый файлы, а не весь набор данных целиком заново — наглядная демонстрация инкрементальности rsync, о которой говорилось в теории.
Разбор команд
Команда rsync
- Назначение:** эффективная, инкрементальная синхронизация файлов и папок между источником и назначением.
- Синтаксис:** `rsync [опции] источник назначение»
- Основные параметры:**
-a» (archive, сохранение прав/времени/ссылок плюс рекурсия);-v» (verbose, подробный вывод);-z» (сжатие данных при передаче, особенно полезно при синхронизации через медленное сетевое соединение, тему которого подробнее затронем в Блоке 13);--delete» (удалять в папке назначения файлы, которых больше нет в источнике, обеспечивая полное, зеркальное соответствие — использовать этот параметр стоит осторожно и осознанно, так как он может привести к удалению файлов в резервной копии, если они были случайно удалены и в самом источнике). - Важная деталь синтаксиса — завершающий слэш
/:** наличие или отсутствие завершающего слэша после пути источника принципиально меняет поведениеrsync:important_data/» (со слэшем) означает «скопировать содержимое этой папки внутрь папки назначения»;important_data» (без слэша) означало бы «скопировать саму эту папку целиком (как единую вложенную папку) внутрь папки назначения» — что привело бы к иной, вложенной структуре результата (backup_destination/important_data/...» вместо ожидаемогоbackup_destination/...). Это распространённый источник путаницы у новичков, работающих сrsync» впервые. - Реальные примеры использования:**
rsync -avz ~/Documents/ user@remote-server:/backups/documents/» — характерный пример реальной задачи резервного копирования на удалённый сервер через сеть (синтаксис сuser@сервер:путь» мы подробно разберём уже в Блоке 13, применительно к SSH и связанным с ним инструментам).
Возможные ошибки
- Ошибка:** путаница с наличием или отсутствием завершающего слэша в пути источника `rsync», приводящая к неожиданной, лишней вложенности в итоговой структуре резервной копии.
Почему возникает: это тонкая, неочевидная деталь синтаксиса, явно упомянутая в разборе команд этого урока, легко упускаемая из виду при быстром, невнимательном наборе команды.
Как определить: структура файлов в папке назначения оказывается на один уровень глубже ожидаемой (например, содержит дополнительную промежуточную папку important_data, которой, по замыслу, быть не должно).
Как исправить: удалить ошибочно созданную, неверно вложенную структуру в папке назначения и повторить команду `rsync» с корректным, осознанным использованием (или неиспользованием) завершающего слэша, в соответствии с реально желаемым результатом.
Как избежать: всегда сознательно проверять наличие или отсутствие завершающего слэша перед выполнением команды rsync, особенно при первом использовании для новой, ранее не отработанной пары «источник-назначение».
Практические задания
- Повторите практику этого урока с намеренно неверным (отсутствующим) завершающим слэшем в пути источника `rsync» и понаблюдайте на практике за получившейся, неожиданно более глубоко вложенной структурой результата, о которой говорится в разделе «Возможные ошибки» — это поможет закрепить понимание этой тонкости синтаксиса через непосредственный практический опыт, а не только чтение теории.
- Создайте резервную копию учебной папки всего курса (
~/Linux-Course, если вы придерживались такой структуры на протяжении всего курса) как черезtar, так и черезrsync, сравнив в конспекте субъективные удобства и время выполнения каждого из двух подходов на этом достаточно большом наборе накопленных за весь курс данных. - Своими словами объясните в конспекте (без подглядывания) правило 3-2-1 резервного копирования, применив его к гипотетической ситуации важных личных данных, которые вы хотели бы защитить (например, семейные фотографии) — опишите, как конкретно вы бы организовали три копии, два типа носителей, и одну территориально удалённую копию для этого конкретного примера.
Проверка знаний
Вопрос 1. В чём ключевое практическое преимущество rsync перед простым, полным копированием (или созданием нового полного архива через tar) при регулярном, повторяющемся резервном копировании больших объёмов данных?
Ответ: Инкрементальность — при повторном запуске `rsync» копирует и обновляет только реально изменившиеся с момента предыдущего запуска файлы, полностью пропуская уже идентичные, что делает повторные операции значительно быстрее полного копирования всех данных заново каждый раз.
Вопрос 2. Что означают цифры «3-2-1» в одноимённом правиле резервного копирования?
Ответ: 3 — минимальное количество копий данных (оригинал плюс минимум две резервные копии); 2 — количество разных типов носителей для хранения этих копий; 1 — количество копий, которые должны храниться территориально в другом месте (offsite), отдельно от основного местонахождения оригинальных данных.
Итоги урока
Вы изучили: практические инструменты резервного копирования tar» и rsync`, важную деталь синтаксиса завершающего слэша, и профессиональную стратегию организации резервного копирования по правилу 3-2-1.
Вы умеете: создавать полные и инкрементальные резервные копии данных, осознанно планировать стратегию резервного копирования согласно признанным профессиональным практикам.
В следующем уроке потребуется: понимание принципов резервного копирования, чтобы кратко познакомиться с более продвинутой темой — восстановлением данных и работой с образами дисков.
Урок 11.8. Восстановление данных и работа с образами дисков (обзорно)
Получить общее, ознакомительное представление о процессе восстановления данных из резервных копий, а также о концепции образов дисков — теме, логически завершающей материал всего этого блока о дисках и резервном копировании.
Теория
Восстановление данных (restore) из резервной копии — логическое, обратное действие по отношению к уже изученному в предыдущем уроке резервному копированию. Для резервной копии, созданной через tar», восстановление сводится к уже хорошо знакомому нам из Блока 6 процессу распаковки архива (tar -xzvf) в нужное место. Для резервной копии, созданной через rsync, восстановление технически представляет собой ту же самую операцию rsync», но с обратным направлением — источником становится ранее созданная резервная копия, а назначением — место, куда требуется восстановить данные.
Важная практическая рекомендация профессиональной практики администрирования, о которой стоит явно упомянуть: сама по себе процедура создания резервных копий бессмысленна без периодической проверки возможности их реального восстановления — распространённая, к сожалению, ситуация в реальной практике, когда администратор годами исправно создаёт резервные копии, ни разу не проверив, что они действительно могут быть успешно восстановлены в случае реальной необходимости, обнаруживая проблему (например, повреждённый или неполный архив) только в момент настоящей, критической аварии, когда времени на исправление ситуации уже может не остаться.
Образ диска (disk image) — это, в отличие от уже изученных нами архивов отдельных файлов и папок, полная, побитовая копия всего диска или раздела целиком, включая не только видимые файлы, но и саму структуру файловой системы, загрузочные записи, и всё прочее содержимое на уровне физических блоков данных. Мы уже неявно сталкивались с концепцией образов дисков в Блоке 2 — тот самый ISO-файл Ubuntu, который мы скачивали и использовали для установки, тоже является разновидностью образа (хотя и специфического, «образа для установки», а не «образа уже работающей, настроенной системы»).
Классический инструмент для создания образов дисков на низком уровне в Linux — команда dd (название исторически расшифровывается как «disk dump», хотя в шутку среди администраторов иногда неформально называется «disk destroyer», «разрушитель дисков», из-за потенциально катастрофических последствий неверного использования этой чрезвычайно мощной, но и чрезвычайно опасной при невнимательности команды, способной без каких-либо дополнительных подтверждений полностью и безвозвратно перезаписать содержимое указанного устройства). Мы намеренно не будем подробно практиковать эту команду в рамках базового курса системного администрирования из соображений безопасности для новичков — но важно, чтобы вы знали о её существовании и общем назначении для полноты понимания темы.
Практика
Практика этого урока — практически полностью ознакомительная и безопасная, без использования потенциально опасной команды dd.
Шаг 1. Восстановите тестовые данные из архива tar», созданного в предыдущем уроке, в новую, отдельную папку — потренируем полный цикл «резервное копирование → восстановление»: mkdir ~/Linux-Course/Block-11/restored_data» и tar -xzvf ~/Linux-Course/Block-11/backup_.tar.gz -C ~/Linux-Course/Block-11/restored_data» (используя уже знакомый нам параметр -C» из Блока 6 для указания целевой папки распаковки, а также специальный символ-шаблон из Блока 5, чтобы не набирать точную дату вручную, если она уже успела немного забыться).
Что произойдёт: содержимое ранее созданного архива будет распаковано в новую, отдельную папку.
[Скриншот терминала]
Шаг 2. Сравните содержимое исходной папки important_data» и только что восстановленной restored_data», используя команду diff», с которой мы ещё не сталкивались подробно в курсе, но которая интуитивно понятна по своему прямому назначению — сравнение содержимого файлов/папок: diff -r ~/Linux-Course/Block-11/important_data ~/Linux-Course/Block-11/restored_data/important_data» (параметр -r, аналогично уже хорошо знакомому нам из многих предыдущих команд, означает рекурсивное сравнение, включая все вложенные подпапки).
Что вы увидите: если восстановление прошло успешно и данные полностью идентичны — команда `diff» не выведет вообще никакого текста (что в мире командной строки часто, хотя и не всегда интуитивно, означает именно полный успех и отсутствие каких-либо различий, а не ошибку или отсутствие результата).
[Скриншот результата]
Шаг 3. Проверьте наличие команды dd» в вашей системе (она предустановлена практически везде по умолчанию, так как является одной из базовых, фундаментальных UNIX-утилит) просто для ознакомления, не выполняя её реально: which dd» и `man dd» (используя уже хорошо знакомые нам инструменты из Блока 5 и Блока 4 соответственно, чтобы бегло ознакомиться с официальной документацией команды, не рискуя её случайным неосторожным исполнением).
Шаг 4. Изучите (через man dd», не выполняя команду) синтаксис типичного примера создания образа диска, который вы там найдёте, и своими словами объясните в конспекте общий смысл параметров if=» (input file, входной файл/устройство) и `of=» (output file, выходной файл/устройство), лежащих в основе базового синтаксиса этой команды.
Разбор команд
Команда diff
- Назначение:** сравнивает содержимое двух файлов или (с параметром
-r) папок, показывая построчные различия. - Синтаксис:**
diff [опции] файл1 файл2» /diff -r папка1 папка2» - Реальные примеры использования:** быстрая проверка после восстановления данных из резервной копии (как в практике этого урока), либо сравнение двух версий конфигурационного файла перед и после внесения изменений.
Команда dd (обзорно, без практического выполнения)
- Назначение:** низкоуровневое, побитовое копирование данных между устройствами или файлами, часто используемое для создания и восстановления полных образов дисков.
- Синтаксис (для справки):**
sudo dd if=источник of=назначение [дополнительные_параметры] - Критическое предупреждение:** эта команда не запрашивает никакого дополнительного подтверждения перед выполнением и способна безвозвратно уничтожить всё содержимое указанного в качестве
of=» (output) устройства при малейшей ошибке в его указании — риск, аналогичный по серьёзности, а возможно и превышающий уже разобранные в этом блоке рискиfdiskиmkfs», но при этом ещё менее «прощающий» ошибки, так как отсутствует даже промежуточный интерактивный режим с возможностью выйти без сохранения, как это было в `fdisk».
Возможные ошибки
- Ошибка:** ложное чувство безопасности от одного лишь факта регулярного создания резервных копий, без какой-либо периодической проверки их реальной восстанавливаемости.
Почему возникает: создание резервной копии интуитивно воспринимается как уже полностью завершённая, самодостаточная задача, тогда как процесс восстановления кажется чем-то, что можно отложить на неопределённое «когда потребуется в будущем».
Как определить: проблема обнаруживается только в момент реальной, критической необходимости восстановления, когда выясняется, что архив повреждён, неполон, или восстановление по какой-то причине не работает так, как ожидалось — то есть именно тогда, когда время на исправление ситуации особенно ограничено и критично.
Как исправить: в момент реальной аварии — попытаться найти альтернативную, более раннюю резервную копию, если таковая существует, или предпринять попытки частичного, ручного восстановления доступных, неповреждённых данных.
Как избежать: сделать периодическую (например, раз в месяц) тестовую проверку восстановления резервных копий такой же неотъемлемой, регулярной частью процесса, как и само их создание — именно эту практику мы и отработали в шагах 1-2 практики этого урока.
Практические задания
- Повторите полный цикл «резервное копирование через rsync (из предыдущего урока) → восстановление → проверка через diff» самостоятельно, для той же самой или новой тестовой структуры данных, закрепляя понимание полного цикла на практике.
- Изучите документацию
man dd» (не выполняя команду реально) и запишите в конспект своими словами, для чего обычно применяется параметрbs=» (block size, размер блока), часто встречающийся в типичных примерах использования этой команды в документации и в интернете. - Своими словами объясните в конспекте разницу между резервной копией отдельных файлов/папок (как мы делали через
tar/rsyncв предыдущем уроке) и полным образом целого диска (концепцияdd), и в каких ситуациях может понадобиться именно второй, более полный и низкоуровневый подход.
Проверка знаний
Вопрос 1. Почему периодическая проверка возможности реального восстановления резервных копий считается такой же важной практикой, как и само их регулярное создание?
Ответ: Потому что сама по себе процедура создания резервных копий не гарантирует их корректности и реальной пригодности для восстановления — проблемы (повреждённые или неполные архивы, ошибки в процессе) могут обнаружиться только в момент реальной, критической необходимости восстановления, когда времени на их исправление уже может не остаться. Регулярная тестовая проверка восстановления заранее выявляет подобные проблемы в спокойных, некритичных условиях.
Вопрос 2. В чём принципиальное отличие полного образа диска (концепция команды dd) от резервной копии отдельных файлов и папок (tar/rsync)?
Ответ: Образ диска представляет собой полную, побитовую копию всего диска или раздела целиком, включая саму структуру файловой системы и загрузочные записи, а не только видимые пользователю файлы и папки, как в случае с резервным копированием через tar/rsync.
Итоги урока
Вы изучили: процесс восстановления данных из резервных копий, важность его регулярной проверки, концепцию полных образов дисков и обзорное представление о команде dd.
Вы умеете: восстанавливать данные из резервных копий и проверять корректность восстановления через `diff».
В следующем уроке (это будет уже Блок 12) потребуется: весь накопленный в этом блоке материал о дисках, чтобы перейти к принципиально новой большой теме курса — сетям и сетевому взаимодействию в Linux.
Мини-проект блока
Задача: объединить материал этого блока (резервное копирование) с материалом предыдущего Блока 10 (планировщик cron), создав полноценную, автоматизированную систему регулярного резервного копирования.
Что нужно сделать:
- Создайте простой Bash-скрипт (аналогично подходу мини-проекта Блока 10, с использованием уже изученных инструментов, хотя полноценный синтаксис Bash-скриптов будет детально раскрыт только в Блоке 15), который создаёт
tar.gz-архив вашей учебной папки~/Linux-Courseс датой в имени файла (используя уже практиковавшуюся в этом блоке конструкцию$(date +%Y-%m-%d)), сохраняя результат в отдельную папку~/backups. - Сделайте скрипт исполняемым через уже хорошо знакомый `chmod +x» из Блока 8.
- Протестируйте скрипт вручную, запустив его напрямую (
./имя_скрипта.sh, вспомните синтаксис из Блока 9) и убедившись, что архив действительно создаётся корректно. - Настройте через `crontab -e» (материал Блока 10) автоматический ежедневный запуск этого скрипта в удобное время, например ночью.
- Для практической проверки без долгого ожидания реального расписания — временно измените расписание на «каждую минуту» (аналогично практике урока 10.8), дождитесь одного-двух срабатываний, и убедитесь, что новые резервные копии действительно появляются в `~/backups» автоматически.
- Верните расписание обратно на реалистичное, ежедневное значение.
- Составьте в конспекте итоговый отчёт о проделанной работе, включая содержимое созданного скрипта и итоговую строку расписания cron.
Критерий готовности: скрипт корректно создаёт резервные копии, автоматический запуск через cron подтверждён практически (хотя бы на тестовом, учащённом расписании), финальное расписание установлено на разумное, ежедневное значение.
Контрольные вопросы
- В чём разница между HDD и SSD, и как они по-разному обозначаются в
/dev? - Объясните разницу между
dfи `du», и в какой ситуации какая из этих команд более уместна. - Опишите три шага, необходимые для превращения нового, «сырого» раздела диска в полноценно рабочую, автоматически монтируемую часть файловой системы.
- Что такое своп, и почему его интенсивное использование считается тревожным сигналом?
- В чём ключевое практическое преимущество
rsyncпередtarдля регулярного резервного копирования больших объёмов данных? - Объясните правило резервного копирования 3-2-1.
- Почему периодическая проверка восстановления резервных копий так же важна, как и их создание?
Выводы по блоку
Вы прошли полный практический путь работы с дисками — от базового понимания физического устройства накопителей и их обозначения в системе, через создание и монтирование разделов, до, что особенно практически важно, полноценного освоения принципов и инструментов резервного копирования. Материал этого блока — не просто теоретическая база, а прямая практическая подготовка к реальной работе системного администратора, где вопросы надёжного хранения и защиты данных являются одной из центральных, ежедневных обязанностей, и куда мы обязательно вернёмся ещё раз, уже в контексте полноценного администрирования реального сервера, в Блоке 20.
Список изученных тем
- Устройство дисков (HDD/SSD) и их обозначение через
/dev/sda, `/dev/nvme0n1» и подобные. - Файловые системы: ext4, XFS, Btrfs, NTFS, FAT32.
- Диагностика дисков:
lsblk,fdisk -l,df -h, `du -h». - Разметка дисков: интерактивный
fdisk, обзор `parted». - Форматирование и монтирование:
mkfs,mount,umount, автоматическое монтирование через `/etc/fstab». - Своп-память: раздел и файл подкачки, диагностика через
free -h» иswapon --show». - Резервное копирование:
tar,rsync, стратегия 3-2-1. - Восстановление данных, проверка через
diff, обзорное знакомство с образами дисков и командой `dd».
Рекомендации перед переходом
Убедитесь, что вы уверенно понимаете полный практический цикл работы с новым диском — от создания раздела до его автоматического монтирования — и можете самостоятельно объяснить правило 3-2-1 резервного копирования. Особое внимание стоит уделить именно резервному копированию: эта тема — одна из самых практически важных во всём курсе, и уверенное владение tar/`rsync» в сочетании с планировщиком cron из Блока 10 понадобится вам вновь и вновь на протяжении оставшихся блоков курса, вплоть до итогового проекта.