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

Монтування в 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

Коментарі

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

Встановлення Visual Studio Code на Ubuntu

Visual Studio Code (VS Code) — це потужний, легкий та кросплатформний редактор коду, який став стандартом для розробників завдяки універсальності та швидкості роботи. Він підтримує Windows, Linux і macOS, запускається швидше за повноцінні IDE, але водночас може перетворюватися на повнофункціональне середовище розробки завдяки тисячам розширень. VS Code має продуману архітектуру, інтуїтивний інтерфейс, вбудований термінал та інтелектуальну систему автодоповнення на базі Language Server Protocol, що забезпечує високоякісну підтримку синтаксису для багатьох мов програмування. Серед ключових можливостей — розумне автодоповнення коду (IntelliSense), навігація між класами, символами та файлами, рефакторинг, форматування коду, інтеграція з Git, підтримка віддаленої розробки через SSH або контейнерні середовища (Dev Containers). Завдяки відлагоджувачу (debugger), який налаштовується під будь-яку мову, розробник може запускати код у контрольованому середовищі, ставити брейкпоїнти, переглядат...

Керуючі конструкції в Elixir

Elixir пропонує різноманітні керуючі конструкції для управління потоком виконання програми. На відміну від імперативних мов, всі конструкції в Elixir повертають значення, що робить код більш виразним. if та else Конструкція if перевіряє умову і виконує код відповідно до результату: # Базовий синтаксис if true do "Це буде виконано" else "Це не буде виконано" end # Однорядковий варіант if connected?, do: "Підключено", else: "Відключено" # Присвоєння результату message = if age >= 18 do "Ви повнолітній" else "Ви неповнолітній" end # Без else (повертає nil) if user_logged_in? do show_dashboard() end Примітка: В Elixir тільки false і nil вважаються хибними. Всі інші значення (включаючи 0, "", []) вважаються істинними. unless Конструкція unless — це протилежність if, виконується коли умова хибна: # ...

Шпаргалка по базових командах PostgreSQL

1. Підключення до PostgreSQL через командний рядок: psql -h <host> -p <port> -U <username> -d <database> 2. Підключення до бази без параметрів (якщо користувач і база мають однакове ім’я): psql 3. Показати список усіх баз даних: \l 4. Підключитися до іншої бази даних: \c <database_name> 5. Показати список таблиць у поточній базі: \dt 6. Показати всі об'єкти (таблиці, індекси, секвенції): \d 7. Показати таблиці з усіх схем: \dt *.* 8. Переглянути структуру конкретної таблиці: \d <table_name> 9. Виконати SQL-запит (приклад): SELECT * FROM users; 10. Вийти з psql: \q 11. Створити нову базу даних: CREATE DATABASE mydb; 12. Створити нову таблицю: CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE ); 13. Додати новий запис: INSERT INTO users (name, email) VALUES ('Іван', 'ivan@example.com'); 14. Оновити дані в таблиці: UPDATE users SET name = 'Петро' WH...

Angular CLI

CLI (command-line interface) – інтерфейс командного рядка. Перед початком роботи має бути встановлений Node.js Встановлення: npm install -g @angular/cli Отримання допомоги: ng help Буде приблизно такий результат: add Adds support for an external library to your project. analytics Configures the gathering of Angular CLI usage metrics. See https://angular.io/cli/usage-analytics-gathering. build (b) Compiles an Angular app into an output directory named dist/ at the given output path. Must be executed from within a workspace directory. deploy Invokes the deploy builder for a specified project or for the default project in the workspace. config Retrieves or sets Angular configuration values in the angular.json file for the workspace. doc (d) Opens the official Angular documentation (angular.io) in a browser, and searches for a given keyword. e2e (e) Builds and serves an Angular app, then runs end-to-end tests. extract-i18n (i18n-extract, xi18n) Extracts i18n mes...

Дамп бази даних 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) Збирання файл...