İşte son zamanlarda böyle yaptım ve şimdi bu yaklaşımdan oldukça memnunum. Bu Ubuntu 12.04 + gentoo için, ama udev ve autofs yüklemesine izin veren herhangi bir dağıtımın çalışacağını tahmin ediyorum.
Önkoşullar: udev + autofs kurmuş olmanız gerekir.
Aşama 1)
Aşağıdaki "/etc/udev/rules.d/90-usbsd-auto.rules" dosyasını oluşturun (elbette ".rules" ile bittiği sürece herhangi bir isim kullanabilirsiniz). :
# 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"
Bu ne işe yarar: Biri "/ dev / usbdisks / <...>" altındaki USB depolama aygıtı bölümü için iki simge oluşturur. USB depolama bölümünün etiketini veya etiket yoksa çekirdek adını kullanır. İkinci sembolik bağlantı "/ media / usb / <...>" ile "/ media / autousb / <...>" arasına bağlanacaktır. Bu, otomatik sayaç desteği için yapılır (bkz. 2. adım).
Not: Bence kurallar tehlikeli olduğu için ID_FS_LABEL_ENC değişkenleriyle kuralları kullanmadım. Aynı etiketi kullanan iki USB çubuğu takarsanız ne olur?
Ancak poster özellikle USB disk etiketini kullanmak istedi, bu yüzden kuralları buna göre değiştirdim.
Udev'in bu kuralları okuduğundan emin olmak için şunu kullanın:
sudo udevadm control --reload-rules
Bu udev kural dosyası ile her şey USB depolama cihazı bölümünü otomatikleştirmek için ayarlanır. Ancak şu anda cihazın otomatik olarak (Kasıtlı olarak) DEĞİLDİR. İle kullandıktan sonra otomatik olarak sayılacaktır
Adım 2)
Autofs / media / autousb / <...> için autofs kurulumu: "/etc/auto.master" dosyama aşağıdaki satırı ekledim (Ubuntu 12.04 için):
/media/autousb /etc/auto.usb --timeout=60
Bu, AutoFS'nin 60 saniye boyunca herhangi bir işlem yapılmadığında cihazın bağlantısını keseceği anlamına gelir. Zevkinize bağlı olarak daha az veya daha fazla kullanmak isteyebilirsiniz.
Gentoo için "/etc/autofs/auto.master" adresini değiştirmeniz gerekir, böylece kullanımı mantıklıdır
/media/autousb /etc/autofs/auto.usb --timeout=60
Şimdi aşağıdaki içeriğe sahip "auto.usb" oluşturdum:
#!/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
Bu auto.usb dosyasının yürütülebilir olması gerekir, böylece autofs bunu bir (bash) komut dosyası olarak kullanır. Yani mesela
sudo chmod 0755 /etc/auto.usb
Bu ne işe yarar: Bu komut dosyası, AutoFS'ye (/ usr / sbin / automount) usb depolama aygıtı bölümünün nasıl takılacağını söyleyecektir.
Komut dosyası, bölümde ne tür bir dosya sisteminin olduğunu bulmak için önce "/ sbin / blkid" komutunu kullanır.
Komut dosyası daha sonra aygıt bölümüne bağlı olarak doğru bağlama seçeneklerini sağlar.
Not: "vfat" (muhtemelen usb bellekler için en yaygın), "ntfs" ve "xfs" dosya sistemleri için örnek kod ekledim. Elbette bunu daha fazla dosya sistemini desteklemek için genişletmek oldukça kolaydır.
Adım 3) İsteğe bağlı ... USB çubuklarınızı (veya usb çubuğunuzdaki bölümleri) "çıkartmak" == bağlantısını kesmek için / sbin / usbeject altında bir komut dosyası oluşturun:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
Bu komut dosyasıyla, tüm takılı USB aygıt bölümlerini çıkarmak için "sudo usbeject" kullanabilirsiniz (automount'a bağlantısını kesmesini söyleyerek).
Tabii ki bölümün hiçbir yerde kullanılmadığından emin olabilirsiniz; automounter, 60 saniyelik zaman aşımından sonra bölümün bağlantısını kesecek ...
Buradaki asıl püf noktası "/ media / usb" den "/ media / autousb" e sembolik link kullanmaktır:
- "/ Media / usb" simgeleri udev tarafından oluşturulur ve kullanıcıya hangi usb depolama aygıtı bölümlerinin bulunduğunu gösteren basit bir genel bakış sunar.
- Daha sonra / media / usb üzerinden kullanırsanız, AutoFS isteğe bağlı bölümü otomatik olarak yeniden numaralandırır
- Komut dosyası "auto.usb" dosyası ile her türlü dosya sistemini destekleyebilir ve ayrıca her türlü adlandırma düzenini de destekleyebilirsiniz.
- Bu yaklaşım, bu bölümler farklı dosya sistemi türleri kullanıyor olsalar bile, çoklu bölümlü USB çubukları destekler.