데스크탑 환경이없고 Xorg가없는 데비안 sid 시스템 (Wheezy) (아치와 동일)이 있습니다.
SD 카드, USB 스틱, 외장 HDD를 레이블로 지정된 디렉토리에 / 와 함께 적절한 디렉토리에 /media/
수동으로 또는 부팅시 자동으로 마운트 할 수 있지만, 요구 사항에 맞게 제한적이고 역동적이지 않습니다. 에 마운트하려면 다른 장치가있는 각 장치마다 고유 한 항목이 필요 하며 각 하위 디렉토리도 수동으로 생성 / 제거해야 합니다).mount
umount
/etc/fstab
/media/<LABEL>
<LABEL>
<LABEL>
/media/
그래서 그들을 마운트하는 가장 좋은 방법은 무엇입니까 자동 으로 /media/<LABEL>
삽입에서 (그들은 분리 없습니다 즉시 파일 시스템에서 마운트를 해제하는 상관없이 데이터에 대해 얼마나 위험 )?
이상적인 솔루션은 다음과 같습니다.
- 검출 이동식 매체가 꽂혀있을 때 (예를 첨가 할 때
/dev/
등
sdax
,sdbx
…에 의해udev
) /media/
레이블 (이동식 매체의 레이블) 에 따라 디렉토리를 작성하십시오.- 옵션으로 (a ) 모드로 디렉토리
/media/<LABEL>
에 마운트하십시오RW
(파일 시스템이 지원하는flush
경우vfat
) - 미디어가 분리되었는지 감지
- 그렇다면 파일 시스템에서 마운트를 해제하십시오
- 해당 디렉토리를 제거하십시오
/media/
(장치 때문에 캐시의 핫 언 플러그 할 때 데이터 손실을 방지하기 위해, oviously 동기 모드로 설치되어야한다 : 편집 sync
이다 방법은 너무 많은 vfat
이동식 미디어 그래서 flush
타협으로 만들어졌습니다 미만 확보 sync
수명에 따라,하지만 덜 위험 플래시 메모리 사이클)
나는에 대한 몇 가지 정보를 발견 autofs
, HAL
, udisks
, udisks2
, usbmount
등,하지만 하나가되지 않거나 바람직하고, 어쨌든, 지금까지, 그렇게 내 시스템에 쉽게 구성하는 방법을 알아 냈하지 않은 불분명 …
답변
찾고 계신 것 같습니다 pmount
.
삽입시 자동 마운트를하려면 데비안에서 USB 스틱 자동 마운트를 참조하십시오 .
시스템이 udisks2를 사용하는 경우 이는 이동식 저장 장치 삽입에 반응하는 선호되는 방법입니다. Udisk 구성 팁 은 Arch Wiki 를 참조하십시오 .
그렇지 않으면 새 장치가 나타날 때 반응하는 프로그램은 udev 이므로 자동 마운트는 udev 규칙 에 의해 트리거됩니다 . usbmount의 패키지는 자동으로 USB 저장 장치와 몇 가지 다른 마운트 udev에 규칙을 제공합니다. FUSE 파일 시스템 (예 : ntfs-3g)에서는 mount
udev 규칙에서 호출 할 수 없으므로 필요한 경우 udisk를 사용하십시오.
인과 관계가 작동하지 않기 때문에 미디어를 제거하면 자동으로 마운트 해제 할 수 없습니다. 미디어를 제거 하기 전에 마운트를 해제해야합니다 . 읽기 전용 미디어의 경우, 갑자기 종료 된 파일 시스템에서 파일을 열면 일부 응용 프로그램이 혼동 될 수 있지만 제거 후 마운트 해제를 피할 수 있습니다. 쓰기 가능한 미디어의 경우 마운트 된 파일 시스템을 분리하면 데이터가 손상 될 수 있습니다.
답변
최근에 내가 한 일이 있습니다.이 접근법에 매우 만족합니다. 이것은 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]
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
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", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"
# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
SYMLINK+="usbdisks/%k", MODE:="0660"
# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
RUN+="/bin/rm /media/usb/%k"
수행 할 작업 : “/ dev / usbdisks / <…>”아래에 USB 저장 장치 파티션을위한 두 개의 심볼릭 링크를 만듭니다. 레이블이없는 경우 USB 스토리지 파티션의 레이블 또는 커널 이름을 사용합니다. 두 번째 심볼릭 링크는 “/ media / usb / <…>”에서 “/ media / autousb / <…>”로 연결됩니다. 이는 자동 마운터 지원을 위해 수행됩니다 (2 단계 참조).
참고 : 나는 원래 ID_FS_LABEL_ENC 변수에 규칙을 사용하지 않았습니다. 동일한 라벨을 사용하는 두 개의 USB 스틱을 연결하면 어떻게됩니까?
그러나 포스터는 특별히 USB 디스크의 레이블을 사용하기를 원했기 때문에 규칙을 적절히 수정했습니다.
udev가 이러한 규칙을 읽도록하려면 다음을 사용하십시오.
sudo udevadm control --reload-rules
이 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”및 “xfs”파일 시스템에 대한 샘플 코드가 포함되어 있습니다. 물론 더 많은 파일 시스템을 지원하도록 이것을 확장하는 것은 매우 쉽습니다.
3 단계) 선택 사항 … “꺼내기”== USB 스틱 (또는 USB 스틱의 파티션)을 마운트 해제하려면 / sbin / usbeject 아래에 스크립트를 작성하십시오.
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
이 스크립트를 사용하면 “sudo usbeject”를 사용하여 마운트 된 모든 USB 장치 파티션을 마운트 해제 할 수 있습니다 (자동 마운트 해제를 지시하여).
물론 파티션이 어느 곳에서나 사용되지 않도록 할 수 있습니다. 그러면 60 초 시간 초과 후 자동 마운터가 파티션을 마운트 해제합니다.
여기서 실제 트릭은 “/ media / usb”에서 “/ media / autousb”로의 심볼릭 링크를 사용하는 것입니다.
- “/ media / usb”심볼릭 링크는 udev에 의해 생성되어 사용자에게 USB 저장 장치 파티션이있는 간단한 개요를 제공합니다
- Automedia는 / media / usb를 통해 파티션을 사용할 경우 요청시 파티션을 자동 마운트합니다.
- 스크립트 된 “auto.usb”파일을 사용하면 모든 종류의 파일 시스템을 지원할 수 있으며 또한 모든 종류의 명명 체계를 지원할 수도 있습니다.
- 이 방법은 파티션이 다른 파일 시스템 유형을 사용하더라도 다중 파티션이있는 USB 스틱을 지원합니다.
답변
좋아, 오랜 시간이 지났지 만 지금까지 내가 찾은 최고의 옵션으로 내 질문에 대답 할 것입니다. 요약 : udev
일부 스크립트 (디렉토리 작성 / 제거 및 이동식 장치 마운트 해제 / 마운트)와 연관된 규칙을 작성하고 udev
device event type =에 첨부하십시오 partition
.
1-추가 / 제거 스크립트 작성
다음 스크립트 storage-automount.sh
를 저장 /lib/udev/
하고 실행 가능하게 만드십시오 ( sudo chmod a+x /lib/udev/storage-automount.sh
) :
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# if a plugdev group exist, retrieve it's gid set & it as owner of mountpoint
plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
if [ -z $plugdev_gid ]; then
gid=''
else
chown root:plugdev $mount_point
gid=",gid=$plugdev_gid"
fi
# create the mountpoint directory in /media/ (if not empty)
if [ -n $mount_point ]; then
mkdir -p /media/$mount_point
# other options (breaks POSIX): noatime,nodiratime,nosuid,nodev
mount -t $ID_FS_TYPE \
-o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \
$DEVNAME /media/$mount_point
fi
다음 스크립트 storage-autounmount.sh
를 저장 /lib/udev/
하고 실행 가능하게 만드십시오 ( sudo chmod a+x /lib/udev/storage-autounmount.sh
) :
#!/bin/sh
# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
mount_point=${DEVNAME##*/}
fi
# remove the mountpoint directory from /media/ (if not empty)
if [ -n $mount_point ]; then
umount -l /media/$mount_point
rm -R /media/$mount_point
fi
2- udev
해당 스크립트를 이벤트에 첨부하는 규칙 작성
그리고 마지막으로, 추가 udev
의 규칙을 /etc/udev/rules.d/
예를 들어 85-storage-automount.rules
:
ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"
해당 디렉토리 / 폴더의 다른 규칙과 동일한 권한을 갖도록합니다.
이제 저장 장치를 연결 /media/
하면 파티션 이름 에 따라 디렉토리가 생성되고 (기억하지는 않지만 NTFS 파티션에서도 작동한다고 생각합니다) 파티션이 마운트됩니다. plugdev
시스템에 그룹 이 있으면 사용자를위한 R / W입니다 . 또한 핫 플러그를 뽑을 경우 데이터 손실 위험을 제한하기 위해 디바이스를 동기 모드로 마운트합니다.
장치가 제거되면 장치가 마운트 해제되고 디렉토리가 /media
또한, 모니터링 할 수있는 도구 udev
이벤트는 udevadm monitor
같은 옵션, --env
또는 --property
:
$ udevadm monitor --env
이것은 데비안과 아치 모두에서 테스트되고 잘 작동하지만에 의존하는 모든 배포판에서 작동합니다 udev
.
답변
나는 그것이 늦게 생각하지만 누군가가 필요하면 이것을 게시 할 것입니다 : (또한 내 첫 번째 Exchange Exchange 답변)
여러 곳에서 솔루션을 확인한 후 Arch Wiki에서 간단한 솔루션을 찾았습니다.
아치 위키에 연결하십시오 .
기본 마운트 디렉토리를에서 /run/media/$USER/
로 변경하기 위해 udisks2 규칙을 추가 할 수 있습니다 /media/<Label>
.
다음과 같은 /etc/udev/rules.d/
이름으로 다음 규칙을 추가하십시오 99-udisks2.rules
.
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
그런 다음 자동 마운트를 위해 Udiskie 와 같은 간단한 도구를 설치할 수 있습니다 .
답변
참조하십시오 ArchWiki의 udev 페이지를 . mount
Udev 규칙 또는 Udev 규칙에 의해 실행되는 스크립트에서는 실행되지 않아야합니다 .
그러나 udev-media-automount 프로젝트에서 볼 수 있듯이 Udev 규칙에서 Systemd 장치를 호출하여 마운트하는 스크립트를 호출하여 간단하게 수행 할 수 있습니다. udisks2 및 기타 솔루션과 달리 udev-media-automount는 root
데스크탑 환경이나 “사용자 세션”이 나타날 때까지 기다리지 않고 사용자 로 무언가를 마운트하려는 간단한 경우에 맞춰져 있습니다. OP가 요구하는 것과 정확히 일치하는 것으로 보이며 기능적이고 이해하기 쉬운 것으로 나타났습니다.
답변
/ etc / fstab 파일을 편집하여이 작업을 수행하는 방법을 찾았습니다. 간단한 항목은 다음과 같습니다.
/dev/sdb1 /media/robot/hdd1 ntfs defaults 0 0
<file system> <mount point> <type> <options> <dump> <pass>