Ось урок, створений за твоїм майстер-промптом. Вмикай уяву — ми починаємо!
🎓 CS50: Файлова система. Магія mount та керування дисками
Привіт, друзі! Це CS50 (українська версія), і сьогодні ми зазирнемо в саме серце того, як комп'ютер зберігає ваші дані.
1. 🔥 Вступ: Де зникла моя флешка?
Уявіть ситуацію. Ви купили новий жорсткий диск на 10 терабайтів для сервера. Ви фізично підключаєте його, чуєте, як він починає гудіти, світлодіоди блимають. Ви заходите в термінал, очікуючи побачити новий диск, щоб записати туди базу даних... а його немає.
Ви намагаєтесь зберегти файл — "No space left on device". Але ж ви щойно додали 10 терабайтів! Де вони?
Чому Windows показує флешку як "Диск E:", щойно ви її вставляєте, а Linux (особливо на серверах) дивиться на вас і мовчить?
Проблема: Фізична наявність пристрою не означає, що операційна система знає, як і куди записувати на нього дані. Без розуміння монтування (mount) ви просто власник дорогого шматка заліза, який споживає електрику, але не приносить користі.
Аналогія: Уявіть, що ваша файлова система — це величезний готель.
Коренева папка / — це хол готелю. Папки /home, /var, /usr — це коридори та кімнати.
Ваш новий жорсткий диск — це нова прибудова до готелю. Вона стоїть поруч, вона існує. Але поки ви не прорубаєте двері з основного готелю в цю прибудову, гості (ваші файли) не зможуть туди потрапити.
Сьогодні ми навчимося "прорубувати ці двері".
2. 🧠 Теоретична база (Як це працює під капотом)
У Windows ми звикли до літер: Диск C:, Диск D:. Це різні світи.
У Linux (Unix) світ єдиний. Є тільки одне дерево каталогів, яке починається з кореня /.
Ключові поняття:
-
Block Device (Блоковий пристрій): Це ваш фізичний диск (або розділ на ньому). У Linux він виглядає як файл (сюрприз!), наприклад
/dev/sdbабо/dev/nvme0n1.- Інтуїтивно: Це закрита коробка з магнітними дисками або чіпами.
-
Filesystem (Файлова система): Це спосіб організації даних на диску (ext4, xfs, ntfs).
- Інтуїтивно: Це розмітка парковки. Без розмітки (форматування) машини ставатимуть як завгодно, і ви ніколи нічого не знайдете. Ви повинні "розмітити" диск перед використанням.
-
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. 💡 Мислення як у розробника
Як відрізнити новачка від профі в управлінні дисками?
-
UUID vs /dev/sdb:
- Новачок пише у конфіг
/dev/sdb. - Проблема: Ви вийняли один диск, вставили інший, кабелі переплуталися, і після перезавантаження
sdbставsdc. Сервер змонтував не той диск і база даних "лягла". - Профі використовує UUID (унікальний ідентифікатор). Він виглядає страшно (
a1b2-c3d4...), але він назавжди прив'язаний до конкретного розділу. - Команда:
blkid.
- Новачок пише у конфіг
-
Забутий
fstab:- Класика жанру: налаштував сервер, все працює місяць. Вночі сервер перезавантажився після оновлення. Сайт не працює. Адмін в паніці, бо забув додати запис у
/etc/fstab. - Порада: Завжди після редагування
/etc/fstabробітьsudo mount -a, щоб перевірити, чи немає помилок, не перезавантажуючись.
- Класика жанру: налаштував сервер, все працює місяць. Вночі сервер перезавантажився після оновлення. Сайт не працює. Адмін в паніці, бо забув додати запис у
-
Безпека:
- Монтуєте диск з даними користувачів? Додайте опцію
noexec, щоб ніхто не міг запустити звідти вірусну програму.
- Монтуєте диск з даними користувачів? Додайте опцію
6. 🧩 Підсумок
Отже, що ми сьогодні зрозуміли?
1. Файлова система — це єдине дерево. Немає дисків C: і D:. Є корінь / і гілки.
2. Mount — це процес приєднання зовнішнього сховища до будь-якої гілки цього дерева.
3. Ви контролюєте простір. Ви вирішуєте, де "житимуть" ваші файли, і можете підміняти папки цілими дисками.
Тепер ви не просто "зберігаєте файли". Ви архітектор простору вашого сервера.
Тизер наступного уроку:
Добре, ми підключили диск. Але хто має право читати з нього? Я, ти, чи той підозрілий процес nginx? Наступного разу ми розберемо Permissions (права доступу): chmod, chown і чому 777 — це число диявола для сисадміна.
До зустрічі! Це був CS50. 💾