Inilah cara saya baru-baru ini melakukannya, dan saya cukup senang dengan pendekatan ini sekarang. Ini untuk Ubuntu 12,04 + gentoo, tapi saya kira ada distro, yang memungkinkan untuk menginstal udev dan autofs akan berfungsi.
Prasyarat: Anda harus menginstal udev + autofs.
Langkah 1)
Buat file "/etc/udev/rules.d/90-usbsd-auto.rules" berikut (tentu saja Anda dapat menggunakan nama apa pun asalkan diakhiri dengan ".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"
Apa yang dilakukan ini: Ini menciptakan dua symlink, satu untuk partisi perangkat penyimpanan USB di bawah "/ dev / usbdisks / <...>". Ini akan menggunakan label partisi penyimpanan USB atau nama kernel, jika tidak ada label. Symlink kedua akan ditautkan dari "/ media / usb / <...>" ke "/ media / autousb / <...>" ini dilakukan untuk dukungan automounter (lihat langkah 2).
Catatan: Saya awalnya tidak menggunakan aturan dengan variabel ID_FS_LABEL_ENC, karena ini berbahaya menurut saya. Apa yang terjadi jika Anda mencolokkan dua stik USB yang menggunakan label yang sama?
Tetapi poster itu secara khusus ingin menggunakan label disk USB, jadi saya memodifikasi aturannya.
Untuk memastikan udev membaca aturan ini, gunakan
sudo udevadm control --reload-rules
Dengan file aturan udev ini, semuanya diatur untuk mengotomatisasikan partisi perangkat penyimpanan USB. Perhatikan bahwa saat ini, perangkat TIDAK akan diotomatisasi (sengaja). Ini akan diautomatisasi setelah Anda menggunakannya
Langkah 2)
Setup autofs ke automount / media / autousb / <...>: Saya menambahkan baris berikut ke file "/etc/auto.master" saya (untuk Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Ini berarti bahwa AutoFS akan melepas perangkat setelah 60 detik tidak aktif. Anda mungkin ingin menggunakan lebih sedikit atau lebih, tergantung selera Anda.
Untuk Gentoo Anda harus memodifikasi "/etc/autofs/auto.master" sehingga masuk akal untuk menggunakannya
/media/autousb /etc/autofs/auto.usb --timeout=60
Sekarang saya membuat "auto.usb" dengan konten berikut:
#!/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 ini perlu dieksekusi, sehingga autofs menggunakan ini sebagai skrip (bash). Jadi misalnya
sudo chmod 0755 /etc/auto.usb
Apa yang dilakukan ini: Script ini akan memberi tahu AutoFS (/ usr / sbin / automount) bagaimana me-mount partisi perangkat penyimpanan usb.
Script pertama-tama akan menggunakan "/ sbin / blkid" untuk mencari tahu jenis sistem file apa yang ada di partisi.
Skrip kemudian akan memberikan opsi pemasangan kanan tergantung pada partisi perangkat.
Catatan: Saya menyertakan kode sampel untuk "vfat" (mungkin yang paling umum untuk stik usb), "ntfs" dan "xfs" sistem file. Tentu saja cukup mudah untuk memperluas ini untuk mendukung lebih banyak sistem file.
Langkah 3) Opsional ... Untuk "mengeluarkan" == unmount stick usb Anda (atau partisi pada stick usb Anda), buat skrip di bawah / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
Dengan skrip ini, Anda dapat menggunakan "sudo usbeject" untuk meng-unmount semua partisi perangkat USB yang terpasang (dengan mengatakan automount untuk meng-unmountnya).
Tentu saja Anda cukup memastikan bahwa partisi tidak digunakan di mana pun; automounter kemudian akan melepas partisi setelah batas waktu 60 detik ...
Trik sebenarnya di sini adalah dengan menggunakan symlink dari "/ media / usb" ke "/ media / autousb":
- Simbol "/ media / usb" akan dibuat oleh udev, memberikan pengguna gambaran umum sederhana tentang partisi perangkat penyimpanan usb yang ada
- AutoFS kemudian akan mengotomatiskan partisi sesuai permintaan jika Anda menggunakannya melalui / media / usb
- Dengan file "auto.usb" yang telah Anda skrip, Anda dapat mendukung segala jenis sistem file dan Anda juga dapat mendukung segala jenis skema penamaan.
- Pendekatan ini mendukung stik USB dengan beberapa partisi, walaupun partisi ini menggunakan tipe sistem file yang berbeda.