Linux run command on mount

Монтирование диска в Linux

Разделы дисков в Linux подключаются к системе совсем не так, как в Windows. Здесь есть корневая файловая система, куда подключаются все другие разделы и устройства, которые вы будете использовать. Системные разделы монтируются автоматически при старте системы. Но если вам нужно подключить дополнительные разделы, в некоторых случаях, может понадобиться это делать вручную.

В этой статье мы рассмотрим как выполняется монтирование диска в Linux, поговорим о том, как правильно использовать утилиту mount, umount и посмотреть какие разделы куда примонтированы.

Что такое монтирование?

Как я уже сказал Linux имеет единую корневую файловую систему, куда подключаются все запоминающие устройства и другие ресурсы. На самом деле, в Windows происходит что-то подобное, только все это скрыто от пользователя.

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

Например, вы хотите примонтировать флешку. Вы даете системе команду подключить ее в папку /run/media/имя_пользователя/UUID_флешки/. Система определяет файловую систему устройства, а затем, используя драйвера ядра подключает ее к указанной папке. Дальше вам остается работать с той папкой, как с любой другой. Больше ни о чем думать не нужно. Когда надумаете извлечь флешку, ее нужно отмонтировать.

Монтирование дисков в Linux

Обычно, монтированием занимаются специальные сервисы оболочки, но не всегда они доступны. А иногда нужно сделать все вручную, чтобы задать дополнительные опции монтирования или другие параметры. Для монтирования в Linux используется команда mount. Рассмотрим ее параметры:

$ mount файл_устройства папка_назначения

$ mount опции -t файловая_система -o опции_монтирования файл_устройства папка_назначения

Опции задают различные дополнительные особенности работы утилиты. Опция -t необязательна, но она позволяет задать файловую систему, которая будет использована и иногда это очень полезно. С помощью опции -o вы можете задать различные параметры монтирования, например, монтировать только для чтения и т д. Последних два параметра — это файл устройства, например, /dev/sda1 и папка назначения, например, /mnt.

Перед тем как перейти к рассмотрению примеров работы утилитой, давайте рассмотрим ее основные опции:

  • -V — вывести версию утилиты;
  • -h — вывести справку;
  • -v — подробный режим;
  • -a, —all — примонтировать все устройства, описанные в fstab;
  • -F, —fork — создавать отдельный экземпляр mount для каждого отдельного раздела;
  • -f, —fake — не выполнять никаких действий, а только посмотреть что собирается делать утилита;
  • -n, —no-mtab — не записывать данные о монтировании в /etc/mtab;
  • -l, —show-labels — добавить метку диска к точке монтирования;
  • -c — использовать только абсолютные пути;
  • -r, —read-only — монтировать раздел только для чтения;
  • -w, —rw — монтировать для чтения и записи;
  • -L, —label — монтировать раздел по метке;
  • -U, —uuid — монтировать раздел по UUID;
  • -T, —fstab — использовать альтернативный fstab;
  • -B, —bind — монтировать локальную папку;
  • -R, —rbind — перемонтировать локальную папку.
Читайте также:  Linux get open port

Это не все, но основные опции, которые вам понадобятся во время работы с утилитой. Также, возможно, вы захотите знать список опций монтирования, которые могут быть полезными. Они все перечислены в статье автоматическое монтирование в fstab и писать их еще и здесь нет смысла. А теперь перейдем к примерам и рассмотрим как монтировать диск в linux.

Монтирование разделов с помощью mount

Монтирование разделов с помощью mount выполняется очень просто. Фактически в большинстве случаев будет достаточно упрощенной версии команды. Например, смонтируем раздел /dev/sdb6 в папку /mnt:

В большинстве случаев вы будете вынуждены выполнять команду mount с правами суперпользователя, если обратное не указано в fstab (опция монтирования users). Вы можете посмотреть информацию о процессе монтирования добавив опцию -v:

Если нужно, вы можете указать файловую систему с помощью опции -t:

sudo mount -v -t ext4 /dev/sdb6 /mnt

Если необходимо примонтировать файловую систему только для чтения, то вы можете использовать опцию -r или опцию монтирования -o ro, результат будет одинаковым:

sudo mount -t ext4 -r /dev/sdb6 /mnt
$ sudo mount -t ext4 -o ro /dev/sdb6 /mnt

Вы можете использовать и другие опции чтобы выполнить монтирование разделов linux, например, указать, что на этом разделе нельзя выполнять программы:

sudo mount -t ext4 -o noexec /dev/sdb6 /mnt

Обратите внимание, что вы не можете использовать опции uid, gid, fmask для файловых систем ext. Они поддерживаются только в FAT, vFAT, exFAT.

Вы можете использовать не только имена устройств чтобы выполнить монтирование диска в linux. Для этого можно применять UUID или метки, например, монтирование с помощью UUID:

sudo mount —uuid=»b386d309-05c1-42c8-8364-8d37270b69e0″ /mnt

Посмотреть uuid для ваших разделов можно с помощью команды:

Точно так же вы можете использовать метки. Команда монтирования диска linux будет выглядеть так:

Вы можете примонтировать одну папку в другую, для этого используйте опцию —bind

sudo mount —bind /mnt/ /media/

Возможно, не только монтирование разделов linux, но и монтирование файлов, если они содержат файловую систему, например, образов дисков. Монтирование образа диска linux работает точно так же:

Посмотреть список всех примонтированных устройств можно просто выполнив mount без параметров:

Размонтирование устройств в Linux

Когда вы хотите завершить работу с устройством, особенно с флешкой, его нужно размонтировать. Для этого существует утилита umount. В качестве параметров она принимает точку монтирования или устройство. Например:

Теперь ваше устройство не смонтировано. Но иногда может возникнуть ошибка размонтирования. Система сообщит, что устройство занято: umount: /mnt: target is busy.

Проблему можно решить закрыв все программы, которые могут использовать любой файл в этой папке. Какие именно это программы вы можете узнать с помощью команды lsof:

lsof -w /mnt
$ lsof -w /dev/sdb6

Здесь вы видите всю необходимую информацию, чтобы понять что происходит и что с этим делать. Утилита вывела название программы, ее PID, и даже файл, с которым она работает. Вы можете завершить все программы, а потом снова повторить попытку или используйте опцию -l, файловая система будет отключена немедленно, несмотря на то, что она занята:

Читайте также:  Linux mint mate апплеты

Выводы

В этой статье мы рассмотрели как выполняется монтирование жестких дисков linux, а также разделов и даже образов. Вы знаете как правильно использовать опции mount и umount. Если у вас остались вопросы, спрашивайте в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Thread: run command on mount/umount without interfering with automount

SqRt7744 is offlineGee! These Aren’t Roasted!

run command on mount/umount without interfering with automount

Hi I have a Western Digital Passport 250 GB USB drive (1058:0702 Western Digital Technologies, Inc. Passport External HDD). I haven’t been able to use it reliably since I originally purchased it a year ago (loss of data, slow transfers, etc)

I have finally traced down the problem and can now use the drive. After connecting it I have to run (as root, and assuming it has been assigned to sdb)
echo 64 >/sys/block/sdb/device/max_sectors

and finally after unmounting the drive, I have to run
sdparm —command=stop /dev/sdb.
before disconnecting it.

Now I am trying to figure out how to have this happen automatically when I mount/unmout the drive, and preferrably be integrated with gnome’s (nautilus) eject system so that my girlfriend doesn’t have to resort to the command line.

I’ve been trying various things with udev and hal but can’t really figure it out — at least not without nautilus complaining that it can’t eject the volume when I try.

Does anyone have an idea how to get this to work?

Elfantin is offlineFirst Cup of Ubuntu

Re: run command on mount/umount without interfering with automount

Hi, you say you’ve tried udev. I wonder if you’ve tried this?

When I plug in or remove the flash drive, the named script gets executed. This actually targets a precise partition on the disk, as that is my goal. I believe you can equally well target the whole disk using ID_SERIAL, rather than the ID of the fs. One thing is that you need to be careful as to how you number your script (I started putting it as 50-.rules but it didn’t work as, I guess, the ENV is set by another rule).
Also, you can get info about your device by running:
sudo udevadm monitor —environment
before inserting/removing it.

I can’t really say if it complains when un-mount, as mine has been doing the complaint business for some time, BEFORE I touched anything in udev

PS. Forgot to say that the environment is available to the program, so for example my test script is like this:

#!/bin/bash
echo The device: >> /home/mik/temp/usbdevtest
echo ID_VENDOR=$ID_VENDOR >> /home/mik/temp/usbdevtest
echo has been $ACTION(e)d on >> /home/mik/temp/usbdevtest
date >>/home/mik/temp/usbdevtest

with a simple case structure you can perform different actions on add/remove.

Last edited by Elfantin; January 12th, 2009 at 03:42 PM . Reason: Added a PS on environment available

Источник

How to run a script when a specific flash-drive is mounted?

Is there a way to run a script when a particular USB device is mounted? I keep my videos on a separate USB and would like to run a script that would mount the video folder on the USB device to the one in the home folder.

Читайте также:  Linux symbol link file

6 Answers 6

There’s much nicer solution with systemd now. You create a service which depends and is wanted by you media e.g.: /etc/systemd/system/your.service

[Unit] Description=My flashdrive script trigger Requires=media-YourMediaLabel.mount After=media-YourMediaLabel.mount [Service] ExecStart=/home/you/bin/triggerScript.sh [Install] WantedBy=media-YourMediaLabel.mount 

Then you have to start/enable the service:

sudo systemctl start your.service sudo systemctl enable your.service 

After mount, systemd fires your trigger script. The advantage over udev rule is that the script really fires after mount, not after adding system device.

Use case: I have an encrypted partition which I want to backup automatically. After adding the device I have to type in the password. If I hooked the backup script to udev, the script attempts to run at the time when I’m typing password, which will fail.

Note: You can find your device unit with:

systemctl list-units -t mount 

I hope april 2016 is coming soon. The next Ubuntu LTS will have systemd enabled. AFAIK the nice solution from above needs Ubuntu 15.04 or newer.

Great! Tested in Debian Jessie. Don’t forget to enable your service systemctl enable your.service . The script file must be executable.

For me, this fails. When I try to start the service, it complains with «Unit media-bb.mount not found.». I called my thumb drive’s (FAT32) FS «bb» to make sure there are no weird characters in it and it’s not too long or anything like this. I tried the Requires= , After= , and WantedBy= lines both with media-bb.mount and media-BB.mount because Nautilus shows me the volume as «BB», not «bb». Same error message, except for capitalization. What’s wrong? Do I somehow have to create that media-.mount service?

@StevenJeffries systemctl list-units -t mount gives you that label. Systemd automatically creates .mount units and as far as I can tell, it’s a mount path, but with slashes ( / ) replaced by dashes ( — ). And one note: this unit also works as a user unit ( systemctl —user ).

Start by finding your device in lsusb . Note the ID (eg 0a81:0101 )

Create a new udev rules file in /etc/udev/rules.d/ via sudoedit /etc/udev/rules.d/100-mount-videos.rules and plonk a new rule in there like this:

ACTION=="add", ATTRS=="0a81", ATTRS=="0101", RUN+="/home/your_username/bin/mount_videos.sh" 

Note how I used the ID from lsusb .

Then you just need to write the script to do the work. A simple mount command should work. You might need a sleep 5 command in there to wait for the filesystem to initialize (if you leave gnome to do the main mounting — but you’re free to mount it first and then you might not need the sleep).

Addition from Allan: Long running scripts might block «all further events for this or a dependent device». My Mint man page further states «Long running tasks need to be immediately detached from the event process itself.» No tip is given on where to gain the skill to do this.

Источник

Оцените статью
Adblock
detector