Часть 7 из 8
Файловые системы и монтирование
В этой части рассмотрим, как файловые системы разных устройств объединяются в одно дерево каталогов, как определить файловую систему для конкретного пути и как измерить занятое и свободное место.
7.1 Файловая система и монтирование
Файловая система определяет способ хранения файлов: как записываются имена, сведения о файлах и данные. На дисках в Linux обычно используется ext4, в оперативной памяти — tmpfs, а proc и sysfs, как мы видели в части 5, данные вообще не хранят.
Чтобы файловая система стала доступна, её монтируют — подключают к каталогу общего дерева. Такой каталог называется точкой монтирования. Корневая файловая система подключена к /, proc — к /proc, флешка может быть подключена к /media/ubuntu/имя. Для программ путь выглядит одинаково, на каком бы устройстве ни находился файл.
Пример. Когда вы вставляете флешку, Ubuntu монтирует её, например, в каталог /media/ubuntu/FLASH. Файлы флешки появляются в этом каталоге, и с ними можно работать обычными командами. После безопасного извлечения флешка отключается, и каталог исчезает.
Сведения о подключённых файловых системах выводит команда findmnt. Столбец TARGET — точка монтирования, SOURCE — источник (раздел диска, память, ядро), FSTYPE — тип файловой системы. С ключом -T команда показывает, какая файловая система содержит указанный путь. Список дисков и разделов выводит lsblk.
findmnt -o TARGET,SOURCE,FSTYPE | head -10# первые строки спискачто делает
Что делает команда. Показывает первые строки списка всех подключённых файловых систем.
По частям:
findmnt- показать подключённые файловые системы
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
|- передать вывод левой команды на вход следующей
head- оставить только первые строки
-10- сколько первых строк оставить: 10
findmnt / -o TARGET,SOURCE,FSTYPE | cat# корневая файловая системачто делает
Что делает команда. Показывает, какая файловая система подключена к корню.
По частям:
findmnt- показать подключённые файловые системы
/- для какого пути (корневой каталог)
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
|- передать вывод левой команды на вход следующей
cat- вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
findmnt -T "$HOME" -o TARGET,SOURCE,FSTYPE | cat# файловая система домашнего каталогачто делает
Что делает команда. Показывает, на какой файловой системе находится домашний каталог.
По частям:
findmnt- показать подключённые файловые системы
-T "$HOME"- найти файловую систему, в которой лежит путь "$HOME"
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
|- передать вывод левой команды на вход следующей
cat- вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
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
- 1точка монтирования домашнего каталога — корень
- 2источник /cow — память Live-сессии
- 3overlay — тип файловой системы Live-сессии
- 4раздел sda2 с ext4: точки монтирования нет, в Live-сессии он не подключён
- 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 здесь не поможет: для каталога она показывает размер самой записи каталога, а не его содержимого.
cd ~/linux-fhs-labчто делает
Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.
По частям:
cd- сменить текущий каталог
~/linux-fhs-lab- куда перейти (путь от домашнего каталога)
ls -lh data/info.txt# размер файлачто делает
Что делает команда. Показывает размер содержимого файла info.txt.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
-h- размеры в понятном виде: K, M, G
data/info.txt- что показать (путь относительно текущего каталога)
du -sh data# место, занятое каталогомчто делает
Что делает команда. Подсчитывает, сколько места на диске занимает каталог data целиком.
По частям:
du- подсчитать, сколько места занимают файлы
-s- вывести только итог по каталогу
-h- размер в понятном виде: K, M, G
data- какой каталог измерить
df -h .# место на файловой системечто делает
Что делает команда. Показывает общий объём, занятое и свободное место файловой системы текущего каталога.
По частям:
df- показать объём и свободное место файловой системы
-h- размеры в понятном виде: K, M, G
.- для какого каталога (текущий каталог)
df -i .# использование inodeчто делает
Что делает команда. Показывает, сколько inode занято и свободно на файловой системе текущего каталога.
По частям:
df- показать объём и свободное место файловой системы
-i- показать не место, а количество inode
.- для какого каталога (текущий каталог)
- 1размер содержимого — 17 байт
- 2занято на диске — 4 КБ
- 3свободное место
- 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" | точка монтирования: каталог, к которому подключаем |
- ls mount-demo
- before.txt
- findmnt
- / /cow overlay
cd ~/linux-fhs-labчто делает
Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.
По частям:
cd- сменить текущий каталог
~/linux-fhs-lab- куда перейти (путь от домашнего каталога)
mkdir -p mount-demoчто делает
Что делает команда. Создаёт каталог mount-demo для опыта с монтированием.
По частям:
mkdir- создать каталог
-p- создать и все промежуточные каталоги; не выдавать ошибку, если каталог уже есть
mount-demo- какой каталог создать
printf "on original filesystem\n" > mount-demo/before.txtчто делает
Что делает команда. Создаёт в mount-demo файл before.txt на обычной файловой системе.
По частям:
printf- вывести текст по шаблону
"on original filesystem\n"- шаблон текста (\n — перевод строки)
>- записать вывод в файл; если файл есть, он будет перезаписан
mount-demo/before.txt- файл, в который записывается вывод
ls mount-demo# содержимое до подключениячто делает
Что делает команда. Показывает, какие файлы сейчас видны в каталоге mount-demo.
По частям:
ls- вывести содержимое каталога
mount-demo- что показать
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)
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
ls -la mount-demo# содержимое после подключениячто делает
Что делает команда. Показывает полное содержимое mount-demo, включая скрытые элементы.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
-a- показать и скрытые файлы, имена которых начинаются с точки
mount-demo- что показать
- 1файл до подключения
- 2подключена tmpfs
- 3каталог пуст
Весь снимок ↗До монтирования в каталоге был before.txt, после — пустая tmpfs.
Что показывает снимок. После mount каталог стал точкой монтирования tmpfs и выглядит пустым.
Где это пригодится. Так подключают флешки, дополнительные диски и сетевые хранилища. Файлы, которые лежали в каталоге до монтирования, становятся недоступны, пока файловая система подключена.
Запишем в tmpfs файл inside.txt и отключим её командой umount. После отключения в каталоге снова виден before.txt, а inside.txt исчезает вместе с tmpfs. Для записи используется sudo tee, так как у обычного пользователя нет прав на запись в подключённую tmpfs.
cd ~/linux-fhs-labчто делает
Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.
По частям:
cd- сменить текущий каталог
~/linux-fhs-lab- куда перейти (путь от домашнего каталога)
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- в какой файл записать (путь относительно текущего каталога)
ls mount-demoчто делает
Что делает команда. Показывает, какие файлы сейчас видны в каталоге mount-demo.
По частям:
ls- вывести содержимое каталога
mount-demo- что показать
sudo umount "$HOME/linux-fhs-lab/mount-demo"# отключить tmpfsчто делает
Что делает команда. Отключает tmpfs от каталога mount-demo; её содержимое пропадает.
По частям:
sudo- выполнить следующую команду с правами администратора
umount- отключить файловую систему
"$HOME/linux-fhs-lab/mount-demo"- какой каталог отключить (путь от домашнего каталога: $HOME заменяется на /home/ubuntu)
cat mount-demo/before.txtчто делает
Что делает команда. Выводит исходный файл before.txt, который снова стал виден после отключения.
По частям:
cat- вывести содержимое файла на экран
mount-demo/before.txt- какой файл вывести (путь относительно текущего каталога)
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
- 1файл в tmpfs
- 2исходный файл
- 3каталог снова на корневой файловой системе
Весь снимок ↗После отключения tmpfs исходный файл снова виден.
Что показывает снимок. После umount снова виден исходный файл, а файл, записанный в tmpfs, исчез.
Где это пригодится. Перед извлечением флешки её отключают, чтобы все данные успели записаться. Данные в tmpfs после отключения не сохраняются.
Итоги части 7
- Файловая система определяет способ хранения файлов; основные типы — ext4, tmpfs, proc, sysfs.
- Монтирование подключает файловую систему к каталогу — точке монтирования.
findmntпоказывает подключённые файловые системы,lsblk— диски и разделы.ls -lh— размер файла,du -sh— место каталога,df -h— место файловой системы.
В отчётСнимок findmnt для корня и два снимка опыта с tmpfs.