นี่คือวิธีที่ฉันทำเมื่อเร็ว ๆ นี้และฉันมีความสุขมากกับวิธีการนี้ในขณะนี้ นี่สำหรับ Ubuntu 12.04 + gentoo แต่ฉันเดาว่า distro ใด ๆ ที่อนุญาตให้ติดตั้ง 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"
สิ่งนี้ทำอะไร: มันสร้าง symlink สองตัวหนึ่งตัวสำหรับพาร์ติชันอุปกรณ์เก็บข้อมูล USB ภายใต้ "/ dev / usbdisks / <... >" มันจะใช้เลเบลของพาร์ติชันหน่วยเก็บข้อมูล USB หรือชื่อเคอร์เนลหากไม่มีเลเบล symlink ที่สองจะเชื่อมโยงจาก "/ media / usb / <... >" ถึง "/ media / autousb / <... >" สิ่งนี้ทำเพื่อการสนับสนุนของ automounter (ดูขั้นตอนที่ 2)
หมายเหตุ: เดิมฉันไม่ได้ใช้กฎกับตัวแปร ID_FS_LABEL_ENC เนื่องจากสิ่งนี้เป็นอันตรายในความคิดของฉัน จะเกิดอะไรขึ้นถ้าคุณเสียบ USB แท่งสองอันที่ใช้ฉลากเดียวกัน
แต่โปสเตอร์ต้องการใช้ฉลากของดิสก์ USB โดยเฉพาะดังนั้นฉันจึงปรับเปลี่ยนกฎตามนั้น
เพื่อให้แน่ใจว่า udev อ่านกฎเหล่านี้ใช้
sudo udevadm control --reload-rules
ด้วยไฟล์กฎ udev นี้ทุกอย่างได้รับการตั้งค่าให้ติดตั้งพาร์ติชันอุปกรณ์เก็บข้อมูล USB แบบอัตโนมัติ โปรดทราบว่าในตอนนี้อุปกรณ์จะไม่ถูกเมานท์อัตโนมัติ (โดยเจตนา) มันจะถูกนับอัตโนมัติเมื่อคุณใช้งานด้วย
ขั้นตอนที่ 2)
ตั้งค่า autofs เป็น automount / media / autousb / <... >: ฉันเพิ่มบรรทัดต่อไปนี้ในไฟล์ "/etc/auto.master" ของฉัน (สำหรับ Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
ซึ่งหมายความว่า AutoFS จะยกเลิกการต่อเชื่อมอุปกรณ์หลังจากไม่มีกิจกรรมใด ๆ เป็นเวลา 60 วินาที คุณอาจต้องการใช้น้อยหรือมากขึ้นอยู่กับรสนิยมของคุณ
สำหรับ Gentoo คุณต้องแก้ไข "/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 จึงใช้สคริปต์นี้เป็น (ทุบตี) ตัวอย่างเช่น
sudo chmod 0755 /etc/auto.usb
สิ่งนี้ทำอะไร: สคริปต์นี้จะบอก AutoFS (/ usr / sbin / automount) วิธีติดตั้งพาร์ติชันอุปกรณ์เก็บข้อมูล usb
สคริปต์จะใช้ "/ sbin / blkid" ก่อนเพื่อค้นหาว่าระบบไฟล์ประเภทใดอยู่ในพาร์ติชัน
สคริปต์จะมีตัวเลือกการเมาท์ที่ถูกต้องขึ้นอยู่กับพาร์ติชันอุปกรณ์
หมายเหตุ: ฉันรวมรหัสตัวอย่างสำหรับ "vfat" (อาจเป็นเรื่องธรรมดาสำหรับ usb sticks), "ntfs" และ "xfs" ระบบไฟล์ แน่นอนว่ามันเป็นการขยายที่ง่ายมากเพื่อรองรับระบบไฟล์ที่มากขึ้น
ขั้นตอนที่ 3) ตัวเลือก ... ในการ "นำออก" == เลิกเมานท์ usb ของคุณ (หรือพาร์ติชันบนแท่ง usb ของคุณ) สร้างสคริปต์ภายใต้ / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
ด้วยสคริปต์นี้คุณอาจใช้ "sudo usbeject" เพื่อ unmount พาร์ติชันอุปกรณ์ USB ที่เมาท์ทั้งหมด (โดยบอกให้ automount ยกเลิกการเมานท์)
แน่นอนคุณสามารถตรวจสอบให้แน่ใจว่าพาร์ทิชันไม่ได้ใช้ทุกที่ automounter จะยกเลิกการต่อเชื่อมพาร์ติชั่นหลังจากหมดเวลา 60 วินาที ...
เคล็ดลับที่แท้จริงที่นี่คือการใช้ symlink จาก "/ media / usb" ถึง "/ media / autousb":
- ลิงก์ "/ media / usb" จะถูกสร้างโดย udev ทำให้ผู้ใช้มีภาพรวมอย่างง่าย ๆ ซึ่งมีพาร์ทิชันอุปกรณ์เก็บข้อมูล usb
- AutoFS จะทำการติดตั้งพาร์ติชั่นอัตโนมัติตามต้องการถ้าคุณใช้มันผ่าน / media / usb
- ด้วยไฟล์ "auto.usb" สคริปต์คุณอาจสนับสนุนระบบไฟล์ทุกประเภทและนอกจากนี้คุณยังสามารถรองรับรูปแบบการตั้งชื่อประเภทใดก็ได้
- วิธีนี้รองรับ USB sticks ที่มีหลายพาร์ติชันแม้ว่าพาร์ทิชันเหล่านี้จะใช้ระบบไฟล์ประเภทต่างกัน