Монтирование в linux

Монтирование в linux, mount, bind, hdparm, blockdev, findmnt

    Общие сведения

    Монтировать диск в любой каталог файловой структуры, например монтировать диск в каталог базы данных, файловое хранилище или директорию логов, в случае переустановки системы достаточно будет смонтировать диск обратно
    Монтирование позволяет просматривать и редактировать образы дисков с разными файловыми системами
    Можно задавать различные параметры монтирования, например только для чтения
    Можно монтировать не только сам диск, но и его разделы

    Чтобы работать с монтированной файловой системой, необходимо, чтобы 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
    Продолжение следует...
    Источники
    Последнее изменение: 10.10.2024 05:03


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ