#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)[Лабораторная работа №2]
#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 после отказа диска. Получены навыки администрирования хранилищ и управления доступом к ним.
