데비안에서 자동 마운트 USB 스틱 ATTRS{events}==”media_change” ATTRS{events_async}==””

플러그인 컴퓨터에서 Debian Squeeze를 실행 중이므로 (SSH 전용, GUI 없음) USB 스틱을 연결하면 자동으로 마운트되도록해야합니다.

내가 한 autofs것은 내가 수집 한 것에서 장치가 어디에 있는지 알 수있는 자동 마운팅을 처리하는 설치 입니다 /dev.

문제는 USB 스틱이 항상 같은 장치 이름에 있지는 않습니다. 때때로 /dev/sdc1, 때로는 /dev/sdd1등입니다.

나는 이것을 고치기 udev위해 USB 스틱에 항상 같은 이름을 부여하기 위해 사용해야 합니다.

다음 정보 중 하나를 얻었습니다 udevadm.

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/block/sdd/sdd1':
    KERNEL=="sdd1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="63"
    ATTR{size}=="129339"
    ATTR{ro}=="0"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{stat}=="      31      244      275      190        0        0        0        0        0      190      190"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0/block/sdd':
    KERNELS=="sdd"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="129439"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="51"
    ATTRS{stat}=="      56      727      783      520        0        0        0        0        0      520      520"
    ATTRS{inflight}=="       0        0"
    ATTRS{events}=="media_change"
    ATTRS{events_async}==""
    ATTRS{events_poll_msecs}=="-1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0':
    KERNELS=="8:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="        "
    ATTRS{model}=="Flash Disk      "
    ATTRS{rev}=="2.00"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x90"
    ATTRS{iodone_cnt}=="0x90"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0':
    KERNELS=="target8:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8':
    KERNELS=="host8"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v1976p6025d0100dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="383"
    ATTRS{idVendor}=="1976"
    ATTRS{idProduct}=="6025"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="11"
    ATTRS{devpath}=="1.2"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="197"
    ATTRS{idVendor}=="1a40"
    ATTRS{idProduct}=="0101"
    ATTRS{bcdDevice}=="0111"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{product}=="USB 2.0 Hub"

  looking at parent device '/devices/platform/orion-ehci.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="24"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.38.8 ehci_hcd"
    ATTRS{product}=="Marvell Orion EHCI"
    ATTRS{serial}=="orion-ehci.0"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/platform/orion-ehci.0':
    KERNELS=="orion-ehci.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="orion-ehci"
    ATTRS{modalias}=="platform:orion-ehci"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

udevUSB 스틱이 이름을 /dev/usbstick갖도록 규칙 을 작성하려고 노력 했지만 지금까지는 성공하지 못했습니다.

누군가가 규칙 파일에서 어떤 규칙을 지정해야이 USB 스틱이 항상 같은 이름을 갖도록 할 수 있습니까?

아니면 완전히 빠진 USB 스틱을 자동 마운트하는 훨씬 쉬운 방법이 있습니까?

최신 정보

그래서 나는 약간의 진전을 이루었습니다. 다음 규칙을 추가했습니다.

SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"

추가 / 제거 처리와 관련하여 여전히 일부 작업이 필요하다는 것을 알고 있지만 지금은 기본 테스트 일뿐입니다.

이것의 효과는 지금에 세 개의 새로운 디바이스 노드를 얻기 위해 관리하는 것입니다 /dev/dev/usbstick-sdc, /dev/usbstick-sdc1usbstick-sg2.

그러나 내가 찾은 것은 RUN섹션 의 코드가 한 번만 실행되고 디렉토리를 만드는 것 mnt/usbstick-sdc입니다. 또한 디렉토리가 항상 비어 있음을 발견 했으므로 여전히 여전히 잘못되고 있습니다! (진화하고 있지만).



답변

이러한 일반적인 문제를 해결하는 훨씬 쉬운 방법이 있어야한다고 생각했습니다. wheezy / sid 서버에서 시도한 내용은 다음과 같습니다.

sudo apt-get install usbmount

USB 스틱을 연결하십시오! 이제 내 스틱에 액세스 할 수 있습니다 /media/usb.

Btw, usbmount에는 매뉴얼 페이지가 없으므로 /usr/share/doc/usbmount/README.gz대신 읽으십시오 . usbmount는 기본적으로 동기화 옵션으로 스틱을 마운트하는 것 같습니다. 스틱이 비동기식으로 장착되어 작동 sync하거나 umount플러그를 뽑기 전에 훨씬 더 나을 수 있습니다 . 구성 할 수 있습니다.


답변

당신은 단지 표현하는 하나의 장치 노드를 가질 수 없습니다 것을 알 수 있는 부착 가능 pendrive를. 두 개를 연결하면 어떻게 되나요? 아니면 pendrive에 둘 이상의 파티션이있을 때?

일반적으로 사용자 지정 이름이 지정된 장치 노드를 만드는 데 사용하는 것은 SYMLINK+=입니다. 사용 방법을 보려면 규칙에서 grep하십시오 grep SYMLINK /etc/udev/rules.d/*. 모든 udev 트리거 명령에서와 같이에 설명 된 의미있는 변수를 사용할 수 있습니다 man udev. %k변수 를 통해 스크립트에 이름을 제공 할 수 있으므로 장치에 사용자 지정 이름을 지정할 필요가 없다는 것을 알 수 있습니다 .

자동 마운트 솔루션에 대해서는 UAM을 살펴보십시오 . 이 질문대한 답변 에서 약간 설명했습니다 .


답변

최근에 내가 한 일이 있습니다.이 접근법에 상당히 만족합니다. 이것은 Ubuntu 12.04 + Gentoo 용이지만 udev 및 autofs를 설치할 수있는 배포판이 작동해야한다고 생각합니다.

전제 조건 : udev + autofs를 설치해야합니다.

1 단계)

다음 “/etc/udev/rules.d/90-usbsd-auto.rules”파일을 작성하십시오 (물론 “.rules”로 끝나는 한 아무 이름이나 사용할 수 있습니다). :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9]
# for automounter support

ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<...>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", \
    RUN+="/bin/rm /media/usb/%k"

수행 할 작업 : “/ dev / usbdisks / <…>”아래에 USB 저장 장치 파티션을위한 두 개의 심볼릭 링크를 만듭니다.

두 번째 심볼릭 링크는 “/ media / usb / <…>”에서 “/ media / autousb / <…>”로 연결됩니다. 이는 자동 마운터 지원을 위해 수행됩니다 (2 단계 참조).

udev가 이러한 규칙을 읽도록하려면 다음을 사용하십시오.

sudo udevadm control --reload-rules

참고 : 동일한 USB 스틱의 동일한 이름 : 가능하지만 위험 할 수 있습니다. 위의 UDEV 규칙에서 “% k”대신 “$ env {ID_FS_LABEL_ENC}”와 같은 것을 사용할 수 있습니다. 볼륨 레이블을 사용하여 / media / usb / <…>를 만들지 만 두 개의 USB 스틱을 연결하고 둘 다 동일한 볼륨 레이블을 사용하면 어떻게됩니까?

이 udev 규칙 파일을 사용하면 모든 것이 USB 저장 장치 파티션을 자동 마운트하도록 설정됩니다. 지금은 장치가 (의도적으로) 자동 마운트되지 않습니다. 함께 사용하면 자동 마운트됩니다.

2 단계)

automedia / media / autousb / <…>를 자동 마운트하도록 설정 autofs : “/etc/auto.master”파일 (Ubuntu 12.04 용)에 다음 줄을 추가했습니다.

/media/autousb /etc/auto.usb --timeout=60

즉, 60 초 동안 활동이 없으면 AutoFS가 장치를 마운트 해제합니다. 취향에 따라 더 적게 또는 더 많이 사용하고 싶을 수도 있습니다.

젠투에서는 “/etc/autofs/auto.master”를 수정해야합니다.

/media/autousb /etc/autofs/auto.usb --timeout=60

이제 다음 내용으로 “auto.usb”를 만들었습니다.

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

이 auto.usb는 실행 가능해야하므로 autofs는 이것을 (bash) 스크립트로 사용합니다. 예를 들어

sudo chmod 0755 /etc/auto.usb

수행 할 작업 :이 스크립트는 AutoFS (/ usr / sbin / automount)에 USB 저장 장치 파티션을 마운트하는 방법을 알려줍니다.

스크립트는 먼저 “/ sbin / blkid”를 사용하여 어떤 종류의 파일 시스템이 파티션에 있는지 확인합니다.

그러면 스크립트는 장치 파티션에 따라 올바른 마운트 옵션을 제공합니다.

참고 : “vfat”(아마도 USB 스틱에 가장 일반적), “ntfs”및 “ext4″파일 시스템에 대한 샘플 코드가 포함되어 있습니다. 물론 더 많은 파일 시스템을 지원하도록 이것을 확장하는 것은 매우 쉽습니다.

3 단계)

선택 사항 … “eject”== usb 스틱 (또는 usb 스틱의 파티션)을 마운트 해제하려면 / sbin / usbeject 아래에 스크립트를 만드십시오.

#!/bin/bash
# make sure everything is written to USB disk(s)
sync
# sending SIUGSR1 to automount will unmount the media
killall -s SIGUSR1 /usr/sbin/automount

이 스크립트를 사용하면 “sudo usbeject”를 사용하여 마운트 된 모든 USB 장치 파티션을 마운트 해제 할 수 있습니다 (자동 마운트 해제를 지시하여).

물론 파티션이 어느 곳에서나 사용되지 않도록 할 수 있습니다. 그러면 60 초 시간 초과 후 자동 마운터가 파티션을 마운트 해제합니다.

여기서 실제 트릭은 “/ media / usb”에서 “/ media / autousb”로의 심볼릭 링크를 사용하는 것입니다.

  • “/ media / usb”심볼릭 링크는 udev에 의해 생성되어 사용자에게 USB 저장 장치 파티션이있는 간단한 개요를 제공합니다
  • Automedia는 / media / usb를 통해 파티션을 사용할 경우 요청시 파티션을 자동 마운트합니다.
  • 스크립트 된 “auto.usb”파일을 사용하면 모든 종류의 파일 시스템을 지원할 수 있으며 또한 모든 종류의 명명 체계를 지원할 수도 있습니다.
  • 이 방법은 파티션이 다른 파일 시스템 유형을 사용하더라도 다중 파티션이있는 USB 스틱을 지원합니다.

답변

본인의 질문에 답변 해 주셔서 죄송합니다. 기여해 주신 rozcietrzewiacz 에게 많은 감사의 말씀드리지만 , 온라인에서 몇 시간 동안 온라인을 읽은 후 다음 규칙을 사용하여 큰 진전 을 이루었 습니다.

SUBSYSTEMS=="scsi", KERNEL=="sd[a-h]1", SYMLINK+="removable", RUN+="/bin/mount /dev/removable /path/to/mount"

SCSI 장치의 첫 번째 파티션이 마운트됩니다. 다음 질문은 다중 파티션을 마운트하는 방법이지만, 또 다른 문제는 또 다른 문제입니다.


답변

Jessie에서 유지 관리되지 않고 작동하지 않기 때문에 실제로 가장 좋은 답변이 더 이상 사용되지 않는 것으로 나타났습니다 (malat의 의견 참조).

나에게 (Jessie에게), 이 블로그 의 솔루션 은 매력처럼 작동했습니다.

“ddumont”에 대한 크레딧을 제공하지만 블로그 링크 / 답변에 대한 개요를 게시하면 향후 링크 썩음에 대처할 수 있습니다.

다음 줄을 추가하십시오 /etc/fstab

/dev/sr0 /media/bluray auto defaults,nofail,x-systemd.automount 0 2

nano를 사용하여이 작업을 수행 할 수 있습니다.

sudo nano /etc/fstab

설명:

/dev/sr0장치 파일입니다. / dev / disk / by-id에서 udev로 설정 한 기호 링크 중 하나를 사용할 수도 있습니다. 장치 파일에 따라이를 변경해야합니다 (장치 sudo fdisk -l를 나열하려면)

/media/bluray마운트 포인트입니다. 다른 마운트 지점을 선택할 수 있습니다

nofail 광 드라이브에 디스크없이 부팅 할 때 오류보고를 피하기 위해 필요

x-systemd.automount 삽입 된 디스크를 자동으로 마운트하도록 systemd를 구성하는 옵션입니다.

noauto를 지정하지 마십시오. 이렇게하면 시스템이 디스크를 자동으로 마운트하지 못하게되어 목적에 맞지 않습니다.

테스트

journalctl -x -f터미널 에서 명령 을 실행하여 systemd에서 무슨 일이 일어나고 있는지 확인하십시오.

로 시스템 구성을 다시로드하십시오 sudo systemctl daemon-reload.

광 드라이브에 디스크를 넣습니다

그런 다음 journalctl은 다음과 같이 표시되어야합니다.

Sept. 27 16:07:01 frodo systemd[1]: Mounted /media/bluray.

더욱이

NTFS 드라이브를 성공적으로 마운트하려면 ntfs-3g (이전 ntfsprogs)를 설치해야했습니다.

sudo apt-get install ntfs-3g

OSX 형식의 USB가 작동하도록 hfsprogs를 설치할 필요는 없지만 직접 확인해야합니다.


답변