Файловая система и управление дисками

LinuxBeginner
Практиковаться сейчас

Введение

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

В этой лабораторной работе вы безопасно исследуете хранилище, проанализируете использование дискового пространства, создадите файловую систему ext4 внутри обычного файла, смонтируете и размонтируете её, прочитаете информацию о разделах и создадите учебный файл fstab. Все операции записи выполняются только с временными файлами, созданными для этой лабораторной работы. Вы не будете изменять разделы реального диска или системный /etc/fstab.

Изучите уровни хранения Linux

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

Команда lsblk означает «list block devices» («вывести список блочных устройств»). Её параметр -o выбирает столбцы для отображения:

lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS

Читайте вывод слева направо:

  • NAME обозначает устройство или раздел.
  • TYPE различает диски, разделы и loop-устройства.
  • SIZE показывает ёмкость.
  • FSTYPE показывает обнаруженный тип файловой системы, если она есть.
  • MOUNTPOINTS показывает, где файловая система подключена к дереву каталогов.

Диск может содержать один или несколько разделов. Файловая система, например ext4, организует файлы внутри раздела или другого объекта хранения. Точка монтирования — это обычный каталог, через который Linux предоставляет доступ к этой файловой системе.

Используйте findmnt, чтобы определить файловую систему, содержащую текущий каталог проекта. Параметр -T принимает любой путь и находит смонтированную файловую систему, к которой он относится:

findmnt -T /home/labex/project

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

Команда blkid читает сигнатуры файловых систем, метки и UUID. Для проверки всех доступных блочных устройств требуется административный доступ:

sudo blkid

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

Создайте отдельное рабочее пространство и перейдите в него:

mkdir -p /home/labex/project/storage-lab
cd /home/labex/project/storage-lab
pwd

В последнем выводе должен быть путь /home/labex/project/storage-lab.

Проанализируйте использование файловых систем и каталогов

На этом шаге вы сравните df, которая показывает свободное и занятое пространство целых файловых систем, с du, которая измеряет размер файлов и деревьев каталогов.

Создайте два примера файлов с известным логическим размером. Параметр truncate -s эффективно задаёт размер файла, не заполняя его содержательными данными:

cd /home/labex/project/storage-lab
mkdir -p usage/reports usage/archive
truncate -s 2M usage/reports/weekly.log
truncate -s 5M usage/archive/records.bin

Используйте df -h для рабочего каталога. Параметр -h отображает размеры в удобных для чтения единицах, например MiB и GiB:

df -h /home/labex/project/storage-lab

Команда df отвечает на вопрос: «Сколько места занято и доступно в файловой системе, содержащей этот путь?» Важные столбцы — Size, Used, Avail, Use% и Mounted on.

Используйте du -sh, чтобы получить сводку по примеру каталога. Здесь -s означает summary («сводка»), а -h выбирает удобные для чтения единицы:

du -sh usage

В отличие от df, команда du отвечает на вопрос: «Сколько места занимает этот файл или дерево каталогов?» Разреженные файлы, созданные с помощью truncate, могут иметь большой логический размер, занимая при этом мало выделенного дискового пространства. Параметр --apparent-size измеряет их логический размер:

du -h --apparent-size --max-depth=1 usage

Вы должны увидеть, что usage/archive больше, чем usage/reports. Объедините du с сортировкой, чтобы сначала вывести элементы с наибольшим логическим размером:

du -ah --apparent-size usage | sort -rh | head -n 5

Конвейер передаёт вывод du команде sort; параметр -r меняет порядок на обратный, а -h распознаёт суффиксы удобных для чтения размеров. Команда head -n 5 оставляет первые пять результатов.

Создайте и исследуйте файловую систему Ext4

На этом шаге вы создадите виртуальный образ диска, отформатируете его в ext4 и исследуете метаданные файловой системы, не затрагивая реальный диск.

Создайте файл-образ размером 128 MiB. В оставшейся части лабораторной работы этот файл будет использоваться как временное хранилище:

cd /home/labex/project/storage-lab
truncate -s 128M virtual.img

Проверьте его логический размер:

ls -lh virtual.img

До форматирования команда file видит только обычные данные или пустой файл:

file virtual.img

Команда mkfs.ext4 создаёт файловую систему ext4. Параметр -F подтверждает, что обычный файл выбран намеренно, а -L задаёт метку LABEXDATA:

sudo mkfs.ext4 -F -L LABEXDATA virtual.img

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

file virtual.img
sudo blkid -p virtual.img

В выводе должны быть указаны ext4, метка LABEXDATA и сгенерированный UUID. Выведите только этот UUID:

sudo blkid -s UUID -o value virtual.img

Значение UUID создаётся во время форматирования и будет отличаться у разных учащихся.

Смонтируйте, используйте и размонтируйте файловую систему

На этом шаге вы подключите виртуальную файловую систему к дереву каталогов Linux, запишете один файл и безопасно отключите файловую систему.

Точка монтирования — это каталог, в котором становится видна файловая система. Создайте точку монтирования в /mnt — стандартном каталоге для временного административного монтирования:

sudo mkdir -p /mnt/labex-virtual

Смонтируйте образ. Параметр -o loop просит Linux связать обычный файл с loop-устройством, чтобы использовать файл как блочное хранилище:

cd /home/labex/project/storage-lab
sudo mount -o loop virtual.img /mnt/labex-virtual

Проверьте активное монтирование:

findmnt /mnt/labex-virtual

В качестве источника обычно отображается loop-устройство, точкой назначения является /mnt/labex-virtual, а тип файловой системы — ext4. Также можно запросить сведения о конкретной файловой системе с помощью df:

df -h /mnt/labex-virtual

Запишите файл в смонтированную файловую систему. Команда sudo sh -c используется потому, что перенаправление выполняет оболочка, а корневой каталог смонтированной файловой системы принадлежит пользователю root:

sudo sh -c 'echo "stored inside the virtual filesystem" > /mnt/labex-virtual/welcome.txt'
cat /mnt/labex-virtual/welcome.txt

Размонтирование сбрасывает ожидающие записи и отключает файловую систему от точки монтирования:

sudo umount /mnt/labex-virtual

Убедитесь, что файловая система больше не смонтирована:

findmnt /mnt/labex-virtual

Вывод отсутствует, а findmnt возвращает ненулевой код завершения, поскольку не нашла активного монтирования в этой точке. Каталог точки монтирования всё ещё существует, но содержимое образа больше недоступно через него, пока образ не будет смонтирован снова.

Безопасно исследуйте таблицы разделов

На этом шаге вы воспользуетесь fdisk в режиме вывода списка, доступном только для чтения, и различите таблицу разделов и сигнатуру файловой системы.

Выведите список видимых в системе дисков и разделов:

sudo fdisk -l

Параметр -l означает list («список»). Команда показывает размеры дисков, размеры секторов, типы таблиц разделов и разделы, не изменяя их. Не запускайте интерактивный сеанс разметки на незнакомом рабочем диске.

Теперь исследуйте виртуальный образ:

cd /home/labex/project/storage-lab
sudo fdisk -l virtual.img

У образа есть размер диска, но нет записей о разделах. В этом контролируемом примере файловая система ext4 создана непосредственно во всём образе. На физическом диске часто используется следующая структура:

disk device -> partition table -> partition -> filesystem -> mount point

Создайте второй пустой образ для сравнения:

truncate -s 64M partition-demo.img
sudo fdisk -l partition-demo.img

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

sudo wipefs virtual.img partition-demo.img

В virtual.img должна отображаться сигнатура ext4, а в пустом образе для сравнения сигнатура файловой системы отсутствует. Не используйте в этой лабораторной работе разрушающий параметр wipefs -a.

Создайте и проверьте учебный файл Fstab

На этом шаге вы изучите шесть полей записи fstab и безопасно проверите отдельный учебный файл, не изменяя /etc/fstab.

Система читает /etc/fstab, чтобы определить, какие файловые системы следует монтировать согласованно. Выведите его строки, не являющиеся комментариями, не редактируя файл:

grep -Ev '^\s*(#|$)' /etc/fstab

Запись fstab содержит шесть разделённых пробельными символами полей:

source  mount-point  filesystem-type  options  dump  fsck-order

Для физических разделов обычно безопаснее использовать UUID=<value>, чем имя вроде /dev/sdb1, поскольку имена устройств могут измениться при изменении порядка обнаружения оборудования.

Получите UUID образа и поместите закомментированный пример с UUID в учебный файл:

cd /home/labex/project/storage-lab
uuid=$(sudo blkid -s UUID -o value virtual.img)
printf '## Real block device example: UUID=%s /mnt/data ext4 defaults,nofail 0 2\n' "$uuid" > practice-fstab

Поскольку в этой лабораторной работе используется обычный файл, а не физический раздел, активная учебная запись содержит абсолютный путь к образу и параметр loop:

printf '%s\n' '/home/labex/project/storage-lab/virtual.img /mnt/labex-virtual ext4 loop,nofail 0 2' >> practice-fstab

Выведите содержимое учебного файла и проверьте его. Параметр --tab-file указывает findmnt не использовать настоящий /etc/fstab:

cat practice-fstab
findmnt --verify --tab-file practice-fstab

В итоговой сводке должны быть указаны 0 parse errors и 0 errors. Также выводится одно предупреждение о том, что источник является обычным файлом. Это предупреждение ожидаемо: в этой контролируемой лабораторной работе используется файловая система на основе loop-устройства, а не физическое блочное устройство.

Используйте учебный файл для одного контролируемого монтирования. Параметр -T указывает mount прочитать названный альтернативный файл fstab:

sudo mount -T practice-fstab /mnt/labex-virtual
findmnt /mnt/labex-virtual

Созданный ранее welcome.txt должен по-прежнему существовать. Это подтверждает, что монтирование предоставляет доступ к сохранённым данным файловой системы:

cat /mnt/labex-virtual/welcome.txt

Снова размонтируйте файловую систему, чтобы завершить лабораторную работу в безопасном отключённом состоянии:

sudo umount /mnt/labex-virtual

Вы проверили синтаксис постоянного монтирования, не изменяя конфигурацию загрузки системы. Ошибка в настоящем /etc/fstab может нарушить запуск системы, поэтому администраторы обычно проверяют изменения до перезагрузки.

Итоги

Вы связали основные уровни хранения Linux: устройства, разделы, файловые системы и точки монтирования. С помощью lsblk, blkid и findmnt вы исследовали их, а затем сравнили использование пространства всей файловой системы через df с использованием пространства файлами и каталогами через du.

Вы создали файловую систему ext4 с меткой внутри временного образа, смонтировали её через loop-устройство, сохранили данные после размонтирования и исследовали информацию о разделах, не изменяя реальные диски. В завершение вы изучили шесть полей fstab, поняли значение стабильных UUID и научились проверять отдельный учебный файл fstab перед его использованием.