☰ Оглавление

Mount/umount USB-Flash

/etc/fstab

Мне больше нравится, когда каждое устройство монтируется в своё место по UUID. Это позволяет гарантированно избежать конфликтов имён устройств.

Узнать UUID устройства очень просто:

# blkid /dev/sdb1
/dev/sdb1: UUID="7A82-1B89" TYPE="vfat"

Теперь прописываем в /etc/fstab:

UUID=7A82-1B89  /media/n78  vfat  user,noauto,noatime,flush  0  0

Готово. Теперь именно это устройство будет монтироваться именно в это место.

Полезными опциями являются ещё указания кодировок: codepage=866,iocharset=koi8-r.

mount

Просто выполняем команду:

$ mount /media/n78

umount

Размонтирование выполняется командой umount:

$ umount /media/n78

Но тут очень легко нарваться на то, что система занята и не может быть размонтирована:

umount: /media/n78: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

В этом случае следует освободить систему и повторить попытку.

Скрипт для принудительного размонтирования может выглядеть так:

#!/bin/sh
# пытаемся убить все блокирующие процессы вежливо
fuser -k TERM -m /media/n78
sleep 1
# если кто-то уцелел, то пытаемся убить их грубо
fuser -k KILL -m /media/n78
sleep 1
# а вот теперь размонтируем
umount /media/n78

Чуть более развёрнутая версия того же самого без лишних ожиданий может быть такой:

#!/bin/sh

if test "_$#" = '_1'
then
  FS="$1"
else
  echo 'Usage:' $0 '/mount-point'
  exit 1
fi

for sig in TERM KILL
do
  if mountpoint -q "$FS"
  then
    if fuser -m "$FS"
    then
      fuser -k $sig -m "$FS"
      sleep 1
    else
      break
    fi
  else
    echo 'not mounted'
    exit 0
  fi
done

umount "$FS"

Обратите внимание: убивание процессов — довольно чувствительная операция, поэтому надо быть особо осторожным. В частности, если файловая система не смонтирована, то действия будут отнесены к корневой файловой системе и скрипт перебьёт всех, до кого дотянется. Поэтому важно проверять mountpoint.