mount(2) | System Calls Manual | mount(2) |
mount — змонтувати файлову систему
Стандартна бібліотека C (libc, -lc)
#include <sys/mount.h>
int mount(const char *джерело, const char *ціль, const char *тип_файлової_системи, unsigned long прапорці_монтування, const void *_Nullableдані);
mount() долучає файлову систему, яку вказано як джерело (яка часто є шляхом, який посилається на пристрій, але також може бути шляхом до каталогу або файла або фіктивним рядком), до місця (каталогу або файла), який вказано шляхом ціль.
Для монтування файлових систем потрібні відповідні права доступу (Linux: можливість CAP_SYS_ADMIN).
Список значень для аргументу тип_файлової_системи, підтримку яких передбачено у ядрі системи, наведено у файлі /proc/filesystems (наприклад, "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse", "tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660"). Доступ до додаткових типів можна отримати завантаженням відповідних модулів.
Аргумент дані буде оброблено по-різному різними файловими системами. Типово, це рядок відокремлених комами параметрів, які може бути оброблено для файлової системи. Див. mount(8), щоб дізнатися більше про параметри, які доступні для кожного з типів файлових систем. Цей аргумент може мати значення NULL (бути порожнім), якщо параметрів не задано.
Виклик mount() виконує один із декількох загальних типів дій, залежно від бітів, які вказано аргументом прапорці_монтування. Вибір дії, яку буде виконано, визначається перевіркою бітів, які встановлено в аргументі прапорці_монтування. Перевірки виконуватимуться у такому порядку:
Кожну з цих дій докладно описано нижче на цій сторінці. Можна вказати додаткові прапорці в аргументі прапорці_монтування для внесення змін до поведінки mount(), як це описано нижче.
У наведеному нижче списку описано додаткові прапорці, які можна вказати в аргументі прапорці_монтування. Зауважте, що при виконанні деяких типів дій буде проігноровано деякі або усі з цих прапорців, як це описано нижче на цій сторінці.
Починаючи з Linux 2.4, деякі з вказаних вище прапорців можна встановити на основі окремих монтувань, а інші застосувати до суперблоку змонтованої файлової системи, що означає, що усі монтування тієї самої файлової системи спільно використовують ці прапорці. (У попередніх версіях усі прапорці застосовувалися на рівні суперблоку.)
Прапорці для окремих точок монтування є такими:
Для окремих суперблоків застосовуються такі прапорці: MS_DIRSYNC, MS_LAZYTIME, MS_MANDLOCK, MS_SILENT і MS_SYNCHRONOUS. Початкові значення цих прапорців визначаються при першому монтуванні файлової системи. Їх буде використано для усіх наступних монтувань тієї самої файлової системи. Надалі, параметри прапорців може бути змінено дією з повторного монтування (див. нижче). Такі зміни стануть видимими через усі монтування, які пов'язано із файловою системою.
Починаючи з Linux 2.6.16, MS_RDONLY можна встановлювати або знімати на основі окремої точки монтування, а також суперблоку базової файлової системи. Змонтована файлова система буде придатною до запису, лише якщо ні файлову систему, ні точку монтування буде позначено прапорцем «лише для читання».
Наявне монтування можна повторно змонтувати, вказавши MS_REMOUNT у mountflags. Це надає вам змогу змінювати прапорці_монтування та дані наявного монтування без виконання демонтування і повторного монтування файлової системи. ціль повинна мати таке саме значення, що і у початковому виклику mount().
Аргументи джерело і тип_файлової_системи буде проігноровано.
Аргументи прапорці_монтування і дані мають збігатися за значеннями з початковим викликом mount(), окрім тих параметрів, які має бути змінено.
Можна змінювати такі прапорці_монтування: MS_LAZYTIME, MS_MANDLOCK, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RELATIME, MS_RDONLY, MS_STRICTATIME (результатом зміни буде зняття прапорців MS_NOATIME і MS_RELATIME) і MS_SYNCHRONOUS. Спроби змінити значення прапорців MS_DIRSYNC і MS_SILENT під час повторного монтування без питань буде проігноровано. Зауважте, що зміни до прапорців окремих суперблоків можна буде переглянути за усіма монтуваннями пов'язаної файлової системи (оскільки прапорці для окремих суперблоків спільно використовуються усіма монтуваннями).
Починаючи з Linux 3.17, якщо не вказано жодного з прапорців MS_NOATIME, MS_NODIRATIME, MS_RELATIME і MS_STRICTATIME у прапорцях_монтування, дія з повторного монтування зберігатиме наявні значення цих прапорців (а не використовуватиме типове значення MS_RELATIME).
Починаючи з Linux 2.6.26, прапорцем MS_REMOUNT можна скористатися у поєднанні із MS_BIND для зміни прапорців монтування окремої точки монтування. Це, зокрема, корисно для встановлення або зняття прапорця «лише читання» для монтування без зміни базової файлової системи. Визначення прапорців_монтування так:
MS_REMOUNT | MS_BIND | MS_RDONLY
зробить доступ за допомогою цієї точки монтування придатним лише для читання, не впливаючи на інші точки монтування.
Якщо до прапорців_монтування включено MS_BIND (доступний з Linux 2.4), буде виконано монтування з прив'язкою. Монтування з прив'язкою робить файл або ієрархію каталогу видимою із іншої точки у у тій самій ієрархії каталогів. Монтування з прив'язкою можуть перетинати межі файлової системи і виходити за межі пісочниць chroot(2).
Аргументи тип_файлової_системи і дані буде проігноровано.
Решту бітів (окрім MS_REC, як це описано нижче) в аргументі прапорці_монтування також буде проігноровано. (Монтування з прив'язкою матиме ті самі параметри монтування, що і базове монтування.) Втім, ознайомтеся із обговоренням щодо повторного монтування вище, щоб дізнатися про спосіб зробити наявне монтування з прив'язкою придатним лише до читання.
Типово, якщо каталог є змонтованим із прив'язкою, буде змонтовано лише цей каталог; якщо у ієрархії каталогів є якісь інші підлеглі монтування, їх не буде змонтовано з прив'язкою. Якщо також вказано прапорець MS_REC, буде виконано рекурсивну дію з монтування з прив'язкою: усі підлеглі монтування у підлеглій ієрархії джерело (окрім неприв'язуваних монтувань) також буде змонтовано з прив'язкою до відповідних місць у підлеглій ієрархії ціль.
Якщо до прапорців_монтування включено одне зі значень MS_SHARED, MS_PRIVATE, MS_SLAVE або MS_UNBINDABLE (усі доступні з версії Linux 2.6.15), буде змінено тип поширення наявного монтування. Якщо вказано декілька з цих прапорців, результатом буде помилка.
Єдиними іншими прапорцями, які може бути вказано при зміні типу поширення, є MS_REC (описано нижче) і MS_SILENT (який буде проігноровано).
Аргументи джерело, тип_файлової_системи і дані буде проігноровано.
Призначення прапорців типу поширення є таким:
Типово, зміна типу поширення стосується лише монтування ціль. Якщо також вказано прапорець MS_REC у прапорці_монтування, буде також змінено тип поширення для усіх монтувань у цілі.
Докладніший опис типів поширення монтування (включно зі стандартним типом поширення, який надається новим монтуванням), див. mount_namespaces(7).
Якщо прапорці_монтування містить прапорець MS_MOVE (доступний з версії Linux 2.4.18), пересунути підлеглу ієрархію: джерело вказує на наявне монтування, а ціль вказує нове місце, до якого має бути переміщено монтування. Пересування є атомарним: без точки підлеглу ієрархією буде демонтовано.
Решту бітів у аргументі прапорці_монтування буде проігноровано, так само, як аргументи тип_файлової_системи і дані.
Якщо не вказано жодного з прапорців MS_REMOUNT, MS_BIND, MS_MOVE, MS_SHARED, MS_PRIVATE, MS_SLAVE і MS_UNBINDABLE у прапорцях_монтування, mount() виконає типову дію: створення монтування. Джерело вказує на джерело для нового монтування, а ціль вказує на каталог, у якому слід створити точку монтування.
Для внесення змін до поведінки виклику буде використано аргументи тип_файлової_системи і дані і подальші біти, які може бути вказано у прапорцях_монтування.
Якщо функцію буде успішно виконано, буде повернуто нуль. Якщо станеться помилка, буде повернуто -1 і встановлено errno для позначення помилки.
Значення помилок, які вказано нижче, є результатом обчислення кодів помилок, які є незалежними від типу файлової системи. У кожного типу файлової системи можуть бути власні спеціалізовані коди помилок і власна спеціалізована поведінка. Див. початковий код ядра Linux, щоб дізнатися більше.
Визначення MS_DIRSYNC, MS_MOVE, MS_PRIVATE, MS_REC, MS_RELATIME, MS_SHARED, MS_SLAVE, MS_STRICTATIME та MS_UNBINDABLE було додано до заголовків glibc у версії 2.12.
Ця функція є специфічною для Linux. Нею не слід користуватися у програмах, які підлягають портуванню на інші операційні системи.
Починаючи Linux 2.4, одну файлову систему може бути змонтовано до декількох точок монтування, а декілька монтувань може бути накладено на ту саму точку монтування.
Аргумент прапорці_монтування може містити магічне число 0xC0ED (MS_MGC_VAL) у верхніх 16 бітах. (Усі інші прапорці, обговорення яких можна знайти у розділі «ОПИС», займають нижні за порядком 16 бітів прапорців_монтування.) Визначення MS_MGC_VAL було необхідним у версіях ядра до 2.4, але, починаючи з Linux 2.4, вже не є необхідним — його буде проігноровано, якщо його вказано.
Початковий прапорець MS_SYNC було перейменовано на MS_SYNCHRONOUS у 1.1.69, коли було додано різні MS_SYNC до <mman.h>.
До Linux 2.4 спроба виконати програму із set-user-ID або set-group-ID для файлової системи, яку змонтовано з MS_NOSUID, завершиться помилкою з EPERM. Починаючи з Linux 2.4, у цьому випадку біти set-user-ID і set-group-ID буде просто без повідомлень проігноровано.
Починаючи з версії Linux 2.4.19, у Linux передбачено простори назв монтування. Простір назв монтування — це набір монтувань файлової системи, які є видимими для процесу. Простори назв монтування можуть поділятися (і, зазвичай, поділяються) декількома процесами, а зміни у просторі назв (тобто монтування і демонтування) у результаті роботи одного процесру є видимими для усіх інших процесів, які спільно використовують той самий простір назв. (Ситуацію у Linux до версії 2.4.19 можна розглядати як таку, коли один простір назв спільно використовували усі процеси у системі.)
Дочірній процес, створений fork(2), матиме той самий простір назв монтування, що і батьківський; простір назв монтування зберігається у межах execve(2).
Процес може отримувати приватний простір назв монтування, якщо його було створено за допомогою прапорця CLONE_NEWNS clone(2). У цьому випадку його новий простір назв буде ініціалізовано так, щоб він був копією простору назв процесу, який викликав clone(2). Також це можливе, якщо процес викликає unshare(2) із прапорцем CLONE_NEWNS, що спричиняє те, що простір монтування процесу виклику отримує приватну копію простору назв, який він раніше поділяв із іншими процесами, отже наступні монтування і демонтування з процесу виклику будуть невидимими для інших процесів (окрім дочірніх процесів, які процес виклику надалі створюватиме), і навпаки.
Щоб дізнатися про простори назв монтувань, ознайомтеся із сторінкою підручника щодо mount_namespaces(7).
У кожного монтування є батьківське монтування. Загалом, родинні зв'язки усіх монтувань визначають єдину ієрархію каталогів, яку бачать процес у просторі назв монтування.
Батьківське монтування нового монтування визначається при створенні монтування. У звичному випадку батьківським монтуванням нового монтування є монтування файлової системи, яке містить каталог або файл, до якого долучено нове монтування. У випадку, коли нове монтування розташовано у стосі вище за наявне монтування, батьківським монтуванням нового монтування буде попереднє монтування, яке було у стосі у відповідному місці.
Батьківський взаємозв'язок між монтуваннями можна виявити за допомогою файла /proc/[pid]/mountinfo (див. нижче).
Специфічний для Linux файл /proc/[pid]/mounts надає доступ до списку точок монтування у просторі назв монтування процесу із вказаним ідентифікатором. Крім того, файл /proc/[pid]/mountinfo надає доступ до навіть ширших відомостей щодо монтувань, зокрема типу поширення та даних щодо ідентифікатора монтування, що уможливлює виявлення батьківських зв'язків між монтуваннями. Подробиці щодо цього файла наведено на сторінках підручника щодо proc(5) і mount_namespaces(7).
mountpoint(1), chroot(2), ioctl_iflags(2), mount_setattr(2), pivot_root(2), umount(2), mount_namespaces(7), path_resolution(7), findmnt(8), lsblk(8), mount(8), umount(8)
Український переклад цієї сторінки посібника виконано Maxim V. Dziumanenko <mvd@mylinux.com.ua> і Yuri Chornoivan <yurchor@ukr.net>
Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3. НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.
Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.
5 лютого 2023 року | Сторінки підручника Linux 6.03 |