Лекция №15 - монтирование файловых систем. Команда mount.

На предыдущих лекциях уже несколько раз затрагивалась тема монтирования файловых систем. Сегодня (и на следующей лекции) мы более подробно остановимся на этом вопросе. В современных дистрибутивах монтирование файловых систем в большинстве случаев происходит автоматически. Когда вы вставляете флешку в USB-разъем компьютера, у вас в каталоге /media появляется каталог с именем флешки и вы можете сразу работать с устройством (читать записывать файлы). Раньше (до появления подсистемы udev), прежде чем работать с флешкой (и любым другим блочным устройством) нужно было выполнить операцию монтирования. Когда подключается флешка (будем использовать флешку в качестве примера подразумеваю любое блочное устройство) в системе появляется физическое устройство (в каталоге /dev) с которым можно работать как с блочным устройством. Например, считать информацию с помощью команды dd. Но нам необходимо получить доступ к файловой системе этого устройства, а не к самому устройству и поэтому необходимо выполнить операцию монтирования.

В монтировании присутствуют два основных компонента: физическое устройство или раздел физического устройства с определенной файловой системой (то ЧТО монтируем) и точка монтирования (то КУДА монтируем). Точка монтирования - это обычный каталог в любом месте системы, который будет родительским для файловой системы монтируемого устройства. Каталог может быть как пустым (как правило), так и с информацией. Если монтировать в каталог с информацией, то предыдущее содержимое каталога будет заменено содержимым файловой системы монтируемого устройства, но только на время монтирования. Это очень важно понять и запомнить. Как только вы размонтируете каталог, информация, которая была в нем до монтирования снова станет доступна. Но это частный случай. Все таки в большинстве случаев монтируют в пустые каталоги.

Для монтирования используется команда mount. Наиболее часто эта команда используется в виде mount -t type device dir, где после ключа -t указывается тип монтируемой файловой системы, затем указывается монтируемое устройство (device) и после этого директория (точка монтирования - dir). Например, есть флешка - устройство /dev/sdc, на нем есть раздел /dev/sdc1. Монтировать нужно именно раздел - /dev/sdc1 - отформатированную область, а не физическое устройство /dev/sdc. Команда mount для этого случая будет выглядеть так: mount -t vfat /dev/sdc1 /media/fleshka. Каталог fleshka (точка монтирования) должен существовать и если его нет, то необходимо его создать командой mkdir или выбрать другой - существующий каталог. Так как флешка была отформатирована в FAT32, то использовался тип файловой системы vfat. Если бы монтировали ntfs-разделы Windows, то следовало указать файловую систему ntfs. Все типы поддерживаемых файловых систем можно посмотреть в man mount.

Размонтирование файловой системы системы выполняется при помощи команды umount точка монтирования | устройство. Из нашего примера с флешкой umount /media/fleshka или umount /dev/sdc1. Команда umount не сможет размонтировать устройство если оно занято какой либо программой. Например, если зайти в одной консоли в каталог на смонтированном CD-ROM-диске, а затем в другой консоли попытаться выполнить команду umount, то получим ошибку:

igor@adm-ubuntu:~/linux$ umount /media/cdrom0
umount: /media/cdrom0: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

Команда lsof /media/cdrom0 покажет какие файлы открыты из каталога /media/cdrom0 и кем:

igor@adm-ubuntu:~/linux$ lsof /media/cdrom0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 4908 igor cwd DIR 11,0 2048 1664 /media/cdrom0
less 19323 igor cwd DIR 11,0 2048 1664 /media/cdrom0
less 19323 igor 4r REG 11,0 32 1669 /media/cdrom0/config.txt

Как видите действительно есть открытые файлы и каталоги. Чтобы корректно отмонтировать файловую систему, необходимо закрыть все открытые файлы и выйти из всех каталогов или выполнить команду umount с ключем -f - umount -f /media/cdrom0.

В связи с этим часто встречается следующая ситуация у начинающих linux-пользователей. Вставляется CD-диск в CD-привод и идет работа с файлами диска. Затем пользователь нажимает на кнопку привода, чтобы извлечь диск и ничего не происходит. Некоторое даже перегружают компьютер так как не понимают в чем дело. А дело все в том, что диск не может быть извлечен пока не будет размонтирован, а размонтирован он не может быть потому, что с него открыты файлы (он используется). Стоит только закрыть все файлы выйти из всех каталогов и привод “отдаст” диск при нажатии на кнопку извлечения. Если диск не извлекается, значит нужно выполнить команду umount для диска и после этого нажать на кнопку извлечения.

Чтобы посмотреть какие файловые системы уже смонтированы в системе можно выполнить команду mount без параметров или выполнить команду df -a. Также можно посмотреть содержимое файла /etc/mtab. Команда mount при монтировании новой файловой системы добавляет в этот файл строку с информацией о добавляемой системе. А команда umount соответственно удаляет строку касающуюся отмонтированного раздела.

Хочу отметить, что команды mount/umount не производят никаких изменений в процессе своей работы с файловыми системами устройств и не могут их повредить. Сбои чаще всего бывают в результате нештатных попыток размонтирования файловой системы, например нажатие на кнопку reset системного блока. Старайтесь избегать этого действия и применять его только в самых крайних случаях. Если доступна командная строка, то перед тем как перегрузить компьютер с помощью кнопки reset, выполните команду sync. Данная команда говорит ядру, что необходимо немедленно записать всю информацию находящуюся в буферной памяти на соответствующие физические устройства. Это позволит уменьшить риск потерять информацию.

Команда mount умеет монтировать не только устройства, но и файлы. Для этого используется такое устройство как /dev/loop. Как правило в системе есть несколько подобных блочных псевдоустройств:

igor@adm-ubuntu:~/linux$ ls -l /dev/loop*
brw-rw—- 1 root disk 7, 0 2009-11-16 11:05 /dev/loop0
brw-rw—- 1 root disk 7, 1 2009-11-16 11:05 /dev/loop1
brw-rw—- 1 root disk 7, 2 2009-11-16 11:05 /dev/loop2
brw-rw—- 1 root disk 7, 3 2009-11-16 11:05 /dev/loop3
brw-rw—- 1 root disk 7, 4 2009-11-16 11:05 /dev/loop4
brw-rw—- 1 root disk 7, 5 2009-11-16 11:05 /dev/loop5
brw-rw—- 1 root disk 7, 6 2009-11-16 11:05 /dev/loop6
brw-rw—- 1 root disk 7, 7 2009-11-16 11:05 /dev/loop7

Для чего нам может понадобится монтировать файлы? Самый наглядный пример это, когда у нас есть образ диска в формате iso. Так как напрямую примонтировать файл к директории нельзя, то поступают следующим образом: монтируют файл к блочному устройству /dev/loop, а затем уже блочное устройство /dev/loop монтируется к точке монтирования. Для этого команду mount необходимо выполнить с ключом -o через который передать параметр loop:

igor@adm-ubuntu:~/linux$ sudo mount -o loop /home/igor/downloads/Ubuntu_DocsPack_9.04.2.iso /home/igor/linux/docpack/
igor@adm-ubuntu:~/linux$ ls ./docpack/
Document html Jurnal_FullCircle.tar.gz Jurnal_OpenSource.tar.gz Ubuntu_Docs.tar.gz
Jurnal_BlenderEmpire.tar.gz Jurnal_LGT.tar.gz readme.txt Video_Lesson.tar.gz

Таким образом мы примонтировали файл Ubuntu_DocsPack_9.04.2.iso и можем теперь обращаться к нему как к диску.

В заключении этой лекции хочу показать команду которая покажет нам все разделы всех блочных устройств системы. Мы будем подробнее рассматривать эту команду позже. Чтобы посмотреть на все разделы которые есть в системе наберите от имени суперпользователя команду fdisk -l:

igor@ubuntu:~$ sudo fdisk -l

Диск /dev/sda: 250.1 ГБ, 250059350016 байт
255 heads, 63 sectors/track, 30401 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0xd4b146b8

Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 2304 18506848+ 7 HPFS/NTFS
/dev/sda2 2305 2472 1349460 e W95 FAT16 (LBA)
/dev/sda3 2473 10263 62581207+ 7 HPFS/NTFS
/dev/sda4 10264 30401 161758485 f W95 расшир. (LBA)
/dev/sda5 10264 12826 20587266 83 Linux
/dev/sda6 12827 12947 971901 82 Linux своп / Solaris
/dev/sda7 12948 18184 42066171 7 HPFS/NTFS
/dev/sda8 18185 27967 78581916 7 HPFS/NTFS
/dev/sda9 27968 30401 19551073+ 7 HPFS/NTFS

Диск /dev/sdb: 40.0 ГБ, 40020664320 байт
255 heads, 63 sectors/track, 4865 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0xb292b292

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 1 4660 37431418+ 83 Linux
/dev/sdb2 4661 4865 1646662+ 5 Расширенный
/dev/sdb5 4661 4850 1526143+ 82 Linux своп / Solaris
/dev/sdb6 4851 4865 120456 83 Linux

Диск /dev/sdc: 4016 МБ, 4016046080 байт
90 heads, 25 sectors/track, 3486 cylinders
Units = цилиндры of 2250 * 512 = 1152000 bytes
Disk identifier: 0×00000000

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdc1 4 3487 3917824 b W95 FAT32

Эта команда хороша тем, что показывает не только имя раздела, но и файловую систему раздела. Например, файловая система раздела /dev/sdc1 - FAT32.

Читать другие лекции по курсу Администратор ПК с Linux

Статьи и новости схожей тематики:

Комментариев: 4

  1. IgorKa - Информационный ресурс » Архив сайта » Лекция №16 - Файл /etc/fstab:

    [...] лекция была посвящена монтированию файловых систем и [...]

  2. Roman:

    Можно вопрос? Я примонтировал исошник к директории, а как размонтировать-то?

    Ответить

    Igorka Reply:

    Командой umount с указанием в качестве параметра путь к директории (точке монтирования).

    Ответить

  3. Алексей:

    Игорь, спасибо большое за этот курс. Нахожу очень полезным. Вопрос:
    Выполнил команду и получил распечатку:
    например, fdisk -l как разобраться с распечаткой. Можно ли где-то это вычитать какой параметр за что отвечает чтобы понять физический смысл, который за ним скрывается?
    Или надо взять этот параметр и искать объяснение в интернете. Думаю вопрос понятен.
    Заранее спасибо за прояснение.
    С уважением Алексей.

    Ответить

Оставьте свой отзыв