#set text(size: 1.3em) #set page(footer: context { if counter(page).get().first() > 1 [ #align(center)[ #counter(page).display("1") ] ] }) #show raw.where(block: false): box.with( fill: luma(240), inset: (x: 3pt, y: 0pt), outset: (y: 3pt), radius: 2pt, ) #show raw.where(block: true): block.with( fill: luma(240), inset: 10pt, radius: 4pt, ) // title #align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики] \ \ \ #align(center)[Факультет инфокоммуникационных технологий] #align(center)[Направление подготовки 11.03.02] \ \ #align(center)[Лабораторная работа №3] #align(center)[Подсистема хранения] \ \ \ //#align(center)[Вариант 19] \ \ \ \ \ \ \ #align(right)[Выполнил:] #align(right)[Дощенников Никита Андреевич] #align(right)[Группа: К3221] #align(right)[Проверил:] #align(right)[Береснев Артем Дмитриевич] \ \ #align(center)[Санкт-Петербург] #align(center)[2025] #pagebreak() === Цель работы: Получить практические навыки работы с подсистемой хранения в Linux, научиться создавать разделы, файловые системы, работать с томами хранения LVM и настраивать NAS систему на примере NFS. === Часть 1. Подготовка конфигурации. Я подготовил две виртуальные машины Linux на `ubuntu24`. #align(center)[#image("assets/1.png")] А также настроил сеть в машинах в режиме "Сеть NAT". #align(center)[#image("assets/2.png")] #align(center)[#image("assets/3.png")] И переименовал в соответствии с заданием: #align(center)[#image("assets/4.png")] #align(center)[#image("assets/5.png")] Также я сделал снимки состояния виртуальных машин. #align(center)[#image("assets/6.png")] === Часть 2. Подключение диска и монтирование файловой системы. При помощи функции "Add Hardware" я добавил диск к машине `c7-2`. #align(center)[#image("assets/7.png")] Я написал скрипт, который выводит на консоль информацию о диске: ```bash #!/bin/bash disk="${1:-/dev/vdb}" name="$(basename "$disk")" uuid="$(blkid -s UUID -o value "$disk" 2>/dev/null || true)" size="$(lsblk -dn -o SIZE "$disk")" sector_size="$(cat "/sys/block/$name/queue/hw_sector_size")" sectors="$(cat "/sys/block/$name/size")" echo "disk name: $name" echo "disk uuid: ${uuid:-none}" echo "disk volume: $size" echo "sector size: $sector_size" echo "# of sectors: $sectors" ``` #align(center)[#image("assets/8.png")] Затем я создал на диске раздел, объемом 1Гб, а на нем файловую систему ext4: #align(center)[#image("assets/9.png")] #align(center)[#image("assets/10.png")] #align(center)[#image("assets/11.png")] После этого, в каталоге `/mount` я создал каталог `disk1`. #align(center)[#image("assets/12.png")] Потом смонтировал новую систему в этот каталог: #align(center)[#image("assets/13.png")] Скопировал на новый диск тестовый файл. #align(center)[#image("assets/14.png")] Определил объем свободного места на всех дисках, подключенных к системе: #align(center)[#image("assets/15.png")] === Часть 3. Изменение раздела и файловой системы. Я, с помощью утилиты `fdisk`, сделал так, чтобы раздел занимал весь диск: #align(center)[#image("assets/16.png")] #align(center)[#image("assets/17.png")] Затем, определил доступный размер файловой системы. #align(center)[#image("assets/18.png")] После, я увеличил размер файловой системы до максимального доступного. #align(center)[#image("assets/19.png")] === Часть 4. Работа с LVM. Я создал 5 новый SATA дисков по 10гб каждый и убедился, что каталог `/dev/` их увидел: #align(center)[#image("assets/20.png")] #align(center)[#image("assets/21.png")] Для того, чтобы создать на всех новых дисках разделы, занимающие 100% места, я использовал скрипт: ```bash #!/bin/bash for disk in /dev/sd{a,b,c,d,e}; do sudo parted -s $disk mklabel gpt sudo parted -s $disk mkpart primary 0% 100% done ``` #align(center)[#image("assets/22.png")] Инициализировал для LVM все созданные разделы. #align(center)[#image("assets/23.png")] #align(center)[#image("assets/24.png")] Создал LVM группы `gr01` на двух первых дисках: #align(center)[#image("assets/25.png")] Создал LVM том `vol01`: #align(center)[#image("assets/26.png")] Проверил размер: #align(center)[#image("assets/27.png")] Создал файловую систему `ext4`: #align(center)[#image("assets/28.png")] Затем смонтировал том в каталог `/mnt/vol01`: #align(center)[#image("assets/29.png")] Добавил третий диск в VG `gr01`: #align(center)[#image("assets/30.png")] Расширил том `vol01` на 100 % нового диска. #align(center)[#image("assets/31.png")] Расширил файловую систему: #align(center)[#image("assets/32.png")] #align(center)[#image("assets/33.png")] Добавил оставшиеся диски в новую VG `gr02`: #align(center)[#image("assets/34.png")] Создал зеркальный том `vol02` в этой группе. #align(center)[#image("assets/35.png")] Создал файловую систему `ext4`: #align(center)[#image("assets/36.png")] Смонтировал том: #align(center)[#image("assets/37.png")] === Часть 5. Управление монтированием дисков. Я создал каталог для монтирования и получил UUID фс на зеркальном томе: #align(center)[#image("assets/38.png")] Затем, в файл `/etc/fstab` я добавил строку: ``` UUID=94897d69-fcbf-49a7-beb1-732d8062bd0c /nfs ext4 defaults 0 2 ``` Проверим работоспособность: #align(center)[#image("assets/39.png")] #align(center)[#image("assets/40.png")] #align(center)[#image("assets/41.png")] === Часть 6. Работа с NFS. На машине `c7-2` установил службу `nfs-kernel-server`, разрешил запуск и запустил её: #align(center)[#image("assets/42.png")] Я разрешил доступ к каталогу `\nfs` через сеть: #align(center)[#image("assets/43.png")] #align(center)[#image("assets/44.png")] C `c7-1` осуществил монтирование сетевого ресурса `nfs` в каталог `/var/remotenfs`. #align(center)[#image("assets/45.png")] #align(center)[#image("assets/46.png")] #align(center)[#image("assets/47.png")] #align(center)[#image("assets/48.png")] === Часть 7. Работа с RAID в Linux. На машину `c7-1` я добавил 3 жестких диска по 1гб. #align(center)[#image("assets/49.png")] Затем создал `RAID-5` массив: #align(center)[#image("assets/50.png")] #align(center)[#image("assets/51.png")] Сохранил конфигурацию RAID, чтобы массив поднимался автоматически при загрузке: #align(center)[#image("assets/52.png")] Обновил `initramfs`: #align(center)[#image("assets/53.png")] #align(center)[#image("assets/54.png")] Я создал файловую систему `ext4` на RAID массиве: #align(center)[#image("assets/55.png")] Затем я создал каталог и смонтировал массив: #align(center)[#image("assets/56.png")] #align(center)[#image("assets/57.png")] #align(center)[#image("assets/58.png")] Положил в RAID каталог тестовый файл: #align(center)[#image("assets/59.png")] Определил доступный объем: #align(center)[#image("assets/60.png")] Затем я удалил диск `sdc`. #align(center)[#image("assets/61.png")] Добавил новый диск: #align(center)[#image("assets/62.png")] #align(center)[#image("assets/63.png")] #align(center)[#image("assets/64.png")] #align(center)[#image("assets/65.png")] #align(center)[#image("assets/66.png")] === Часть 8. Получение информации и изменение файловой системы. Нашел корневой раздел: #align(center)[#image("assets/67.png")] #align(center)[#image("assets/68.png")] #align(center)[#image("assets/69.png")] Включил использование зарезервированных `inode`: #align(center)[#image("assets/70.png")] #align(center)[#image("assets/71.png")] === Ответы на вопросы: *Как вы увеличили раздел в части 3? Какие команды использовали. В чем состояла суть выполненных действий?* При помощи `fdisk`, удалил старый раздел и создал новый, занимающий весь диск: ```bash sudo fdisk /dev/vdb ``` После этого заново создал раздел. Затем обновил файловую систему: ```bash sudo resize2fs /dev/vdb1 ``` Физически размер раздела увеличился, и командой `resize2fs` файловая система была расширена, чтобы занять всё доступное место на диске. *Почему отличается процедура увеличения раздела в частях 3 и 4? Почему в случае LVM не пришлось отмонтировать раздел?* В LVM файловая система расположена не на жёстком разделе, а на логическом томе, который можно динамически изменять. LVM поддерживает online resize, то есть позволяет расширять том, пока он смонтирован: ```bash sudo lvextend -l +100%FREE /dev/gr01/vol01 sudo resize2fs /dev/gr01/vol01 ``` Это возможно, потому что LVM управляет логическими блоками и абстрагирует файловую систему от физического устройства. В обычном случае нужно отмонтировать, так как изменяются реальные границы раздела. *Как можно ограничить доступ через сеть к данным в каталоге NFS сервера?* Ограничение доступа делается через файл `/etc/exports`, где указывается, какие IP-адреса или подсети могут монтировать каталог и с какими правами. ```bash /nfs 192.168.122.0/24(rw,sync,no_root_squash) ``` Здесь доступ разрешён только хостам из подсети `192.168.122.0/24`, с правом записи. *В чем разница архитектуры NAS и DAS?* #table(columns: 3)[*Параметр*][*NAS*][*DAS*][Подключение][Через сеть (TCP/IP, NFS, SMB)][Непосредственно к серверу (SATA, SAS, USB)][Доступ][Несколько клиентов][Один конкретный сервер][Масштабирование][Легко масштабируется][Ограничено локальными портами][Пример][Synology, TrueNAS][Внутренний HDD или SSD] Главное отличие: NAS — это сетевое хранилище, DAS — локально подключённый диск. *В части 4 п.7 вы создали зеркальный том. От каких рисков потери данных это защищает? От каких — не защищает?* Защищает от отказа одного физического диска, от ошибок чтения/записи на отдельном носителе. Не защищает от случайного удаления файлов, от вирусов и логических ошибок, от выхода из строя контроллера или потери всей группы дисков одновременно. *В части 7 вы смогли запустить RAID-массив с потерей диска. Откуда взялись данные?* RAID-5 хранит не только данные, но и чётность, распределённую по всем дискам. При потере одного диска оставшиеся два содержат достаточно информации, чтобы восстановить недостающие блоки. То есть данные не хранились копией, а восстанавливались математически через XOR из чётности и оставшихся данных. *Почему невозможно записать файлы, если свободное место есть, права есть и раздел смонтирован для записи?* На файловых системах типа `ext4` часть блоков зарезервирована для суперпользователя. Если все пользовательские блоки заняты, обычный пользователь не сможет записывать файлы, хотя `df` будет показывать, что немного места ещё есть. ```bash sudo tune2fs -l /dev/sdX | grep 'Reserved block count' ``` Возможно переполнены inode, раздел смонтирован в режиме read-only после ошибки. === Вывод: В ходе лабораторной работы я освоил основные операции с подсистемой хранения данных в linux: создание и изменение разделов, работу с файловыми системами и lvm, настройку сетевого хранилища nfs и организацию raid массивов. На практике были изучены принципы расширения разделов и томов, монтирование файловых систем, создание зеркальных и распределённых хранилищ, а также восстановление raid после отказа диска. Получены навыки администрирования хранилищ и управления доступом к ним.