ОП.05Файловая система Linuxзанятие 3Материалы

Часть 7 из 8

Файловые системы и монтирование

В этой части рассмотрим, как файловые системы разных устройств объединяются в одно дерево каталогов, как определить файловую систему для конкретного пути и как измерить занятое и свободное место.

  1. 7.1 Файловая система и монтирование
  2. 7.2 Занятое и свободное место
  3. 7.3 Подключение файловой системы к каталогу

7.1 Файловая система и монтирование

Файловая система определяет способ хранения файлов: как записываются имена, сведения о файлах и данные. На дисках в Linux обычно используется ext4, в оперативной памяти — tmpfs, а proc и sysfs, как мы видели в части 5, данные вообще не хранят.

Чтобы файловая система стала доступна, её монтируют — подключают к каталогу общего дерева. Такой каталог называется точкой монтирования. Корневая файловая система подключена к /, proc — к /proc, флешка может быть подключена к /media/ubuntu/имя. Для программ путь выглядит одинаково, на каком бы устройстве ни находился файл.

Пример. Когда вы вставляете флешку, Ubuntu монтирует её, например, в каталог /media/ubuntu/FLASH. Файлы флешки появляются в этом каталоге, и с ними можно работать обычными командами. После безопасного извлечения флешка отключается, и каталог исчезает.

Сведения о подключённых файловых системах выводит команда findmnt. Столбец TARGET — точка монтирования, SOURCE — источник (раздел диска, память, ядро), FSTYPE — тип файловой системы. С ключом -T команда показывает, какая файловая система содержит указанный путь. Список дисков и разделов выводит lsblk.

В терминалеПодключённые файловые системы
  1. findmnt -o TARGET,SOURCE,FSTYPE | head -10# первые строки списка
    что делает

    Что делает команда. Показывает первые строки списка всех подключённых файловых систем.

    По частям:

    findmnt
    показать подключённые файловые системы
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
    |
    передать вывод левой команды на вход следующей
    head
    оставить только первые строки
    -10
    сколько первых строк оставить: 10
  2. findmnt / -o TARGET,SOURCE,FSTYPE | cat# корневая файловая система
    что делает

    Что делает команда. Показывает, какая файловая система подключена к корню.

    По частям:

    findmnt
    показать подключённые файловые системы
    /
    для какого пути (корневой каталог)
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
    |
    передать вывод левой команды на вход следующей
    cat
    вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
  3. findmnt -T "$HOME" -o TARGET,SOURCE,FSTYPE | cat# файловая система домашнего каталога
    что делает

    Что делает команда. Показывает, на какой файловой системе находится домашний каталог.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T "$HOME"
    найти файловую систему, в которой лежит путь "$HOME"
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
    |
    передать вывод левой команды на вход следующей
    cat
    вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
  4. lsblk -e 7 -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS# диски и разделы
    что делает

    Что делает команда. Показывает диски и разделы с типом файловой системы и точкой монтирования, скрывая loop-устройства.

    По частям:

    lsblk
    показать диски и разделы
    -e 7
    не показывать loop-устройства (тип 7), чтобы остались только диски
    -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
    вывести только столбцы NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
Результат

для домашнего каталога TARGET равен /: отдельно /home не подключён.

Снимок 7.1Ubuntu 24.04
  1. 1точка монтирования домашнего каталога — корень
  2. 2источник /cow — память Live-сессии
  3. 3overlay — тип файловой системы Live-сессии
  4. 4раздел sda2 с ext4: точки монтирования нет, в Live-сессии он не подключён
  5. 5установочный образ Ubuntu подключён к /cdrom
Домашний каталог находится на корневой файловой системе.Весь снимок ↗

Домашний каталог находится на корневой файловой системе.

Что показывает снимок. Домашний каталог находится на корневой файловой системе; диск sda с разделом ext4 в Live-сессии не подключён.

Где это пригодится. findmnt и lsblk используют, чтобы узнать, на каком диске лежат данные, и перед подключением нового диска.

7.2 Занятое и свободное место

Для измерения места используют три команды, и каждая отвечает на свой вопрос. ls -lh показывает размер содержимого отдельного файла. du -sh подсчитывает, сколько места на диске занимают файлы в каталоге. df -h показывает общий объём и свободное место на файловой системе. Команда df -i выводит число занятых и свободных inode: если они закончатся, новые файлы создать не получится даже при наличии свободного места.

Пример. Если диск заполнен, df -h покажет, что свободного места почти не осталось, а du -sh ~/Downloads поможет выяснить, сколько занимает каталог загрузок. Команда ls -lh здесь не поможет: для каталога она показывает размер самой записи каталога, а не его содержимого.

В терминалеРазмер файла, каталога и файловой системы
  1. cd ~/linux-fhs-lab
    что делает

    Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.

    По частям:

    cd
    сменить текущий каталог
    ~/linux-fhs-lab
    куда перейти (путь от домашнего каталога)
  2. ls -lh data/info.txt# размер файла
    что делает

    Что делает команда. Показывает размер содержимого файла info.txt.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -h
    размеры в понятном виде: K, M, G
    data/info.txt
    что показать (путь относительно текущего каталога)
  3. du -sh data# место, занятое каталогом
    что делает

    Что делает команда. Подсчитывает, сколько места на диске занимает каталог data целиком.

    По частям:

    du
    подсчитать, сколько места занимают файлы
    -s
    вывести только итог по каталогу
    -h
    размер в понятном виде: K, M, G
    data
    какой каталог измерить
  4. df -h .# место на файловой системе
    что делает

    Что делает команда. Показывает общий объём, занятое и свободное место файловой системы текущего каталога.

    По частям:

    df
    показать объём и свободное место файловой системы
    -h
    размеры в понятном виде: K, M, G
    .
    для какого каталога (текущий каталог)
  5. df -i .# использование inode
    что делает

    Что делает команда. Показывает, сколько inode занято и свободно на файловой системе текущего каталога.

    По частям:

    df
    показать объём и свободное место файловой системы
    -i
    показать не место, а количество inode
    .
    для какого каталога (текущий каталог)
Результат

размер файла 17 байт, du показывает 4.0K — минимальный блок на диске.

Снимок 7.2Ubuntu 24.04
  1. 1размер содержимого — 17 байт
  2. 2занято на диске — 4 КБ
  3. 3свободное место
  4. 4занято inode
Размер файла, занятое каталогом место и свободное место файловой системы.Весь снимок ↗

Размер файла, занятое каталогом место и свободное место файловой системы.

Что показывает снимок. Файл содержит 17 байт, но на диске под него выделен блок 4 КБ; свободное место и занятые inode считаются для всей файловой системы.

Где это пригодится. При нехватке места df показывает, какая файловая система заполнена, а du — какой каталог занимает больше всего.

7.3 Подключение файловой системы к каталогу

Подключим к каталогу mount-demo файловую систему tmpfs размером 16 МБ. До подключения в каталоге создадим файл before.txt. После монтирования в каталоге будет видно содержимое tmpfs, а before.txt станет недоступен, хотя и не будет удалён. Монтирование требует прав администратора, поэтому команда выполняется через sudo.

То, что произойдёт с before.txt, похоже на лист бумаги, положенный поверх другого листа. Нижний лист никуда не делся, но, пока сверху лежит новый, его не видно. Когда верхний лист убирают командой umount, нижний снова виден.

Команда подключения состоит из нескольких частей:

Часть командыЗначение
sudoвыполнить команду с правами администратора
mountподключить файловую систему
-t tmpfsтип файловой системы
-o size=16Mпараметры: ограничить размер 16 МБ
tmpfsисточник; при подключении диска здесь указывают раздел, например /dev/sdb1
"$HOME/linux-fhs-lab/mount-demo"точка монтирования: каталог, к которому подключаем
Схема · монтирование
~/linux-fhs-lab/mount-demo/
файлы на дискеbefore.txt
tmpfs · оперативная памятьinside.txt
ls mount-demo
before.txt
findmnt
/ /cow overlay

В терминалеМонтирование tmpfs
  1. cd ~/linux-fhs-lab
    что делает

    Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.

    По частям:

    cd
    сменить текущий каталог
    ~/linux-fhs-lab
    куда перейти (путь от домашнего каталога)
  2. mkdir -p mount-demo
    что делает

    Что делает команда. Создаёт каталог mount-demo для опыта с монтированием.

    По частям:

    mkdir
    создать каталог
    -p
    создать и все промежуточные каталоги; не выдавать ошибку, если каталог уже есть
    mount-demo
    какой каталог создать
  3. printf "on original filesystem\n" > mount-demo/before.txt
    что делает

    Что делает команда. Создаёт в mount-demo файл before.txt на обычной файловой системе.

    По частям:

    printf
    вывести текст по шаблону
    "on original filesystem\n"
    шаблон текста (\n — перевод строки)
    >
    записать вывод в файл; если файл есть, он будет перезаписан
    mount-demo/before.txt
    файл, в который записывается вывод
  4. ls mount-demo# содержимое до подключения
    что делает

    Что делает команда. Показывает, какие файлы сейчас видны в каталоге mount-demo.

    По частям:

    ls
    вывести содержимое каталога
    mount-demo
    что показать
  5. sudo mount -t tmpfs -o size=16M tmpfs "$HOME/linux-fhs-lab/mount-demo"# подключить tmpfs
    что делает

    Что делает команда. Подключает к каталогу mount-demo файловую систему tmpfs размером 16 МБ в оперативной памяти.

    По частям:

    sudo
    выполнить следующую команду с правами администратора
    mount
    подключить файловую систему к каталогу
    -t tmpfs
    тип файловой системы: tmpfs
    -o size=16M
    параметр: ограничить размер 16 МБ
    tmpfs
    источник tmpfs: у файловой системы в памяти нет раздела диска
    "$HOME/linux-fhs-lab/mount-demo"
    точка монтирования — каталог, к которому подключить (путь от домашнего каталога: $HOME заменяется на /home/ubuntu)
  6. findmnt -T "$HOME/linux-fhs-lab/mount-demo" -o TARGET,SOURCE,FSTYPE
    что делает

    Что делает команда. Показывает, какая файловая система сейчас отвечает за каталог mount-demo.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T "$HOME/linux-fhs-lab/mount-demo"
    найти файловую систему, в которой лежит путь "$HOME/linux-fhs-lab/mount-demo"
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
  7. ls -la mount-demo# содержимое после подключения
    что делает

    Что делает команда. Показывает полное содержимое mount-demo, включая скрытые элементы.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -a
    показать и скрытые файлы, имена которых начинаются с точки
    mount-demo
    что показать
Результат

после монтирования каталог пуст, findmnt показывает tmpfs.

Снимок 7.3Ubuntu 24.04
  1. 1файл до подключения
  2. 2подключена tmpfs
  3. 3каталог пуст
До монтирования в каталоге был before.txt, после — пустая tmpfs.Весь снимок ↗

До монтирования в каталоге был before.txt, после — пустая tmpfs.

Что показывает снимок. После mount каталог стал точкой монтирования tmpfs и выглядит пустым.

Где это пригодится. Так подключают флешки, дополнительные диски и сетевые хранилища. Файлы, которые лежали в каталоге до монтирования, становятся недоступны, пока файловая система подключена.

Запишем в tmpfs файл inside.txt и отключим её командой umount. После отключения в каталоге снова виден before.txt, а inside.txt исчезает вместе с tmpfs. Для записи используется sudo tee, так как у обычного пользователя нет прав на запись в подключённую tmpfs.

В терминалеОтключение tmpfs
  1. cd ~/linux-fhs-lab
    что делает

    Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.

    По частям:

    cd
    сменить текущий каталог
    ~/linux-fhs-lab
    куда перейти (путь от домашнего каталога)
  2. printf "inside tmpfs\n" | sudo tee mount-demo/inside.txt# записать файл в tmpfs
    что делает

    Что делает команда. Записывает файл inside.txt внутрь подключённой tmpfs с правами администратора.

    По частям:

    printf
    вывести текст по шаблону
    "inside tmpfs\n"
    шаблон текста (\n — перевод строки)
    |
    передать вывод левой команды на вход следующей
    sudo
    выполнить следующую команду с правами администратора
    tee
    записать полученный текст в файл и вывести на экран
    mount-demo/inside.txt
    в какой файл записать (путь относительно текущего каталога)
  3. ls mount-demo
    что делает

    Что делает команда. Показывает, какие файлы сейчас видны в каталоге mount-demo.

    По частям:

    ls
    вывести содержимое каталога
    mount-demo
    что показать
  4. sudo umount "$HOME/linux-fhs-lab/mount-demo"# отключить tmpfs
    что делает

    Что делает команда. Отключает tmpfs от каталога mount-demo; её содержимое пропадает.

    По частям:

    sudo
    выполнить следующую команду с правами администратора
    umount
    отключить файловую систему
    "$HOME/linux-fhs-lab/mount-demo"
    какой каталог отключить (путь от домашнего каталога: $HOME заменяется на /home/ubuntu)
  5. cat mount-demo/before.txt
    что делает

    Что делает команда. Выводит исходный файл before.txt, который снова стал виден после отключения.

    По частям:

    cat
    вывести содержимое файла на экран
    mount-demo/before.txt
    какой файл вывести (путь относительно текущего каталога)
  6. findmnt -T "$HOME/linux-fhs-lab/mount-demo" -o TARGET,SOURCE,FSTYPE
    что делает

    Что делает команда. Показывает, какая файловая система сейчас отвечает за каталог mount-demo.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T "$HOME/linux-fhs-lab/mount-demo"
    найти файловую систему, в которой лежит путь "$HOME/linux-fhs-lab/mount-demo"
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
Результат

before.txt снова доступен, каталог принадлежит корневой файловой системе.

Снимок 7.4Ubuntu 24.04
  1. 1файл в tmpfs
  2. 2исходный файл
  3. 3каталог снова на корневой файловой системе
После отключения tmpfs исходный файл снова виден.Весь снимок ↗

После отключения tmpfs исходный файл снова виден.

Что показывает снимок. После umount снова виден исходный файл, а файл, записанный в tmpfs, исчез.

Где это пригодится. Перед извлечением флешки её отключают, чтобы все данные успели записаться. Данные в tmpfs после отключения не сохраняются.

Итоги части 7

  • Файловая система определяет способ хранения файлов; основные типы — ext4, tmpfs, proc, sysfs.
  • Монтирование подключает файловую систему к каталогу — точке монтирования.
  • findmnt показывает подключённые файловые системы, lsblk — диски и разделы.
  • ls -lh — размер файла, du -sh — место каталога, df -h — место файловой системы.

В отчётСнимок findmnt для корня и два снимка опыта с tmpfs.

Открыть в отдельной вкладке ↗