Перейти до основного вмісту

Монтування в Linux

У Linux файлова система не прив'язується до окремої літери диска, як це відбувається у Windows. Замість цього вона підключається до певного каталогу в єдиному дереві файлової системи. Така операція називається монтуванням (mounting).

Наприклад, фізичний диск або його розділ може містити файлову систему ext4. Щоб отримати доступ до її файлів, її можна змонтувати в каталог /mnt/data. Після цього вміст файлової системи буде доступний за шляхом /mnt/data.

Важливо розрізняти пристрій, файлову систему та точку монтування. Наприклад:

/dev/sdb1 → пристрій (розділ) 
/dev/sdb1 → файлова система ext4 
/mnt/data → точка монтування

Після монтування:

/dev/sdb1 
/mnt/data 
/mnt/data/file.txt 
/mnt/data/photos/ ...

Точки монтування

Точка монтування (mount point) — це звичайний каталог, у який підключається файлова система.

Наприклад, створимо каталог:

sudo mkdir /mnt/data

Після цього можна змонтувати розділ:

sudo mount /dev/sdb1 /mnt/data

Тепер вміст /dev/sdb1 доступний через /mnt/data.

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

Як переглянути змонтовані файлові системи

Для перегляду поточних монтувань можна використовувати команду mount:

mount

Для практичної роботи з дисками зручнішою є команда findmnt:

findmnt

Наприклад, можна отримати інформацію про конкретну точку монтування:

findmnt /mnt/data

Також дуже корисна команда lsblk, яка показує диски, розділи, файлові системи та точки монтування:

lsblk -f

Монтування за допомогою mount

Загальний синтаксис:

mount [options] <device> <mount-point>

Наприклад:

sudo mount /dev/sdb1 /mnt/data

Linux автоматично визначить файлову систему, якщо вона може бути розпізнана.

За потреби файлову систему можна вказати явно:

sudo mount -t ext4 /dev/sdb1 /mnt/data

Після монтування перевірити результат можна так:

findmnt /mnt/data

Розмонтування

Щоб від'єднати файлову систему, використовується команда umount:

sudo umount /mnt/data

Також можна вказати пристрій:

sudo umount /dev/sdb1

Після розмонтування файлову систему більше не можна використовувати через цю точку монтування.

Якщо Linux повідомляє, що файлова система зайнята:

umount: /mnt/data: target is busy

це означає, що якийсь процес використовує цю файлову систему. Наприклад, термінал може перебувати всередині /mnt/data, або якийсь процес може мати відкритий файл.

Знайти процеси, які використовують точку монтування, можна за допомогою:

sudo lsof +D /mnt/data

або:

sudo fuser -vm /mnt/data

Не варто без потреби використовувати примусове розмонтування. Спочатку потрібно зрозуміти, який процес використовує файлову систему.

Навіщо потрібен fstab

Якщо виконати:

sudo mount /dev/sdb1 /mnt/data

це монтування зазвичай діятиме лише до перезавантаження системи. Після перезавантаження Linux не зобов'язаний повторити цю операцію.

Для опису файлових систем, які потрібно монтувати автоматично, у Linux використовується файл:

/etc/fstab

Назва fstab походить від file systems table — таблиця файлових систем.

Це один із важливих системних конфігураційних файлів Linux. Його редагування потребує прав адміністратора.

Структура /etc/fstab

Типовий запис у /etc/fstab має шість полів:

<source> 
<mount-point> 
<filesystem-type> 
<options> 
<dump> 
<pass>

Наприклад:

UUID=91f... /mnt/data ext4 defaults 0 2

Розглянемо ці поля окремо.

Перше поле — пристрій або джерело

У першому полі вказується те, що потрібно змонтувати. Це може бути пристрій, UUID, LABEL або інше джерело, яке підтримує mount.

Технічно можна написати:

/dev/sdb1 /mnt/data ext4 defaults 0 2

Але для постійних монтувань зазвичай краще використовувати UUID, а не ім'я пристрою.

UUID файлової системи

Імена на кшталт /dev/sda1 та /dev/sdb1 залежать від того, у якому порядку ядро виявило пристрої. У деяких ситуаціях порядок може змінитися.

UUID є ідентифікатором файлової системи, тому він значно надійніший для записів у fstab.

Подивитися UUID можна за допомогою:

lsblk -f

або:

sudo blkid

Наприклад:

/dev/sdb1: UUID="91f3a7c2-..." TYPE="ext4"

Тоді запис у /etc/fstab може виглядати так:

UUID=91f3a7c2-... /mnt/data ext4 defaults 0 2

Друге поле — точка монтування

Друге поле визначає каталог, у який буде змонтована файлова система:

/mnt/data

Каталог повинен існувати до моменту монтування. Його можна створити:

sudo mkdir -p /mnt/data

Третє поле — тип файлової системи

У третьому полі вказується тип файлової системи.

Наприклад:

ext4 xfs btrfs vfat ntfs exfat

Для Linux-систем найчастіше можна зустріти ext4, але конкретний тип залежить від файлової системи на відповідному розділі.

Тип можна подивитися за допомогою:

lsblk -f

Четверте поле — параметри монтування

Четверте поле містить параметри, які визначають, як саме буде змонтована файлова система.

Найпоширеніше значення:

defaults

Це набір стандартних параметрів монтування. Його можна комбінувати з іншими параметрами через кому.

Наприклад:

defaults,noatime

Деякі часто використовувані параметри:

  • ro — монтувати лише для читання;
  • rw — монтувати для читання і запису;
  • noatime — не оновлювати час останнього доступу до файлів;
  • auto — монтувати під час автоматичної обробки fstab;
  • noauto — не монтувати автоматично;
  • user — дозволити користувачу монтувати файлову систему;
  • users — дозволити монтування та розмонтування користувачам;
  • nofail — не вважати відсутність цього пристрою критичною помилкою під час завантаження.

П'яте поле — dump

П'яте поле традиційно використовується утилітою dump для визначення, чи потрібно включати файлову систему до резервного копіювання.

Для більшості сучасних систем використовується:

0

Тобто, наприклад:

UUID=91f... /mnt/data ext4 defaults 0 2

Шосте поле — pass

Шосте поле визначає порядок перевірки файлових систем утилітою fsck під час завантаження.

Типові значення:

  • 0 — не перевіряти;
  • 1 — перевіряти першою, зазвичай для кореневої файлової системи /;
  • 2 — перевіряти після файлової системи з параметром 1.

Для звичайного додаткового розділу ext4 типовим записом буде:

UUID=91f... /mnt/data ext4 defaults 0 2

Приклад повного налаштування

Припустимо, є розділ:

/dev/sdb1

і на ньому файлова система ext4.

Спочатку подивимося її UUID:

lsblk -f

Припустимо, отримали:

sdb1 ext4 91f3a7c2-1234-4567-89ab-0123456789ab

Створимо точку монтування:

sudo mkdir -p /mnt/data

Відкриємо fstab:

sudo nano /etc/fstab

Додамо:

UUID=91f3a7c2-1234-4567-89ab-0123456789ab /mnt/data ext4 defaults 0 2

Після цього не обов'язково перезавантажувати комп'ютер. Можна перевірити конфігурацію:

sudo mount -a

Команда mount -a намагається змонтувати файлові системи, описані у /etc/fstab, за винятком записів із параметром noauto.

Якщо команда завершилася без помилки, можна перевірити:

findmnt /mnt/data

Це дуже важливий принцип: після зміни /etc/fstab бажано спочатку перевірити його через mount -a, а вже потім перезавантажувати систему.

Параметр nofail

Особливо важливим є параметр nofail. Він може бути корисним для додаткових дисків, зовнішніх накопичувачів або інших файлових систем, відсутність яких не повинна перешкоджати завантаженню Linux.

Наприклад:

UUID=91f... /mnt/data ext4 defaults,nofail 0 2

Без nofail проблема з обов'язковою файловою системою, зазначеною у fstab, може призвести до проблем під час завантаження або потрапляння системи в режим відновлення. Водночас nofail не є універсальним рішенням: для файлових систем, без яких система нормально працювати не може, приховувати проблему таким способом не варто.

Монтування USB-накопичувачів

USB-накопичувачі також містять файлову систему, яку можна змонтувати вручну.

Після підключення диска корисно виконати:

lsblk -f

Створюємо точку монтування:

sudo mkdir -p /mnt/backup

Монтуємо:

sudo mount /dev/sdc1 /mnt/backup

Після роботи:

sudo umount /mnt/backup

Для звичайних настільних Linux-систем графічне середовище часто автоматично монтує USB-накопичувачі. Це не означає, що механізм mount або fstab не використовується — відповідні системні компоненти виконують необхідні операції автоматично.

Монтування за LABEL

Окрім UUID, файловій системі можна призначити мітку (LABEL). Наприклад:

LABEL=BACKUP /mnt/backup ext4 defaults,nofail 0 2

Це може бути зручніше для людини, оскільки BACKUP читається набагато легше, ніж довгий UUID.

Але LABEL не обов'язково є унікальною. Якщо в системі з'являться дві файлові системи з однаковою міткою, можуть виникнути проблеми. Тому для системних конфігурацій UUID часто є більш однозначним варіантом.

Що станеться, якщо помилитися у fstab

/etc/fstab обробляється під час завантаження системи, тому помилка в ньому може мати серйозні наслідки.

Наприклад, якщо вказати неправильний UUID:

UUID=WRONG-UUID /mnt/data ext4 defaults 0 2

Linux не зможе знайти відповідну файлову систему.

Саме тому не варто одразу перезавантажувати систему після редагування fstab. Спочатку перевірте конфігурацію:

sudo mount -a

Також корисно перевірити конкретний запис:

findmnt --verify

Якщо виявлено проблему, її потрібно виправити до перезавантаження.

Важливий принцип: монтується файлова система, а не просто диск

У побуті часто говорять «змонтувати диск», але технічно потрібно розрізняти ці поняття.

Монтування — це не копіювання

Монтування не копіює файли з одного каталогу в інший. Воно підключає файлову систему до дерева каталогів Linux.

Наприклад:

sudo mount /dev/sdb1 /mnt/data

не означає «скопіювати вміст /dev/sdb1 у /mnt/data». Після операції ядро починає обробляти доступ до /mnt/data як доступ до змонтованої файлової системи.

Підсумок

Монтування — фундаментальний механізм Linux, за допомогою якого різні файлові системи підключаються до єдиного дерева каталогів.

Основні команди, які варто знати:

lsblk -f # диски, файлові системи, UUID, точки монтування 
blkid # UUID та типи файлових систем mount # поточні монтування 
findmnt # зручний перегляд дерева монтувань 
sudo mount ... # монтування 
sudo umount ... # розмонтування 
sudo mount -a # монтування відповідно до /etc/fstab 
findmnt --verify # перевірка fstab 
sudo nano /etc/fstab # редагування таблиці файлових систем

Для постійного монтування найчастіше використовується схема:

UUID=<uuid> <mount-point> <filesystem> defaults 0 2

Наприклад:

UUID=91f3a7c2-1234-4567-89ab-0123456789ab /mnt/data ext4 defaults,nofail 0 2

Коментарі

Популярні публікації

Дамп бази даних Postgresql локально

Що потрібно встановити локально (Ubuntu) Встанови клієнтські утиліти PostgreSQL: pg_dump , psql , pg_restore . sudo apt update sudo apt install postgresql-client Кроки міграції Ідея: не зберігати дамп на серверах. Зробити дамп з віддаленого сервера на свій локальний ПК, потім передати його на новий сервер і там відновити. 1) Створення дампу з віддаленого сервера локально pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB -f dump_file.dump Пояснення ключів: -h (хост), -U (користувач), -Fc (custom format), -d (БД), -f (вихідний файл локально). 1.1) Варіант з розбиттям на частини (якщо треба) pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB | split -b 10G - dump_file.dump.part_ Це створить локально файли типу dump_file.dump.part_aa , dump_file.dump.part_ab тощо. 2) Передача дампу на новий сервер Один файл: scp dump_file.dump NEW_USER@NEW_SERVER_IP:/tmp/ Або частинами: scp dump_file.dump.part_* NEW_USER@NEW_SERVER_IP:/tmp/ 3) Збирання файл...

Основи Next.js

Що таке Next.js? Next.js — це прогресивний фреймворк для розробки веб-застосунків на основі React. Він розширює можливості React, додаючи готову інфраструктуру для Server-Side Rendering (SSR), генерації статичних сторінок, маршрутизації через файлову систему, а також можливість створювати backend-ендпоінти прямо в проєкті. Чому він став популярним? Next.js швидко здобув популярність завдяки тому, що пропонує: SEO-дружні сторінки завдяки SSR / SSG; швидкий перший рендер (First Page Load); просту маршрутизацію без налаштування; розгортання в один клік через Vercel; вбудовану оптимізацію зображень та продуктивності. Чим відрізняється від класичного React У класичному React ми отримуємо лише клієнтську бібліотеку для побудови UI-компонентів. Усе інше (SSR, маршрути, API) треба налаштовувати вручну або через сторонні бібліотеки (наприклад, React Router, Redux, Express, etc.). Next.js — це уже повноцінний фреймворк. Він одразу має: серверний рендеринг...

ООП у TypeScript

Короткий вступ TypeScript додає статичну типізацію поверх JavaScript і підтримує класичні концепти ООП: класи , успадкування , інтерфейси , інкапсуляцію , поліморфізм та абстракції . Нижче — практичні приклади та пояснення. Класи — декларація, конструктор, властивості та методи class Person { public name: string; private age: number; protected email?: string; // необов’язкове static species = 'Homo sapiens'; constructor(name: string, age: number, email?: string) { this.name = name; this.age = age; this.email = email; } public greet(): string { return `Hi, I'm ${this.name}.`; } private getBirthYear(currentYear: number): number { return currentYear - this.age; } } const p = new Person('Ivan', 30, 'ivan@example.com'); console.log(p.greet()); // console.log(p.age); // помилка: 'age' приватне console.log(Person.species); Успадкування і перевизначення (extends, super) class Employee extends Person { ...

Створення проєкту на TypeScript, модулі

Крок 1. Ініціалізація проєкту Спочатку створимо нову теку та ініціалізуємо Node.js-проєкт за допомогою npm : mkdir my-typescript-app cd my-typescript-app npm init -y Крок 2. Встановлення TypeScript Додаємо TypeScript як dev-залежність: npm install --save-dev typescript ts-node @types/node - typescript — компілятор TypeScript - ts-node — дозволяє запускати TS-файли без попередньої компіляції - @types/node — типи для стандартних Node.js API Крок 3. Створення файлу tsconfig.json Ініціалізуємо конфігурацію TypeScript: npx tsc --init Приклад файлу tsconfig.json { "compilerOptions": { "target": "ES2020", // Версія JS у вихідному коді "module": "CommonJS", // Система модулів (для Node.js) "rootDir": "src", // Вхідна папка з TypeScript-кодом "outDir": "dist", // Куди компілюється код JS "str...

Інструменти для роботи з Node.js

Що таке npm? npm (Node Package Manager) — це офіційний пакетний менеджер для Node.js . Він дозволяє: Встановлювати сторонні бібліотеки та фреймворки Керувати залежностями проєкту Запускати скрипти (команди) через package.json Приклад ініціалізації проєкту з npm npm init -y Файл package.json (скорочений приклад) { "name": "my-project", "version": "1.0.0", "scripts": { "start": "ts-node src/index.ts", "build": "tsc" }, "dependencies": { "express": "^4.18.0" }, "devDependencies": { "typescript": "^5.0.0", "ts-node": "^10.0.0" } } Що таке tsconfig.json? tsconfig.json — це файл конфігурації для компілятора TypeScript, який визначає, як слід компілювати код. Приклад файлу tsconfig.json { "compilerOptions": { "target": "ES2020...