사용자 로그인없이 부팅시 외장 드라이브를 / media / LABEL에 자동으로 마운트 하시겠습니까? 위치에 마운트하고

이 질문 은 비슷하지만 내가 원하는 것과 반대입니다. 부팅 할 때 외부 USB 드라이브를 아무도 로그인하지 않고 자동으로 같은 위치에 마운트하고 싶습니다 /media/<label>.

모든 데이터를 fstab에 입력하고 싶지는 않습니다. 부분적으로 지루하고 성가신 일이지만 대부분 연결하려는 내용이나 향후 파티션이 어떻게 변경 될지 예측할 수 없기 때문입니다.

MPD 와 같은 것들에 드라이브를 액세스 하고 SSH로 로그인 할 때 사용할 수 있기를 원합니다 . gnome-mountGnome 그래픽 세션에 로컬로 로그인 한 경우에만 마운트하는 것 같습니다.



답변

  • Ubuntu Server 11.10 참고 : 이 스크립트는 사용되지 않는 vol_id명령 으로 인해 Ubuntu Server 11.10에서 실패합니다 . vol_id님이 대신했습니다 blkid. 스크립트를 수정하려면 스크립트에서 “vol_id”를 “blkid -o udev”로 바꾸십시오 udev-auto-mount.sh.

나는 이것에 대해 잠시 동안 내 머리를 두드리고 있었고, 나는 해결책을 찾았다 고 생각한다. 이것은 데비안 기반 시스템에서 개발 및 테스트되었으므로 우분투에서 작동합니다. 다른 시스템에도 적용 할 수있는 가정을 지적하겠습니다.

  • 플러그인에 USB 드라이브를 자동으로 마운트하므로 Firewire에 적응하는 데 많은 시간이 걸리지 않습니다.
  • UDEV를 사용하므로 HAL / DeviceKit / GNOME-Anything을 사용하는 원숭이가 없습니다.
  • 자동으로 /media/LABEL장치를 마운트 할 디렉토리를 만듭니다 .
  • 그러나 다른 자동 마운터를 방해 할 수 있습니다 . 나는 그것을 테스트 할 수 없습니다. Gnome-VFS가 활성화되어 있으면 둘 다 마운트를 시도 할 수 있습니다. Gnome-VFS가 마운트에 실패하면 데스크탑 아이콘을 구성하지 않을 수 있습니다. 그놈에서 마운트 해제가 가능해야하지만 필요 gksudo하거나 유사 할 수 있습니다 .

시스템 부팅시 이것을 테스트하지는 않았지만 시스템이 마운트 준비가되기 전에 USB 드라이브를 마운트하려고 시도하는 것이 작동하지 않을 수있는 유일한 이유입니다. 이 경우 마운트 스크립트를 한 번 더 조정해야 할 수도 있습니다. (나는 조언이 있는지 확인하기 위해 ServerFault확인하고 있지만 그에 대한 관심은별로 없습니다.)

그런 다음에.


UDEV 참조 :


배경 (UDEV? Whuzzat?)

UDEV는 커널의 핫 플러그 ​​시스템입니다. /dev/disk/by-label/<LABEL>부팅시와 시스템이 실행되는 동안 추가 된 장치에 대해 적절한 장치와 장치 심볼릭 링크 (예 :)를 자동으로 구성합니다 .

D-Bus 및 HAL은 데스크톱 환경과 같은 리스너에 하드웨어 이벤트를 보내는 데 사용됩니다. 따라서 그놈에 로그인하여 CD를 넣거나 USB 드라이브를 연결하면 다음과 같은 이벤트가 발생합니다.

kernel -> udev -> dbus -> hal -> gnome-vfs/nautilus (mount)

그리고 presto, 당신의 드라이브가 마운트됩니다. 그러나 헤드리스 시스템에서는 자동 마운팅의 이점을 얻기 위해 로그인 할 필요가 없습니다.

Udev 규칙

UDEV를 사용하면 장치 삽입시 규칙을 작성하고 프로그램을 실행할 수 있으므로 이상적인 선택입니다. 데비안 / 우분투의 기존 규칙을 활용하여 /dev/disk/by-label/<LABEL>심볼릭 링크를 설정 하고 장치를 마운트 할 다른 규칙을 추가하겠습니다.

UDEV의 규칙은 /etc/udev/rules.d(및 /lib/udev/rules.dKarmic에) 유지 되며 숫자 순서대로 처리됩니다. 숫자로 시작하지 않는 파일은 번호가 매겨진 파일 다음에 처리됩니다. 내 시스템에서 HAL 규칙은이라는 파일 90-hal.rules89-local.rules있으므로 HAL에 도달하기 전에 처리되도록 규칙을 넣습니다 . 기본적으로이 규칙이 다음에 발생하는지 확인해야합니다 60-persistent-storage.rules. local.rules충분할 수 있습니다.

이것을 새 규칙 파일에 넣으십시오.

# /etc/udev/rules.d/local.rules
# /etc/udev/rules.d/89-local.rules
# ADD rule: if we have a valid ID_FS_LABEL_ENC, and it's USB, mkdir and mount
ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="add",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-automounter.sh %k"
  • 뒤에 공백이없고 \단지 newline( \n) 만 있는지 확인하십시오 .

  • 변경 SUBSYSTEMS=="usb"SUBSYSTEMS=="usb|ieee1394"파이어 와이어 지원.

  • 특정 사용자가 항상 장치를 소유하려면 OWNER="username"조항을 추가하십시오 . 특정 사용자가 소유 한 파일이 필요한 경우 대신 마운트 스크립트를 조정하십시오.

규칙을 읽고

이것은 실행할 프로그램을 장치의 프로그램 목록에 추가합니다. 로 USB 파티션 장치를 식별 <LABEL>한 다음이 정보를 마운트를 수행하는 스크립트로 전달합니다. 특히이 규칙은 다음과 일치합니다.

  1. ENV{ID_FS_LABEL_ENC}=="?*"-이전 시스템 규칙에 의해 설정된 환경 변수 파일 시스템 이외의 시스템에는 존재하지 않으므로 확인해야합니다. 실제로 ID_FS_LABEL마운트 지점 에 사용하고 싶지만 UDEV가 이스케이프를 이스케이프하도록 설득하지 않았으므로 마운트 스크립트에서 처리하도록하겠습니다.

    이 환경 변수와 다른 환경 변수는 udev에서 vol_id명령 ( deprecated )을 사용하여 얻습니다 . 파티션에 대한 빠른 세부 정보를 볼 수있는 편리한 도구입니다.

    $ sudo vol_id /dev/sdc1
    ID_FS_TYPE=ext2
    ID_FS_UUID=a40d282a-4a24-4593-a0ab-6f2600f920dd
    ID_FS_LABEL=Travel Dawgs
    ID_FS_LABEL_ENC=Travel\x20Dawgs
    ID_FS_LABEL_SAFE=Travel_Dawgs
    
  2. ACTION=="add"add이벤트 만 일치 …

  3. SUBSYSTEMS=="usb"-USB 버스에있는 장치와 만 일치합니다. SUBSYSTEMS여기에서는 기기의 부모와 일치하기 때문에 사용 합니다. 우리가 관심있는 장치는 실제로 SUBSYSTEM == “scsi”입니다. 부모 USB 장치와 일치하면 내부 드라이브에 프로그램을 추가하지 않아도됩니다.

  4. RUN+="..."-일치하는 것이 아니라 조치 : 실행할 프로그램 목록에이 프로그램을 추가하십시오. 프로그램의 인수 %k에서 장치 이름으로 확장되고 (예 : sdc1not /dev/sdc1) $env{FOO}환경 변수 FOO의 내용을 가져옵니다.

규칙 테스트

위의 첫 번째 참조 링크는 훌륭한 UDEV 튜토리얼이지만 약간 오래된 것입니다. 규칙을 테스트하기 위해 실행되는 프로그램 ( udevtest특히)이 범용 udevadm유틸리티 로 대체되었습니다 .

규칙을 추가 한 후 장치를 연결하십시오. 몇 초 정도 지난 다음 어떤 장치에 할당되어 있는지 확인하십시오.

$ ls -l /dev/disk/by-label/*
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Foo -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Bar -> ../../sdb1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Baz -> ../../sdc1

이동식 드라이브에가 있으면 label_Baz장치에있는 것 sdc1입니다. 이것을 실행하고 끝을 향한 출력을보십시오.

$ sudo udevadm test /sys/block/sdc/sdc1
parse_file: reading (...)                           (many lines about files it reads)
import_uevent_var: import into environment: (...)   (many lines about env variables)
(...)                                               (many lines tracing rule matches & programs run)
update_link: found 1 devices with name 'disk/by-label/LABEL_BAZ'
update_link: found '/block/sdc/sdc1' for 'disk/by-label/LABEL_BAZ'
update_link: compare (our own) priority of '/block/sdc/sdc1' 0 >= 0
update_link: 'disk/by-label/LABEL_BAZ' with target 'sdc1' has the highest priority 0, create it
udevtest: run: '/usr/local/sbin/udev-automounter.sh sdc1 LABEL_BAZ'
udevtest: run: 'socket:/org/freedesktop/hal/udev_event'
udevtest: run: 'socket:@/org/kernel/udev/monitor'

RUN+=마지막 몇 줄 (이 예에서는 아래에서 세 번째)에서 규칙에서 스크립트 이름을 찾으십시오 . 이 장치에 사용될 인수를 볼 수 있습니다. 이제 해당 명령을 실행하여 인수가 올바른지 확인할 수 있습니다. 명령 줄에서 작동하면 장치를 삽입 할 때 자동으로 작동합니다.

실시간으로 UDEV 이벤트를 모니터링 할 수도 있습니다. 실행 sudo udevadm monitor( man udevadm스위치에 대한 자세한 내용 은 참조 ). 그런 다음 새 장치를 연결하고 이벤트가 스크롤되는 것을 지켜보십시오. (실제로 낮은 수준의 세부 사항에 속하지 않는 한 아마 과잉 일 것입니다 …)

규칙 재로드

규칙을 올바르게 읽고 있음을 확인한 후 UDEV에 규칙을 다시로드하도록 지시하여 새 규칙이 적용되도록해야합니다. 다음 방법 중 하나를 사용하십시오 (첫 번째 방법이 작동하지 않으면 두 번째 방법은 …하지만 첫 번째 방법을 시도하십시오).

  • 운영 sudo udevadm control --reload-rules

  • 운영 sudo /etc/init.d/udev reload

  • 재부팅


스크립트! 사실, 2 개의 스크립트 …

첫 번째 스크립트는 다음과 같습니다. 우리가 실행하는 프로그램은 빠르게 완료해야하기 때문에 백그라운드에서 두 번째 스크립트를 회전시킵니다. 이것을 넣으십시오 /usr/local/sbin/udev-automounter.sh:

#!/bin/sh
#
# USAGE: usb-automounter.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-mount.sh ${1} &

두 번째 스크립트는 다음과 같습니다. 이것은 조금 더 입력 확인을 수행합니다. 에 넣으십시오 /usr/local/sbin/udev-auto-mount.sh. 아래의 마운트 옵션을 조정할 수 있습니다. 이 스크립트는 이제 자체적으로 파티션 LABEL 찾기를 처리합니다. UDEV는 DEVICE 이름 만 보냅니다.

부팅시 드라이브를 마운트하는 데 문제가있는 경우sleep 60 , 스크립트가 드라이브를 마운트하려고 시도하기 전에 시스템이 완전히 가동 될 수 있도록이 스크립트에 시간을 오래 투자 할 수 있습니다 .

ps웹 서버가 실행 중인지 확인하는 방법에 대한 의견에 의견을 제시 했지만 시스템에 맞게 조정하고 싶을 것입니다. 필자는 nfsd, smbd, apache 등과 같은 대부분의 네트워크 서버가 이러한 목적으로 충분하다고 생각합니다. 물론 서비스가 실행되고 있지 않으면 마운트 스크립트가 실패 할 가능성이 있습니다. 특정 파일의 존재가 더 나은 솔루션입니다.

#!/bin/sh
#
# USAGE: udev-auto-mount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
#
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

# test that this device isn't already mounted
device_is_mounted=`grep ${DEVICE} /etc/mtab`
if [ -n "$device_is_mounted" ]; then
   echo "error: seems /dev/${DEVICE} is already mounted"
   exit 1
fi

# If there's a problem at boot-time, this is where we'd put
# some test to check that we're booting, and then run
#     sleep 60
# so the system is ready for the mount below.
#
# An example to experiment with:
# Assume the system is "booted enough" if the HTTPD server is running.
# If it isn't, sleep for half a minute before checking again.
#
# The risk: if the server fails for some reason, this mount script
# will just keep waiting for it to show up.  A better solution would
# be to check for some file that exists after the boot process is complete.
#
# HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# while [ -z "$HTTPD_UP" ]; do
#    sleep 30
#    HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# done


# pull in useful variables from vol_id, quote everything Just In Case
eval `/sbin/vol_id /dev/${DEVICE} | sed 's/^/export /; s/=/="/; s/$/"/'`

if [ -z "$ID_FS_LABEL" ] || [ -z "$ID_FS_TYPE" ]; then
   echo "error: ID_FS_LABEL is empty! did vol_id break? tried /dev/${DEVICE}"
   exit 1
fi


# test mountpoint - it shouldn't exist
if [ ! -e "/media/${ID_FS_LABEL}" ]; then

   # make the mountpoint
   mkdir "/media/${ID_FS_LABEL}"

   # mount the device
   #
   # If expecting thumbdrives, you probably want
   #      mount -t auto -o sync,noatime [...]
   #
   # If drive is VFAT/NFTS, this mounts the filesystem such that all files
   # are owned by a std user instead of by root.  Change to your user's UID
   # (listed in /etc/passwd).  You may also want "gid=1000" and/or "umask=022", eg:
   #      mount -t auto -o uid=1000,gid=1000 [...]
   #
   #
   case "$ID_FS_TYPE" in

       vfat)  mount -t vfat -o sync,noatime,uid=1000 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # I like the locale setting for ntfs
       ntfs)  mount -t auto -o sync,noatime,uid=1000,locale=en_US.UTF-8 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # ext2/3/4 don't like uid option
       ext*)  mount -t auto -o sync,noatime /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;
   esac

   # all done here, return successful
   exit 0
fi

exit 1

슈퍼 보너스 정리 스크립트!

하나 더 스크립트. 이 모든 것은 장치를 마운트 해제하고 마운트 지점 디렉토리를 제거하는 것입니다. 이를 수행 할 권한이 있다고 가정하므로을 (를) 실행해야합니다 sudo. 이 스크립트는 이제 명령 줄에서 전체 마운트 지점을 사용합니다. 예 :

$ /usr/local/sbin/udev-unmounter.sh "/media/My Random Disk"

이것을 넣으십시오 /usr/local/sbin/udev-unmounter.sh:

#!/bin/sh
#
# USAGE: udev-unmounter.sh MOUNTPT
#   MOUNTPT is a mountpoint we want to unmount and delete.
MOUNTPT="$1"

if [ -z "$MOUNTPT" ]; then
   exit 1
fi


# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1


답변

다른 사람들이 인터넷에서 제안한 마지막 옵션 중 하나는입니다 ivman.하지만에 의존하는 것으로 보입니다 pmount. pmount버리고 ivman거의 같습니다.

의 대체품은 ivman입니다 halevt. Karmic에서 사용할 수 있습니다. ivman“유지”및 “pmount에 의존하지 않음”을 다시 구현 한 것입니다 . Jaunty에서는 패키지를 사용할 수 없지만 업그레이드 할 계획이 없다면 직접 빌드 할 수 있습니다.

이러한 도구는 모두 DBus 및 HAL 레이어 위에 있으며 이벤트에서 응답합니다. 분명히 둘 다 시스템 데몬 또는 사용자 세션 마운트 관리자 (la Gnome-VFS)로 실행할 수 있습니다. /etc/defaults/{ivman,halevt}파일은 시스템 설정을 담당합니다.

다음은 마운트 포인트 ivman사용 을 조정 하기 위한 지침 입니다 /media/<LABEL>. 그것은 가능성이 높습니다 halevt그것을 할 수있는 간단한 방법이 있지만, 아마 그들은 당신이 답을 찾을 수 있습니다.


HALEVT로 작업

업데이트 : 내 UDEV 답변이 제공하지 않는 자동 CD 마운트를 얻는 데 관심이 있기 때문에 더 자세히 살펴 보았습니다 halevt. 프로세스에 대해 많은 것을 설명하는 데 도움 이되는이 블로그 게시물 을 발견했습니다 . halevt데비안 레니 (Debian Lenny) 용 패키지 를 컴파일해야했습니다 (다행히도 모든 의존성은 lenny-backports 섹션에있었습니다). 일단 설치되면 프로세스는 대부분 무시할 수 없습니다.

  1. 시스템 halevt-daemon이 활성화되어 있는지 확인하십시오 /etc/default/halevt
  2. 시스템 halevt 사용자가 장치를 마운트하도록 허용 /etc/PolicyKit/PolicyKit.conf(아래 참조 : source )
  3. 볼륨 레이블을 원하는 마운트 지점에 복사하도록 HAL 정책 수정 /etc/hal/fdi/policy/preferences.fdi(아래 참조)
  4. CD / DVD를 지원 하려면 위 블로그 포스트에서 eject.hal스크립트 를 가져 와서 수정 한 후 저장하십시오 /usr/local/bin.
  5. 마운트를 사용하도록 halevt 시스템 구성 수정 /etc/halevt/halevt.xml
  6. 로그인 관리자의 세션 전후 스크립트에 코드를 추가하여 누군가 로그온 할 때 시스템 halevt- 데몬을 중지하고 로그 오프 할 때 다시 시작하십시오.

새 구성을 확인하기 위해 HAL 및 HALEVT 데몬을 다시 시작해야하는 경우이를 사용하여 올바른 순서로 가져 오십시오.

sudo sh -c "/etc/init.d/halevt stop ; /etc/init.d/hal restart ; /etc/init.d/halevt start"

1 단계

그 확인 START_DAEMON=yes/etc/default/halevt.

2 단계

에서 /etc/PolicyKit/PolicyKit.conf,이 추가 내부<config></config> 섹션 :

<match action="org.freedesktop.hal.storage.mount-removable">
   <match user="halevt">
      <return result="yes"/>
   </match>
</match>

3 단계

에서 /etc/hal/fdi/policy/preferences.fdi,이 추가 안쪽 은`섹션 :

<match key="volume.label" empty="false">
    <match key="volume.label" is_absolute_path="false">
        <merge key="volume.policy.desired_mount_point" type="copy_property">volume.label</merge>
    </match>
</match>

4 단계

스크립트는 훌륭하지만 실행해야합니다 /bin/bash. 일부 시스템은 실제로 호출 /bin/dash될 때 사용할 수 있습니다 /bin/sh. 따라서 스크립트에서 맨 위 줄을 변경하여 올바른 줄을 얻습니다.

#!/bin/sh         <------ old first line

#!/bin/bash       <------ new first line

5 단계

이것은 재미있는 부분입니다. 시스템은 /etc/halevt/halevt.xml이미 기본 사항을 제공 할 수 있으므로 자신의 용도에 맞게 조정해야합니다. 필자의 경우 시스템은 이미 기본 탈착식 마운트를 제공했지만 CDROM 마운트 및 꺼내기 버튼에 대한 지원을 추가해야했습니다.

내가 언급 한 블로그 게시물에는 사용자 자신의 조정을 살펴볼 수 있는 좋은 XML 구성 예가 있습니다. 주로 저자 fluxbox환경을 위한 그놈 마운트 대체를 설정하는 것에 관한 것이기 때문에 그의 예제 XML이 원하는 것보다 더 많은 것을 수행하지만, 당신이 할 수있는 일에 대한 느낌을 얻는 좋은 방법입니다. 의 좋은 예도 있습니다 /usr/share/doc/halevt/examples.

나는 또한 sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"모든 것이 작동하기 전에 달렸다 .

다음은 자동 마운트 CD / DVD 작동을위한 추가 사항입니다.

<!-- CD/DVD mount -->
<halevt:Device match="hal.block.device &amp; hal.block.is_volume = true  &amp; hal.volume.is_disc = true &amp; hal.volume.disc.has_data = true">
   <halevt:Property name="hal.volume.is_mounted">
      <halevt:Action value="true" exec="halevt-mount -u $hal.udi$ -p $hal.volume.policy.desired_mount_point$ -m 002"/>
   </halevt:Property>
</halevt:Device>

<!-- CD/DVD eject button support -->
<halevt:Device match="hal.storage.drive_type = cdrom">
   <halevt:Condition name="EjectPressed" exec='/usr/local/bin/eject.hal $hal.block.device$'/>
</halevt:Device>

6 단계

시스템 halevt-daemon이 작동하면 GNOME에 로그인 할 때 비활성화하고 로그 아웃 할 때 다시 시작해야합니다. ( GDM 아닌 로그인 관리자의 경우이 질문에 대한 답변을 참조하십시오 .)

/etc/gdm/PreSession/Defaulthalevt-daemon 시스템을 중지하려면 다음을 추가하십시오.

/etc/init.d/halevt stop

/etc/gdm/PostSession/Defaulthalevt-daemon 시스템을 다시 시작하려면 다음을 추가하십시오.

/etc/init.d/halevt start


답변

시간이 지남에 따라 더 쉬운 솔루션이 나타납니다.

이 솔루션은이 목적으로 작성된 udevil 소프트웨어 패키지에 의존하며 udev 규칙을 다루지 않아도됩니다. 간단한 솔루션으로 (신규 및 기존 사용자에게) 바람직합니다.

devmonudevil 의 스크립트는 udev와 glib에만 의존하면서 모든 마법을 수행합니다. 초기 구성없이 거의 즉시 사용할 수 있습니다.

내 워크 스테이션에서 수행 한 모든 작업은 다음 rc.local과 같이 devmon을 호출하는 것입니다.
devmon 2>&1 >> /var/log/devmon &
편의 rc.local를 위해 자동화 도구 pleaserun를 만드는 대신 https://unix.stackexchange.com/ a / 124609 / 42673

실행 한 후 연결 한 스토리지를 검사 한 후 (파티션을 찾고 파일 시스템 레이블을 찾은 경우) 파일을 마운트합니다 /media/FILESYSTEM_LABEL.
(유명한) 시스템이 미래에 어느 시점에서이 기능을 통합 할 수 있다는 점을 제외하고는 그보다 단순한 것을 상상할 수 없었습니다.

udevil At A Glance ( github.io/udevil )
스크립트 : devmon ( igurublog / script-devmon )


답변

quack quixote의 답변은 Ubuntu Lucid Lynx (10.04)에서 작동하지 않습니다 /sbin/vol_id. 명령 이 없습니다 .

화려하고 udev를 사용하는 대신 이것을 /etc/rc.local에 넣고 완료하십시오.

for dev in $(ls -1 /dev/disk/by-label/* | grep -v EFI) ; do
  label=$(basename $dev)
  mkdir -p /media/$label
  $(mount | grep -q /media/$label) || mount $dev /media/$label
done


답변

데비안 기반 시스템 (예 : Ubuntu 등)에는 USB 드라이브를 자동으로 마운트 하는 usbmount 패키지가 있습니다. 기본적으로 이미 설명한대로 udev 기반 접근 방식을 사용합니다. 단지 간단한 패키지 설치 일뿐입니다. 패키지 의 원래 작성자가 부족한 것으로 보이지만 우분투 / 데비안은 여전히 ​​그것을 유지하는 것처럼 보입니다.

설치된 스크립트는 적절한 마운트 지점을 제공하도록 구성 될 수 있습니다 (/etc/usbmount/usbmount.conf).


답변

quack quixote의 탁월한 제거 지침을 플러시하려면 :

이전에 작성한 udev 규칙 파일 (/etc/udev/rules.d)에 다음 행을 추가하십시오. “

ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="remove",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-autounmounter.sh %k"

다음 스크립트를 작성하고 다음 내용으로 chmod it 실행 파일 (/usr/local/sbin/udev-autounmounter.sh)을 실행하십시오.

#!/bin/sh
#
# USAGE: usb-autounmounter.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-unmount.sh ${1} &

마지막으로 마운트 해제 스크립트 자체 (udev-auto-unmount.sh) :

#!/bin/sh
#
# USAGE: udev-auto-unmount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
#
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

#test that the device is already mounted
MOUNTPT=`mount | grep ${DEVICE} | cut -d ' ' -f 3`
if [ -z "${MOUNTPT}" ]; then
   echo "error: the device is not already mounted"
   exit 1
fi

# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1

따라서 다른 지침과 함께 디렉토리는 udev 이벤트에서 자동으로 나타나고 사라집니다.


답변

Pysdm 을 사용 해보고 싶을 수도 있습니다.