104.3 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
104 Пристрої, файлові системи Linux, стандарт ієрархії файлової системи |
Тема: |
104.3 Контроль монтування та демонтування файлових систем |
Урок: |
1 з 1 |
Вступ
До цього моменту ми дізналися, як розділяти диски, а також як створювати та підтримувати на них файлові системи. Однак перш ніж отримати доступ до файлової системи в Linux, її потрібно змонтувати.
Це означає приєднання файлової системи до певного місця в дереві каталогів вашої системи, яке називається точкою монтування. Файлові системи можна змонтувати вручну або автоматично, і для цього є багато способів. Про деякі з них ми дізнаємося на цьому уроці.
Монтування та демонтування файлових систем
Команда для ручного монтування файлової системи називається mount
і її синтаксис такий:
mount -t TYPE DEVICE MOUNTPOINT
Де:
TYPE
-
Тип файлової системи, яка монтується (наприклад, ext4, btrfs, exfat тощо).
DEVICE
-
Назва розділу, що містить файлову систему (наприклад,
/dev/sdb1
). MOUNTPOINT
-
Куди буде змонтована файлова система. Підключений каталог не повинен бути порожнім, також він повинен існувати. Проте будь-які файли в ньому будуть недоступні за назвою, поки файлова система змонтована.
Наприклад, щоб підключити флеш-накопичувач USB, що містить файлову систему exFAT, яка розташована на /dev/sdb1
, до каталогу під назвою flash
у вашому домашньому каталозі, ви можете використати:
# mount -t exfat /dev/sdb1 ~/flash/
Tip
|
Багато систем Linux використовують оболонку Bash, і в них тильда |
Після монтування вміст файлової системи буде доступний у каталозі ~/flash
:
$ ls -lh ~/flash/ total 469M -rwxrwxrwx 1 root root 454M jul 19 09:49 lineage-16.0-20190711-MOD-quark.zip -rwxrwxrwx 1 root root 16M jul 19 09:44 twrp-3.2.3-mod_4-quark.img
Перелік змонтованих файлових систем
Якщо ви введете лише mount
, ви отримаєте список усіх файлових систем, які на даний момент змонтовані у вашій системі. Цей список може бути досить великим, оскільки окрім дисків, підключених до вашої системи, він також містить у пам’яті run-time-файлові системи, які служать різним цілям. Щоб відфільтрувати вихідні дані, ви можете використовувати параметр -t
, щоб вивести лише файлові системи відповідного типу, як показано нижче:
# mount -t ext4 /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro)
Ви можете вказати кілька файлових систем одночасно, розділивши їх комою:
# mount -t ext4,fuseblk /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro) /dev/sdb1 on /home/carol/flash type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) [DT_8GB]
Результат у наведених вище прикладах можна описати у форматі:
SOURCE on TARGET type TYPE OPTIONS
Де SOURCE
є розділом, який містить файлову систему, TARGET
є каталогом, куди вона змонтована, TYPE
є типом файлової системи, а OPTIONS
є параметрами, які передаються команді mount
під час монтування.
Додаткові параметри командного рядка
Є багато параметрів командного рядка, які можна використовувати з mount
. Деякі з найбільш використовуваних:
-a
-
Змонтує всі файлові системи, перелічені у файлі
/etc/fstab
(докладніше про це в наступному розділі). -o
або--options
-
Передасть список розділених комами опцій монтування команді монтування, яка може змінити спосіб монтування файлової системи. Вони також будуть обговорені разом із
/etc/fstab
. -r
або-ro
-
Змонтує файлову систему як доступну лише для читання.
-w
або-rw
-
Дозволить монтувати файлову систему як доступну для запису.
Щоб відключити файлову систему, скористайтеся командою umount
, а потім вкажіть ім’я пристрою або точку монтування. Розглядаючи наведений вище приклад, наведені нижче команди є взаємозамінними:
# umount /dev/sdb1 # umount ~/flash
Деякі з параметрів командного рядка для umount
:
-a
-
Це розмонтує всі файлові системи, перелічені в
/etc/fstab
. -f
-
Це призведе до примусового розмонтування файлової системи. Це може бути корисно, якщо ви змонтували віддалену файлову систему, яка стала недоступною.
-r
-
Якщо файлову систему неможливо відмонтувати, спробує зробити її доступною лише для читання.
Робота з відкритими файлами
Під час розмонтування файлової системи ви можете зіткнутися з повідомленням про помилку target is busy
. Це станеться, якщо у файловій системі є відкриті файли. Однак може бути не відразу зрозуміло, де знаходиться відкритий файл або що має доступ до файлової системи.
У таких випадках ви можете використати команду lsof
з назвою пристрою, що містить файлову систему, щоб побачити список процесів, які мають доступ до неї, і які файли відкриті. Наприклад:
# umount /dev/sdb1 umount: /media/carol/External_Drive: target is busy. # lsof /dev/sdb1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME evince 3135 carol 16r REG 8,17 21881768 5195 /media/carol/External_Drive/Documents/E-Books/MagPi40.pdf
COMMAND
- це ім’я виконуваного файлу, який відкрив файл, а PID
- це номер процесу. NAME
– це ім’я відкритого файлу. У наведеному вище прикладі файл MagPi40.pdf
відкривається програмою evince
(переглядач PDF). Якщо ми закриємо програму, ми зможемо розмонтувати файлову систему.
Note
|
Перш ніж з’явиться результат lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete.
|
Куди монтувати?
Ви можете змонтувати файлову систему куди завгодно. Однак є деякі загальноприйняті успішні практики, яких слід дотримуватися, щоб полегшити адміністрування системи.
Традиційно, /mnt
був каталогом, до якого монтувалися всі зовнішні пристрої, а також ряд попередньо налаштованих «точок прив’язки» для звичайних пристроїв, таких як приводи CD-ROM (/mnt/cdrom
) і дискети (/mnt/floppy
), які існували під ними.
Цей каталог було замінено на /media
, який тепер є точкою монтування за замовчуванням для будь-яких знімних носіїв (наприклад, зовнішніх дисків, USB-флеш-накопичувачів, пристроїв зчитування карт пам’яті тощо), підключених до системи.
У більшості сучасних дистрибутивів Linux і настільних середовищ знімні пристрої автоматично монтуються в папку /media/USER/LABEL
при підключенні до системи, де USER
є ім’ям користувача, а LABEL
є міткою пристрою. Наприклад, флеш-накопичувач USB з міткою FlashDrive
, підключений користувачем john
, буде змонтовано в /media/john/FlashDrive/
. Спосіб вирішення цієї проблеми залежить від середовища робочого столу.
З огляду на це, щоразу, коли вам потрібно вручну змонтувати файлову систему, доцільно монтувати її у /mnt
.
Монтування файлових систем при завантаженні
Файл /etc/fstab
містить описи файлових систем, які можна змонтувати. Це текстовий файл, де кожен рядок описує файлову систему, яку потрібно змонтувати, з шістьма полями на рядок у такому порядку:
FILESYSTEM MOUNTPOINT TYPE OPTIONS DUMP PASS
Де:
FILESYSTEM
-
Пристрій, що містить файлову систему, яку потрібно змонтувати. Замість пристрою ви можете вказати UUID або мітку розділу, про що ми поговоримо пізніше.
MOUNTPOINT
-
Куди буде змонтована файлова система.
TYPE
-
Тип файлової системи.
OPTIONS
-
Параметри монтування, які будуть передані до
mount
. DUMP
-
Вказує, чи слід розглядати будь-які файлові системи ext2, ext3 або ext4 для резервного копіювання за допомогою команди
dump
. Зазвичай він дорівнює нулю, тобто їх слід ігнорувати. PASS
-
Якщо поле не дорівнює нулю, тоді визначає порядок, у якому файлові системи будуть перевірятися під час завантаження. Зазвичай поле дорівнює нулю.
Наприклад, перший розділ на першому диску машини можна описати так:
/dev/sda1 / ext4 noatime,errors
Параметри монтування в OPTIONS
— це список параметрів, розділених комами, які можуть бути загальними або специфічними для файлової системи. Серед загальних параметрів маємо:
atime
таnoatime
-
За замовчуванням, щоразу, коли читається файл, інформація про час доступу оновлюється. Вимкнення цього (за допомогою
noatime
) може прискорити введення-виведення данних на диск. Не плутайте це з часом модифікації, який оновлюється щоразу, коли записується файл. auto
таnoauto
-
Чи можна (не можна) автоматично змонтувати файлову систему за допомогою
mount -a
. defaults
-
Це передасть параметри
rw
,suid
,dev
,exec
,auto
,nouser
таasync
уmount
. dev
таnodev
-
Слід інтерпретувати пристрої як символьні чи як блочні у змонтованій файловій системі.
exec
таnoexec
-
Дозволити або заборонити дозвіл на виконання двійкових файлів у файловій системі.
user
таnouser
-
Дозволяє (чи ні) звичайному користувачеві монтувати файлову систему.
group
-
Дозволяє користувачеві монтувати файлову систему, якщо користувач належить до тієї ж групи, яка є власником пристрою, на якому розташована ця файлова система.
owner
-
Дозволяє користувачеві монтувати файлову систему, якщо користувач є власником пристрою, на якому розташована ця файлова система.
suid
таnosuid
-
Дозволити чи ні SETUID і SETGID бітам виконувати своє призначення.
ro
таrw
-
Монтує файлову систему як доступну лише для читання або запису.
remount
-
Перемонтує вже змонтовану файлову систему. Не використовується в
/etc/fstab
, а як параметр дляmount -o
. Наприклад, щоб перемонтувати вже змонтований розділ/dev/sdb1
як доступний лише для читання, ви можете використати командуmount -o remount,ro /dev/sdb1
. Під час перемонтування вам не потрібно вказувати тип файлової системи, лише ім’я пристрою або точку монтування. sync
таasync
-
Виконувати всі операції введення-виведення з файловою системою синхронно чи асинхронно.
async
зазвичай встановлено за замовчуванням. man-сторінка дляmount
попереджає, що використання синхронізації на носіях з обмеженою кількістю циклів запису (наприклад, флеш-накопичувачі чи картки пам’яті) може скоротити термін служби пристрою.
Використання UUID та міток
Визначення імені пристрою, що містить файлову систему для монтування, може спричинити деякі проблеми. Іноді одне й те саме ім’я пристрою може бути призначено іншому пристрою залежно від того, коли і де він був під’єднаний до вашої системи. Наприклад, флеш-накопичувач USB на /dev/sdb1
може бути призначений для /dev/sdc1
, якщо він підключений до іншого порту або після іншого флеш-накопичувача.
Один із способів уникнути цього – вказати мітку або універсальний унікальний ідентифікатор (UUID, Universally Unique Identifier) пристрою. Обидва вказуються під час створення файлової системи і не зміняться, якщо файлова система не буде знищена або вручну не призначено нову мітку або UUID.
Команда lsblk
може використовуватися для запиту інформації про файлову систему та пошуку мітки та UUID, пов’язаних з нею. Для цього скористайтеся параметром -f
, а потім вкажіть ім’я пристрою:
$ lsblk -f /dev/sda1 NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda1 ext4 6e2c12e3-472d-4bac-a257-c49ac07f3761 64,9G 33% /
Переглянемо значення кожного стовпця:
NAME
-
Назва пристрою, що містить файлову систему.
FSTYPE
-
Тип файлової системи.
LABEL
-
Мітка файлової системи.
UUID
-
Універсальний унікальний ідентифікатор (UUID), призначений файловій системі.
FSAVAIL
-
Скільки вільного місця у файловій системі.
FSUSE%
-
Відсоток використання файлової системи.
MOUNTPOINT
-
Куди монтується файлова система.
У /etc/fstab
для пристрою може бути вказано його UUID з параметром UUID=
, за яким слідує UUID, або за допомогою LABEL=
, за яким слідує мітка. Отже, замість:
/dev/sda1 / ext4 noatime,errors
Ви використовуєте:
UUID=6e2c12e3-472d-4bac-a257-c49ac07f3761 / ext4 noatime,errors
Або, якщо у вас є диск з позначкою homedisk
:
LABEL=homedisk /home ext4 defaults
Той самий синтаксис можна використати з командою mount
. Замість назви пристрою передайте UUID або мітку. Наприклад, щоб підключити зовнішній диск NTFS з UUID 56C11DCC5D2E1334
на /mnt/external
, команда буде такою:
$ mount -t ntfs UUID=56C11DCC5D2E1334 /mnt/external
Монтування дисків за допомогою Systemd
Systemd — це процес ініціалізації, перший процес, який запускається в багатьох дистрибутивах Linux. Він відповідає за створення інших процесів, запуск служб і завантаження системи. Серед багатьох інших завдань, systemd також можна використовувати для керування монтуванням (та автоматичним монтуванням) файлових систем.
Щоб використовувати цю функцію systemd, вам потрібно створити файл конфігурації під назвою mount unit. Кожен том, який потрібно змонтувати, отримує власний блок монтування, і їх потрібно розмістити в /etc/systemd/system/
.
Блоки монтування — це прості текстові файли з розширенням .mount
. Основний формат показаний нижче:
[Unit] Description= [Mount] What= Where= Type= Options= [Install] WantedBy=
Description=
-
Короткий опис блоку монтування, щось на зразок
Mounts the backup disk
. What=
-
Що потрібно змонтувати. Том має бути вказаний як
/dev/disk/by-uuid/VOL_UUID
, деVOL_UUID
- цє UUID тому. Where=
-
Повинен бути повний шлях до місця, куди потрібно змонтувати том.
Type=
-
Тип файлової системи.
Options=
-
Параметри монтування, які ви можете передати, вони використовуються з командою
mount
або в/etc/fstab
. WantedBy=
-
Використовується для керування залежностями. У цьому випадку ми будемо використовувати
multi-user.target
. Це означає, що щоразу, коли система завантажується в багатокористувацьке середовище (звичайне завантаження), пристрій буде змонтовано.
Наш попередній приклад зовнішнього диска можна записати так:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
Але ми ще не закінчили. Для правильної роботи блок монтування повинен мати те саме ім’я, що й точка монтування. У цьому випадку точкою монтування є /mnt/external
, тому файл має називатися mnt-external.mount
.
Після цього вам потрібно перезапустити демон systemd за допомогою команди systemctl
і запустити пристрій:
# systemctl daemon-reload # systemctl start mnt-external.mount
Тепер вміст зовнішнього диска має бути доступним на /mnt/external
. Ви можете перевірити стан монтування за допомогою команди systemctl status mnt-external.mount
, як показано нижче:
# systemctl status mnt-external.mount ● mnt-external.mount - External data disk Loaded: loaded (/etc/systemd/system/mnt-external.mount; disabled; vendor pres Active: active (mounted) since Mon 2019-08-19 22:27:02 -03; 14s ago Where: /mnt/external What: /dev/sdb1 Tasks: 0 (limit: 4915) Memory: 128.0K CGroup: /system.slice/mnt-external.mount ago 19 22:27:02 pop-os systemd[1]: Mounting External data disk... ago 19 22:27:02 pop-os systemd[1]: Mounted External data disk.
Команда systemctl start mnt-external.mount
дозволить використовувати пристрій лише для поточного сеансу. Якщо ви хочете ввімкнути його для кожного завантаження, замініть start
на enable
:
# systemctl enable mnt-external.mount
Автоматичне встановлення блоку монтування
Блоки монтування можна автоматично монтувати, коли є доступ до точки монтування. Для цього вам потрібен файл .automount поряд із файлом .mount, що описує пристрій. Основний формат:
[Unit] Description= [Automount] Where= [Install] WantedBy=multi-user.target
Як і раніше, Description=
є коротким описом файлу, а Where=
є точкою монтування. Наприклад, файл .automount
для нашого попереднього прикладу буде таким:
[Unit] Description=Automount for the external data disk [Automount] Where=/mnt/external [Install] WantedBy=multi-user.target
Збережіть файл з тим самим ім’ям, що й точка монтування (у цьому випадку mnt-external.automount
), перезавантажте systemd і запустіть пристрій:
# systemctl daemon-reload # systemctl start mnt-external.automount
Тепер, коли буде здійснено доступ до каталогу /mnt/external
, диск буде змонтовано. Як і раніше, щоб увімкнути автоматичне монтування для кожного завантаження, треба виконати:
# systemctl enable mnt-external.automount
Вправи до посібника
-
Як використовуючи
mount
можна змонтувати файлову системуext4
на/dev/sdc1
до/mnt/external
тільки для читання, використовуючи параметриnoatime
таasync
? -
При розмонтуванні файлової системи за адресою
/dev/sdd2
ви отримуєте повідомлення про помилкуtarget is busy
. Як можна дізнатися, які файли у файловій системі відкриті і які процеси їх відкрили? -
Розглянемо такий запис у
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Чи буде змонтована ця файлова система, якщо буде видана командаmount -a
? Чому? -
Як можна дізнатися UUID файлової системи в
/dev/sdb1
? -
Як ви можете використовувати
mount
для перемонтування файлової системи exFAT лише для читання з UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, змонтованим у/mnt/data
? -
Як ви можете отримати список усіх файлових систем
ext3
таntfs
, які зараз змонтовані в системі?
Дослідницькі вправи
-
Розглянемо такий запис у
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Чи може користувач змонтувати цю файлову систему за допомогою командиmount /backup
? Чому? -
Розглянемо віддалену файлову систему, змонтовану на
/mnt/server
, яка стала недоступною через втрату мережевого підключення. Як можна змусити її розмонтувати або змонтувати як доступ лише для читання, якщо розмонтувати неможливо? -
Напишіть запис
/etc/fstab
, який би монтував том btrfs з міткоюBackup
у/mnt/backup
, з параметрами за замовчуванням і без дозволу виконання бінарних файлів з нього. -
Розглянемо такий блок монтування systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
-
Що буде еквівалентним записом
/etc/fstab
для цієї файлової системи?
-
-
Яким має бути ім’я файлу для вищенаведеного блоку, щоб він міг використовуватися systemd? Де його слід розмістити?
Підсумки
У цьому уроці ви дізналися, як монтувати та відмонтувати файлові системи вручну чи автоматично. Деякі з пояснених команд і концепцій:
-
mount
(монтує пристрій у визначене місце). -
umount
(відмонтовує пристрій). -
lsof
(виводить процеси, які звертаються до файлової системи). -
Каталоги
/mnt
та/media
. -
/etc/fstab
. -
lsblk
(виводить тип і UUID файлової системи). -
Як підключити файлову систему за допомогою її UUID або мітки.
-
Як змонтувати файлову систему за допомогою модулів монтування systemd.
-
Як автоматично підключити файлову систему за допомогою модулів монтування systemd.
Відповіді на вправи до посібника
-
Як використовуючи
mount
можна змонтувати файлову системуext4
на/dev/sdc1
до/mnt/external
тільки для читання, використовуючи параметриnoatime
таasync
?# mount -t ext4 -o noatime,async,ro /dev/sdc1 /mnt/external
-
При розмонтуванні файлової системи за адресою
/dev/sdd2
ви отримуєте повідомлення про помилкуtarget is busy
. Як можна дізнатися, які файли у файловій системі відкриті і які процеси їх відкрили?Використовуйте
lsof
, а потім додайте назву пристрою:$ lsof /dev/sdd2
-
Розглянемо такий запис у
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Чи буде змонтована ця файлова система, якщо буде видана командаmount -a
? Чому?Її не монтують. Ключем є параметр
noauto
, що означає, що цей запис ігноруєтьсяmount -a
. -
Як можна дізнатися UUID файлової системи в
/dev/sdb1
?Використовуйте
lsblk -f
, а потім ім’я файлової системи:$ lsblk -f /dev/sdb1
-
Як ви можете використовувати
mount
для перемонтування файлової системи exFAT лише для читання з UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, змонтованим у/mnt/data
?Оскільки файлова система змонтована, вам не потрібно турбуватися про тип файлової системи чи ідентифікатор, просто використовуйте параметр
remount
з параметромro
(лише для читання) і точкою монтування:# mount -o remount,ro /mnt/data
-
Як ви можете отримати список усіх файлових систем
ext3
таntfs
, які зараз змонтовані в системі?Використовуйте
mount -t
, а потім список файлових систем, розділений комами:# mount -t ext3,ntfs
Відповіді до дослідницьких вправ
-
Розглянемо такий запис у
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Чи може користувач змонтувати цю файлову систему за допомогою командиmount /backup
? Чому?Ні, параметр
nouser
не дозволить звичайним користувачам монтувати цю файлову систему. -
Розглянемо віддалену файлову систему, змонтовану на
/mnt/server
, яка стала недоступною через втрату мережевого підключення. Як можна змусити її розмонтувати або змонтувати як доступ лише для читання, якщо розмонтувати неможливо?Передайте параметри
-f
та-r
, щоб розмонтувати. Команда буде мати виглядumount -f -r /mnt/server
. Пам’ятайте, що ви можете групувати параметри, томуumount -fr /mnt/server
також буде працювати. -
Напишіть запис
/etc/fstab
, який би монтував том btrfs з міткоюBackup
у/mnt/backup
, з параметрами за замовчуванням і без дозволу виконання бінарних файлів з нього.Рядок має бути
LABEL=Backup /mnt/backup btrfs defaults,noexec
-
Розглянемо такий блок монтування systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
-
Що буде еквівалентним записом
/etc/fstab
для цієї файлової системи?Запис буде таким:
UUID=56C11DCC5D2E1334 /mnt/external ntfs defaults
-
-
Яким має бути ім’я файлу для вищенаведеного блоку, щоб він міг використовуватися systemd? Де його слід розмістити?
Ім’я файлу має збігатися з точкою монтування, тому
mnt-external.mount
вноситься до/etc/systemd/system
.