Введение
Хранилище 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 перед его использованием.



