Usb 자동마운트

/etc/udev/rules.d/usb-auto-mount.rules

[code:vwqf00pn]
ENV{ID_FS_LABEL_ENC}=="?*", ACTION=="add", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/udev-usb-auto-mount.sh %k"
[/code:vwqf00pn]

/etc/udev/rules.d/usb-auto-umount.rules

[code:vwqf00pn]
ENV{ID_FS_LABEL_ENC}=="?*", ACTION=="remove", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/udev-usb-auto-unmount.sh %k"
[/code:vwqf00pn]

/usr/local/bin/udev-usb-auto-mount.sh

[code:vwqf00pn]
#!/bin/sh
device_is_mounted() {
eval $(/sbin/blkid -o udev -p /dev/${1} |sed ‘s/^/export /;s/=/="/;s/$/"/’)
}
DEVICE=$1

check input

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

test that this device is not already mounted

if [ -n "$(device_is_mounted $DEVICE)" ]; then
echo "error: seems /dev/${DEVICE} is already mounted"
exit 1
fi

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 should not exist

if [ ! -e "/media/${ID_FS_LABEL}" ]; then

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

case "$ID_FS_TYPE" in

	vfat)
		mount -t vfat -o defaults,sync,noatime,umask=113,fmask=113,dmask=007,gid=plugdev /dev/${DEVICE} "/media/${ID_FS_LABEL}"
		;;

	ntfs)
		mount -t auto -o defaults,sync,noatime,umask=113,fmask=113,dmask=007,gid=plugdev /dev/${DEVICE} "/media/${ID_FS_LABEL}"
		;;

ext*)
		mount -t auto -o defaults,sync,noatime,nodiratime,data=writeback,acl /dev/${DEVICE} "/media/${ID_FS_LABEL}"
	;;
esac

# all done here, return successful
exit 0

fi
exit 1
[/code:vwqf00pn]

/usr/loca/bin/udev-usb-auto-umount.sh

[code:vwqf00pn]
#!/bin/sh
device_is_mounted() {
eval $(/sbin/blkid -o udev -p /dev/${1} |sed ‘s/^/export /;s/=/="/;s/$/"/’)
}
DEVICE=$1
[ -z "$DEVICE" ] && exit 1
MOUNTPT=$(mount|grep ${DEVICE} | cut -d ’ ’ -f3)
if [ -z "$(device_is_mounted $DEVICE)" ]; then
echo "error: the device is not already mounted."
exit 1
fi
if [ -e "$MOUNTPT" ]; then
umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0
echo "error: ${MOUNTPT} failed to umount."
exit 1
fi
echo "error: ${MOUNTPT} does not exist."
exit 1
[/code:vwqf00pn]

스크립트에 실행속성 부여

[code:vwqf00pn]
sudo chmod +x /usr/local/bin/udev-usb-auto-*mount.sh
[/code:vwqf00pn]

리부팅하면 적용되지만, 바로 적용하려면…

[code:vwqf00pn]
sudo udevadm control --reload-rules
[/code:vwqf00pn]

자동으로 마운트 되지 않나요?

전 되던데…^^ 유용한 팁 감사합니다.

프로토카오스님, 스크립트의 용도를 좀 여쭤봐도 괜찮을까요?
SD카드를 컴퓨터에 삽입하면 마운트 하면서 동시에 정해진 스크립트도 돌리고 싶은데 혹시 프로토카오스님께서 올려주신 스크립트를 수정해서 해볼 수는 없을까요?

다름이 아니고 DSLR SD카드를 컴퓨터에 삽입하면 마운트 하면서 동시에 사진복사 스크립트도 돌리고 싶은데 혹시 프로토카오스님께서 올려주신 스크립트를 수정해서 해볼 수는 없을까요?

[quote="loscane":rlnpy93q]프로토카오스님, 스크립트의 용도를 좀 여쭤봐도 괜찮을까요?
SD카드를 컴퓨터에 삽입하면 마운트 하면서 동시에 정해진 스크립트도 돌리고 싶은데 혹시 프로토카오스님께서 올려주신 스크립트를 수정해서 해볼 수는 없을까요?

다름이 아니고 DSLR SD카드를 컴퓨터에 삽입하면 마운트 하면서 동시에 사진복사 스크립트도 돌리고 싶은데 혹시 프로토카오스님께서 올려주신 스크립트를 수정해서 해볼 수는 없을까요?[/quote:rlnpy93q]

가능합니다.
먼저 sudo udevadm test /block/sda 머 이런식으로 해서 udev변수들을 확인하신 후
해당 장치에 고유하게 사용될 수 있는 변수를 사용하도록 *.rules에 추가해주시거나
해당 장치 유형에 맞는 변수를 선택하신 후, *.rules에 추가해주시고,
스크립트에서 해당장치를 고유하게 인식할 수 있는 변수를 판별하시면 됩니다.
어자피 SD카드도 보통 usb종류일테니,
스크립트만 변경하셔서, udevadm으로 확인한 변수들 중 적당한 것으로,
장치를 판별하시면 됩니다.

스크립트를 열심히 뜯어보고 있습니다.

이걸 잘 활용하면 SD카드 삽입시 자동으로 사진 복사를 할 수 있도록 수정해볼 수 있을거 같네요.

실은 이 방법을 이전부터 찾아왔었습니다. 이전에 한번 답변을 해주셨는데…

그때는 주신 답변을 활용할 줄을 몰라 생각을 접었었습니다.

[url:1yyjomlb]http://ubuntu.or.kr/viewtopic.php?p=101076[/url:1yyjomlb]

이번에는 작동을 잘 하네요.

그런데 신기한건 SD카드에만 반응을 하고 USB 메모리 스틱으로는 반응을 하지 않아요.

다른 변수를 *.rules에 추가시켜야 할까요?

sudo udevadm test /block/sda 머 이런식으로 해서 udev변수들을 확인해보세요.
SUBSYSTEMS가 usb가 아니라, scsi 등으로 되어 있을지도 모릅니다.
OR조건을 걸때에는 | 를 사용할 수 있을 것입니다.
예를 들어,
KERNELS=="sd*", SUBSYSTEMS=="usb|scsi", DRIVERS=="sd" 이런 식으로 말이죠.
조건은 위의 KENRELS,SUBSYSTEMS,DRIVERS 를 가지고 판단하게 됩니다.
조건판별은 == 혹은 != 로 판별합니다.

udev룰에 대해서 알고 싶으시다면 아래 주소를 참조하세요.
[url:3s7k6akm]http://reactivated.net/writing_udev_rules.html[/url:3s7k6akm]

[quote="protochaos":5abmwc7n]sudo udevadm test /block/sda 머 이런식으로 해서 udev변수들을 확인해보세요.
SUBSYSTEMS가 usb가 아니라, scsi 등으로 되어 있을지도 모릅니다.
OR조건을 걸때에는 | 를 사용할 수 있을 것입니다.
예를 들어,
KERNELS=="sd*", SUBSYSTEMS=="usb|scsi", DRIVERS=="sd" 이런 식으로 말이죠.
조건은 위의 KENRELS,SUBSYSTEMS,DRIVERS 를 가지고 판단하게 됩니다.
[/quote:5abmwc7n]

[url:5abmwc7n]http://pastebin.com/rwjAjB56[/url:5abmwc7n]

usb 메모리스틱을 삽입시 마운트 된 위치를 기준으로 sudo udevadm test /block/sdb를 넣어보니
출력값에서 SUBSYSTEM(이하 SUBS*)이 block으로 잡혀있습니다. 허나 조건에서 SUBS*를 block으로 반영해줘도 작동을 하지는 않습니다(scsi에서도 마찬가지였습니다). 나머지 변수들은 udevadm에서 보이지 않지만 KERNELS는 sdb, sda 이런식으로 마운트 시 나타나는 위치로 이해가 됩니다. 허나 DRIVERS는 잘 이해가 되지 않습니다.

USB메모리 스틱에서는 작동을 하지 않으나 SD카드에서는 잘만 반응해주고 있어서…
카드 꼽으면 알아서 인식해서 알아서 사진 복사하는 스크립트로 오늘 연결했습니다. 카드 꼽으니 알아서 복사까지 해주네요. 덕분에 숙원(?)을 풀었습니다.^^

메모리스틱에서 까지 반응하는 방법이 나오면 private_key를 가지고선 sftp에 마운트를 해주는 스크립트로 연결도 해놔야 겠습니다.

앗 오류가 있군요.
ENV{ID_FS_LABEL_ENC}=="?*", ACTION=="remove", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/udev-usb-auto-unmount.sh %k"

==>
ENV{ID_FS_LABEL_ENC}=="?*", ACTION=="remove", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/udev-usb-auto-umount.sh %k"

파일명을 잘못 적어서 실행이 안되고 있었네요 ^^

[quote="protochaos":1o8y174b]
파일명을 잘못 적어서 실행이 안되고 있었네요 ^^[/quote:1o8y174b]

엇, 저는 적으실 때 실수로 적으신줄 알고 수정해서 반영해 버리고 말았네요… :o

혹시 sudo udevadm test /block/sda 외에
꼽혀있는 usb메모리스틱의 정보에 대해 조회할 수 있는 다른 명령어는 없을까요?

음 usb에 대한 일반적인 정보라면
hwinfo --disk
하시면 됩니다.