Files
linux_intro/labs/lab3/report.typ
2025-10-07 15:20:38 +03:00

392 lines
16 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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")]
Затем я создал на диске раздел, объемом б, а на нем файловую систему 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 после отказа диска. Получены навыки администрирования хранилищ и управления доступом к ним.