Монтирование в linux
Общие сведения
Монтировать диск в любой каталог файловой структуры, например монтировать диск в каталог базы данных, файловое хранилище или директорию логов, в случае переустановки системы достаточно будет смонтировать диск обратно
Монтирование позволяет просматривать и редактировать образы дисков с разными файловыми системами
Можно задавать различные параметры монтирования, например только для чтения
Можно монтировать не только сам диск, но и его разделы
Чтобы работать с монтированной файловой системой, необходимо, чтобы linux поддерживал эту файловую систему. Узнать это можно с помощью команды:
cat /proc/filesystems
Или так:
ls -l /lib/modules/$(uname -r)/kernel/fs
Если необходимая файловая система есть в списке, возможно понадобится установка дополнительного ПО для работы с данной файловой системой
Для определения типа файловой системы mount использует библиотеку blkid либо попытается прочитать все перечисленные типы в файле /etc/filesystems, кроме тех которые помечены как nodev
Главный диск смонтирован в корень /, загрузочный диск смонтирован в /boot, дополнительные диски смонтированы в /mnt.
Информация об автоматическом монтировании содержится в файле /etc/fstab
mount
/etc/mtab содержит список смонтированных файловых систем и разделов включая виртуальные, такие как /proc
mount -a -- монтирует все (all) файловые системы и разделы, перечисленные в /etc/fstab, за исключением тех, которые имеют флаг noauto. Эту команду можно
встретить в сценариях начальной загрузки системы из /etc/rc.d
Перед тем как физически вынуть компакт-диск или дискету из устройства, это устройство должно быть отмонтировано командой umount, иначе файловая система может оказаться поврежденной
findmnt
Для просмотра всех устройств и точек их монтирования:
$ findmnt --real
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda7 ext4 rw,relatime,errors=remount-ro
├─/sys/kernel/tracing tracefs tracefs rw,nosuid,nodev,noexec,relatime
├─/boot/efi /dev/sda6 vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
├─/media/t/Зарезервировано системой /dev/sda1 fuseblk ro,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096
├─/home/t/folder /dev/loop0 iso9660 ro,relatime,nojoliet,check=s,map=n,blocksize=2048,iocharset=utf8
└─/media/t/7030E35030E31BBA /dev/sda2 fuseblk ro,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096
Больше данных покажет команда findmnt без параметров, но в выводе будет много ненужной информация, в таком случае можно воспользоваться командой grep
mount | grep '^dev'
Для отслеживания операций монтирования и размонтирования в режиме реального времени используется команда:
findmnt -p
В программе mount есть свои опции, которые указываются после -o
Опция -w указывается для монтирования диска с возможностью чтения и записи
Посмотреть в какое место монтируется флешка usb
#Посмотреть в какое место монтируется флешкарта:
~$ findmnt -p
ACTION TARGET SOURCE FSTYPE OPTIONS
монтировать /media/t/ESD-ISO /dev/sdb1 fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096
Монтирование:
sudo mount /dev/sda /mnt/uploads
Определение прав точки монтирования:
sudo chmod 0777 /mnt/uploads
Чтобы смонтировать диск только с правами чтения используется опции -r, -o ro,noload
Установить только чтение для блочных устройств:
sudo blockdev --setro УСТ-ВО
Или:
sudo hdparm -r1 УСТ-ВО
Чтобы снять ограничение
sudo hdparm -r0 УСТ-во
Проверить текущее состояние флага УСТ-ВА
sudo hdparm -r /dev/sda1
Попытка размонтировать точку монтирования, которая используется программой, вернет ошибку
Чтобы найти какой программой используется точка монтирования, можно использовать команду lsof:
lsof /точка/монтирования
bind
С помощью bind можно перемонтировать точку монтирования в другое место, при этом текущая точка монтирования не размонтируется
sudo mount 10.0.2.117:/home/nfsuser/uploads /mnt/test
sudo mount --bind /mnt/test /home/t/folder
После выполнения команды выше, содержимое удаленного каталога будет доступно в двух независимых друг от друга директориях
С помощью bind можно примонтировать обычный каталог
sudo mount --bind folder /mnt/test
Чтобы включить в точку монтирования не только файлы, но и суб-монтирования, необходимо использовать опцию --rbind :
sudo mount --bind subfolder /mnt/test
sudo mount --rbind /mnt folder/
Опцию bind можно использовать для изменения прав доступа для уже монтированного каталога:
mount --bind -r foldermnt /mnt/test/
mount foldermnt /mnt/test/ -o remount,bind,r
Важно понимать, что в таком случае исходная директория (которая монтируется ) по прежнему будет доступна для записи.
Таким же способом ( remount,bind ) можно изменить флаги записи:
nosuid, nodev, noexec, noatime, nodiratime и relatime
Рекурсивно изменить параметры монтирования для перезаписи прав возможности нет
В файле /etc/fstab параметр привязки remount игнорируется
Перенос точки монтирования
Перенос точки монтирования осуществляется с помощью опции --move
Нельзя таким образом перенести точку монтирования, если данная точка монтирования находится под общим монтированием
t@x:~$ findmnt -o TARGET,PROPAGATION /mnt/test
TARGET PROPAGATION
/mnt/test shared
/mnt/test shared
t@x:~$ sudo mount --move /mnt/test/ folder1
mount: /home/t/folder1: bad option; moving a mount residing under a shared mount is unsupported.
Перемонтирование
В данном случае не создается новая точка монтирования, но меняются опции монтирования. Повторное монтирование соответствует стандартному поведению mount с параметрами из fstab, но для НЕ блочных устройств используется опция --remount
sudo mount -rw -o remount /mnt/test
Параметр all позволяет перемонтировать все точки монтирования файловой системы в соответствии с опцией -o В обоих случаях параметры из fstab объединяются с параметрами из командной строки
Названия устройств
Устройства linux хранятся в /dev/*
Названия дисков обычно начинаются с sd*, если есть разделы на диске то дополнительно указывается номер раздела - /dev/sda1 или /dev/sda2
Для более подробной информации о существующих дисках можно использовать команду smartctl
smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
SCSI (внутренний жёсткий диск)
[SAT], ATA (жёсткий диск, подключённый по USB переходнику к компьютеру)
NVMe (внутренний твердотельный диск).
Второй способ извлечь информацию о дисках и разделах:
sudo fdisk -l
Диск /dev/sda: 238,49 GiB, 256060514304 байт, 500118192 секторов
Disk model: SAMSUNG MZ7LN256
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x2fd1f55a
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 2048 104447 102400 50M 7 HPFS/NTFS/exFAT
/dev/sda2 104448 279027658 278923211 133G 7 HPFS/NTFS/exFAT
/dev/sda3 279027710 499068927 220041218 104,9G 5 Расширенный
/dev/sda4 499068928 500113407 1044480 510M 27 Скрытый NTFS WinRE
/dev/sda5 * 279027712 280078335 1050624 513M ef EFI (FAT-12/16/32)
/dev/sda6 280080384 281128959 1048576 512M b W95 FAT32
/dev/sda7 281131008 499068927 217937920 103,9G 83 Linux
Элементы таблицы разделов упорядочены не так, как на диске.
Третий способ извлечь информацию о дисках и разделах:
~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ntfs Зарезервировано системой 3632E28532E24A07
├─sda2 ntfs 7030E35030E31BBA
├─sda3
├─sda4 ntfs 104CE02B4CE00CF2
├─sda5 vfat 69E5-D5ED
├─sda6 vfat 8C13-EA85 511M 0% /boot/efi
└─sda7 ext4 ddc5b15d-afde-4138-bca0-f3fb3541fba6 59,9G 36% /
Следующая команда покажет доп информацию в LABEL:
~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ntfs Зарезервировано системой 3632E28532E24A07
├─sda2 ntfs 7030E35030E31BBA
├─sda3
├─sda4 ntfs 104CE02B4CE00CF2
├─sda5 vfat 69E5-D5ED
├─sda6 vfat 8C13-EA85 511M 0% /boot/efi
└─sda7 ext4 ddc5b15d-afde-4138-bca0-f3fb3541fba6 59,9G 36% /
Много дополнительной информации о разделе можно увидеть командой file
~$ sudo file -sL /dev/sda7
/dev/sda7: Linux rev 1.0 ext4 filesystem data, UUID=ddc5b15d-afde-4138-bca0-f3fb3541fba6 (needs journal recovery) (extents) (64bit) (large files) (huge files)
Монтирование образов
С помощью команды file можно посмотреть какая файловая система используется
t@x:~$ file VirtualBox\ VMs/Ubuntu/Ubuntu.vdi
VirtualBox VMs/Ubuntu/Ubuntu.vdi: VirtualBox Disk Image, major 1, minor 1 (<<< Oracle VM VirtualBox Disk Image >>>), 16464035840 bytes
t@x:~$ file /dev/sda2
/dev/sda2: block special (8/2)
file --print0 ubuntu-16.04.7-server-amd64.iso
ubuntu-16.04.7-server-amd64.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 427084, 4992 sectors
file --print0 ubuntu-16.04.7-server-amd64.iso
ubuntu-16.04.7-server-amd64.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 427084, 4992 sectors
Создание образов с помощью команды dd
В следующем примере создается образ из устройства /dev/sdb1
t@x:/dev/usb$ sudo dd if=/dev/sdb1 of=/mnt/test/disk.ntfs
[sudo] пароль для t:
15769711+0 записей получено
15769711+0 записей отправлено
8074092032 байт (8,1 GB, 7,5 GiB) скопирован, 262,026 s, 30,8 MB/s
t@x:/dev/usb$ file /mnt/test/disk.ntfs
/mnt/test/disk.ntfs: DOS/MBR boot sector, code offset 0x52+2, OEM-ID "NTFS ", sectors/cluster 8, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 2048, dos < 4.0 BootSector (0x0), FAT (1Y bit by descriptor); NTFS, sectors/track 63, physical drive 0x80, sectors 15769710, $MFT start cluster 786432, $MFTMirror start cluster 2, bytes/RecordSegment 2^(-1*246), clusters/index block 1, serial number 0c4e8a8f2e8a8e440; contains bootstrap BOOTMGR
Далее такой образ можно примонтировать с помощью команды mount в одну из директорий
fstab
Вся файловая система linux собирается в одно целое путем монтирования всех разделов.
Система инициализации собирает разделы в единую файловую систему с помощью данных файла /etc/fstab
Во время инициализации системы подключаются различные разделы с системными файлами и проверяются на ошибки. В новой системе система инициализации монтирует разделы с помощью файлов юнитов и дублирует информацию из этих файлов в файл /etc/fstab
Синтаксис fstab
Строки в fstab должны находиться в правильном порядке, т.к. читаются последовательно
устройство точка-монтирования тип-файл.-сист. опции резерв 0 или 1 проверка{0,1,2}
В файле /etc/fstab первый параметр что монтируется, второй куда монтируется, третий параметр это тип файловой системы, а дальше дополнительные опции.
Первый параметр Первое поле - fs_spec устройство) может быть:
Блочным устройством, например /dev/sda1
Уникальный идентификатор устройства UUID
Label - LABEL=....
Для разделов GPT поддерживаются ARTUUID PARTLABEL
Адрес удаленного каталога, для nfs это host:dir
Файл или раздел подкачки
Для файловой системы может указываться строка из вывода df
Чтобы узнать UID устройства можно использовать одну из следующих команд:
t@x:~$ findmnt --real -o UUID /dev/sda1
UUID
3632E28532E24A07
t@x:~$ blkid /dev/sda1
/dev/sda1: LABEL="M-PM-^WM-PM-0M-QM-^@M-PM-5M-PM-7M-PM-5M-QM-^@M-PM-2M-PM-8M-QM-^@M-PM->M-PM-2M-PM-0M-PM-=M-PM-> M-QM-^AM-PM-8M-QM-^AM-QM-^BM-PM-5M-PM-M-PM-9" UUID="3632E28532E24A07" TYPE="ntfs" PARTUUID="2fd1f55a-01"
t@x:~$ lsblk -o UUID /dev/sda1
UUID
3632E28532E24A07
Второе поле ( fs_file ) точка монтирования
Для раздела подкачки точка монтирования указана как none
Третье поле ( fs_vfstype ) - тип файловой системы
Для swap тип файловой системы swap
Для привязки или перемещений используется тип: none Можно указывать несколько типов файловой системы и подтипы файловой системы
В четвертом поле (fs_mntops) определяются параметры монтирования, список параметров разделенных запятыми
Опция default определяет параметры монтирования по умолчанию:
rw, suid, dev, exec, auto, nouser и async
Опция noauto используется чтобы не монтировать при использовании команды mount -a
Параметр user позволит монтировать указанному пользователю
Параметр owner позволит монтировать указанному владельцу
Параметр nofail не будет сообщать об ошибках устройства, если данного устройства не существует
В пятом поле ( fs_freq ) используется dump чтобы определить какие файловые системы нужно выгрузить, по умолчанию 0 ( не выгружать )
В шестом поле ( fs_passno ) указывается порядок проверки файловой системы для fsck во время загрузки, например для корневой файловой системы указывается 1, для других 2, по умолчанию 0
Проверка указывает в какой очереди обрабатывать ошибки и здесь 0 значит не проверять.
Резерв указывает, нужно ли делать резервную копию раздела
ro - разрешает только чтение для монтируемого раздела или директории
noexec - опция запрещает выполнение файлов в монтируемом разделе, это запрещает выполнение, но не запрещает разместить выполняемый файл в данном разделе и опытному взломщику не составит труда запустить программу из другого раздела, где запуск программ разрешен, например bin, /usr/bin/ , где возможно есть perl, python, php или другие программы, которые дозволенно выполняют код в своем адресном пространстве
nosuid - запрещает использование программ с битами suid sgid, т.е. явно запретить выполнение привилегированных программ
nodev - запрещает использование файлов устройств
nosymfolow - запрещает использование мягких ссылок
Даже если монтирование происходит не во время загрузки, программа mount проверяет файл /etc/fstab
устройство USB по умолчанию монтируется в /run/media/mial/.., название точки монтирования можно изменить вручную или автоматически монтировать в нужную директорию
В моем случае уст-во USB это директория /dev/sdb1
Узнаю UUID диска:
$ lsblk -o UUID /dev/sdb1
UUID
7030E35030E31BBA
При монтировании следует использовать UUID так как имя устройства может измениться
Далее открываю /etc/fstab
UUID=7030E35030E31BBA /mnt/name_disk ntfs nofail,rw,utf8 0 0
В примере выше используется опция nofail это необходимо, так как при перезапуске и отсутствии устройства, компьютер может вовсе не запуститься
Подключение устройства в обозначенную директорию можно проверить с помощью следующей команды:
findmnt --real
Вывод данной команды может отличаться от содержимого файла /etc/fstab, так вместо указанной файловвой системы ntfs может быть указана fuseblk, это говорит о том, что задачу по монтированию выполнила FUSE
Для вывода подробной информации и ошибках в файле findmnt /etc/fstab используется команда
findmnt --verify --verbose
/
[ ] target exists
[ ] FS options: errors=remount-ro
[ ] UUID=ddc5b15d-afde-4138-bca0-f3fb3541fba6 translated to /dev/sda7
[ ] source /dev/sda7 exists
[W] cannot detect on-disk filesystem type
/boot/efi
[ ] target exists
[ ] FS options: umask=0077
[ ] UUID=8C13-EA85 translated to /dev/sda6
[ ] source /dev/sda6 exists
[W] cannot detect on-disk filesystem type
none
[W] non-bind mount source /swapfile is a directory or regular file
[W] cannot detect on-disk filesystem type
0 parse errors, 0 ошибок, 4 предупреждения
[ ] target exists говорит о том что точка монтирования существует
VFS или FS options - выводит опции
FUSE and fuseblk
mknod
Подключение нового диска
форматирование разделов
Команда dd
Продолжение следует...Источники
Связанные темы
Конфигурация vsftpd в ОС Linux Ubuntu
Установка и конфигурация samba в Linux