Модуль 15

Файлова система: mount та disk management

Ось урок, створений за твоїм майстер-промптом. Вмикай уяву — ми починаємо!


🎓 CS50: Файлова система. Магія mount та керування дисками

Привіт, друзі! Це CS50 (українська версія), і сьогодні ми зазирнемо в саме серце того, як комп'ютер зберігає ваші дані.

1. 🔥 Вступ: Де зникла моя флешка?

Уявіть ситуацію. Ви купили новий жорсткий диск на 10 терабайтів для сервера. Ви фізично підключаєте його, чуєте, як він починає гудіти, світлодіоди блимають. Ви заходите в термінал, очікуючи побачити новий диск, щоб записати туди базу даних... а його немає.

Ви намагаєтесь зберегти файл — "No space left on device". Але ж ви щойно додали 10 терабайтів! Де вони?

Чому Windows показує флешку як "Диск E:", щойно ви її вставляєте, а Linux (особливо на серверах) дивиться на вас і мовчить?

Проблема: Фізична наявність пристрою не означає, що операційна система знає, як і куди записувати на нього дані. Без розуміння монтування (mount) ви просто власник дорогого шматка заліза, який споживає електрику, але не приносить користі.

Аналогія: Уявіть, що ваша файлова система — це величезний готель. Коренева папка / — це хол готелю. Папки /home, /var, /usr — це коридори та кімнати. Ваш новий жорсткий диск — це нова прибудова до готелю. Вона стоїть поруч, вона існує. Але поки ви не прорубаєте двері з основного готелю в цю прибудову, гості (ваші файли) не зможуть туди потрапити.

Сьогодні ми навчимося "прорубувати ці двері".


2. 🧠 Теоретична база (Як це працює під капотом)

У Windows ми звикли до літер: Диск C:, Диск D:. Це різні світи. У Linux (Unix) світ єдиний. Є тільки одне дерево каталогів, яке починається з кореня /.

Ключові поняття:

  1. Block Device (Блоковий пристрій): Це ваш фізичний диск (або розділ на ньому). У Linux він виглядає як файл (сюрприз!), наприклад /dev/sdb або /dev/nvme0n1.

    • Інтуїтивно: Це закрита коробка з магнітними дисками або чіпами.
  2. Filesystem (Файлова система): Це спосіб організації даних на диску (ext4, xfs, ntfs).

    • Інтуїтивно: Це розмітка парковки. Без розмітки (форматування) машини ставатимуть як завгодно, і ви ніколи нічого не знайдете. Ви повинні "розмітити" диск перед використанням.
  3. Mount Point (Точка монтування): Це звичайна папка у вашій системі (наприклад, /mnt/data), до якої ми "прикріплюємо" диск.

    • Запам'ятати: Це ті самі "двері" в прибудову. Доки диск не змонтовано, папка може бути порожньою. Як тільки змонтували — вміст папки підміняється вмістом диска.

Логіка процесу: Купив диск -> Створив розділ (Partition) -> Відформатував (Filesystem) -> Змонтував (Mount) -> Користуєшся.


3. 🧪 Приклади (Live Coding)

Давайте подивимось, як це виглядає в реальності.

Крок 1: Розвідка

Я підключив диск. Як мені його побачити? Команда lsblk (list block devices) — це як рентген для вашого комп'ютера.

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
└─sda1   8:1    0   50G  0 part /
sdb      8:16   0   10G  0 disk 

Питання до вас: Бачите sdb? У нього є MOUNTPOINT? Відповідь: Ні, колонка пуста. Система бачить диск на 10GB, але не використовує його.

Крок 2: Створення файлової системи (Форматування)

Припустимо, ми вже створили розділ (для простоти пропустимо fdisk, уявімо, що диск sdb готовий до форматування). Нам треба створити там порядок (ext4).

$ sudo mkfs.ext4 /dev/sdb
...
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

Ми щойно накреслили розмітку на парковці.

Крок 3: Монтування (The Magic Moment)

Створимо "двері" — папку /data.

$ sudo mkdir /data

А тепер — магія. Ми кажемо системі: "Коли я заходжу в /data, показуй мені те, що лежить на пристрої /dev/sdb".

$ sudo mount /dev/sdb /data

Перевіряємо знову lsblk:

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   10G  0 disk /data

Вуаля! Тепер, записуючи файл у /data/photo.jpg, ви фізично пишете його на новий диск sdb.

Крок 4: Проблема перезавантаження (Персистентність)

Якщо ви перезавантажите комп'ютер зараз, магія зникне. Диск "відпаде". Чому? Бо mount працює тільки "тут і зараз". Щоб це сталося назавжди, треба прописати інструкцію у файл /etc/fstab (file system table).

Це як список справ для дворецького, який він читає при кожному запуску системи: "Будь ласка, прикріпи диск sdb до папки /data".


4. 🛠 Практична частина

Час забруднити руки. Якщо у вас немає вільного диска, можете тренуватися на флешці або створити віртуальний файл-диск (loop device), але це тема для іншого уроку. Уявімо, що ви працюєте на VM.

Завдання 1: Детектив Використайте команду df -h (disk free, human readable). Знайдіть, скільки вільного місця на вашому кореневому розділі (/).

Завдання 2: Тимчасове монтування 1. Створіть папку mkdir ~/my_folder. 2. Створіть будь-який файл всередині: touch ~/my_folder/hello.txt. 3. (Якщо є права/можливість) Змонтуйте інший диск або tmpfs у цю папку. Приклад для тесту (tmpfs - це диск в оперативній пам'яті): sudo mount -t tmpfs tmpfs ~/my_folder 4. Подивіться вміст папки (ls ~/my_folder). Де дівся файл hello.txt? 5. Розмонтуйте: sudo umount ~/my_folder. Перевірте вміст знову.

Завдання 3: Виправлення помилки Ви намагаєтесь розмонтувати диск, але отримуєте помилку: target is busy. Підказка: Ви, ймовірно, стоїте "всередині" цієї кімнати. Вийдіть з папки (cd ..) і спробуйте знову.

Завдання 4: Міні-кейс У вас переповнився диск /var (там лежать логи). Ви додали новий диск. Ваша стратегія: 1. Змонтувати новий диск у тимчасову папку. 2. Перенести дані з /var/log на новий диск. 3. Змонтувати новий диск прямо в /var/log. Опишіть (на папері або подумки), які команди ви б використали.

Завдання 5: А що, якщо... Що станеться, якщо змонтувати диск у папку, де вже лежать файли? Вони видаляться? (Спойлер: Ні, вони стануть невидимими, доки ви не приберете диск. Як килим, покладений поверх люка в підлозі).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в управлінні дисками?

  1. UUID vs /dev/sdb:

    • Новачок пише у конфіг /dev/sdb.
    • Проблема: Ви вийняли один диск, вставили інший, кабелі переплуталися, і після перезавантаження sdb став sdc. Сервер змонтував не той диск і база даних "лягла".
    • Профі використовує UUID (унікальний ідентифікатор). Він виглядає страшно (a1b2-c3d4...), але він назавжди прив'язаний до конкретного розділу.
    • Команда: blkid.
  2. Забутий fstab:

    • Класика жанру: налаштував сервер, все працює місяць. Вночі сервер перезавантажився після оновлення. Сайт не працює. Адмін в паніці, бо забув додати запис у /etc/fstab.
    • Порада: Завжди після редагування /etc/fstab робіть sudo mount -a, щоб перевірити, чи немає помилок, не перезавантажуючись.
  3. Безпека:

    • Монтуєте диск з даними користувачів? Додайте опцію noexec, щоб ніхто не міг запустити звідти вірусну програму.

6. 🧩 Підсумок

Отже, що ми сьогодні зрозуміли? 1. Файлова система — це єдине дерево. Немає дисків C: і D:. Є корінь / і гілки. 2. Mount — це процес приєднання зовнішнього сховища до будь-якої гілки цього дерева. 3. Ви контролюєте простір. Ви вирішуєте, де "житимуть" ваші файли, і можете підміняти папки цілими дисками.

Тепер ви не просто "зберігаєте файли". Ви архітектор простору вашого сервера.

Тизер наступного уроку: Добре, ми підключили диск. Але хто має право читати з нього? Я, ти, чи той підозрілий процес nginx? Наступного разу ми розберемо Permissions (права доступу): chmod, chown і чому 777 — це число диявола для сисадміна.

До зустрічі! Це був CS50. 💾