Saran yang diperlukan untuk udev, udisk, autofs, pengaturan notifikasi untuk solusi automounting lengkap di Linux

9

Melanjutkan Automounting ke perangkat yang terpasang di linux , yang membuat semuanya agak mendasar. Menjalankan Gentoo, saya mengotomatiskan kombinasi perangkat lokal dan jaringan pada laptop saya dengan autofs-5.0.4-r5. Melakukan autofs saja memberi saya beberapa keluhan:

  • Saya harus menentukan nama untuk titik mount per perangkat, tetapi kadang-kadang setelah me-reboot pembaca kartu MMC saya beralih posisi dengan USB stick bootable saya
  • Saya ingin mountpoints berbasis LABEL otomatis muncul, autofs saja AFAIK tidak bisa melakukan itu

Yang pasti mampu dilakukan oleh udev dan udisks. Tapi:

  • Saya tidak ingin sistem file dipasang secara otomatis saat menghubungkan perangkat, cukup beri saya ghost mount point bernama LABEL

Pemasangan sistem file yang sebenarnya seharusnya hanya terjadi pada akses pertama ke mountpoint, seperti halnya ghosting autofs yang berfungsi. Ini harus mengurangi risiko mengotori sistem file oleh perangkat yang dicabut secara tidak sengaja, sambil tetap memberikan aksesibilitas yang bagus.

Selain itu, saya dapat menggunakan mengetahui setiap saat apa yang terjadi, di DE saya.

  • Apakah ada aplikasi system tray yang mampu menunjukkan status semua automount yaitu hijau = tidak ada yang dipasang, merah = sesuatu sudah terpasang?
  • Apakah ada cara agnostik distribusi untuk menyediakan filesystem (tidak) mount notifikasi operasi, misalnya menggunakan notify-send? Bagaimana dengan spesifik Gentoo, itu juga cocok untuk saya. Scripting udev tidak membantu dengan NFS dan CIFS, bukan?

Kombo ini harus menjadi pengaturan automount utama, atau apakah saya melewatkan sesuatu?

lkraav
sumber
Saya sudah bersama Gnome sekarang selama beberapa tahun terakhir, jadi menggulir sendiri tidak lagi relevan.
lkraav

Jawaban:

4

Ini semua layak dilakukan udev. Silahkan lihat pada UAM , yang tampaknya untuk mengatasi sebagian besar masalah yang telah disebutkan, namun sebenarnya tidak me-mount secara otomatis. Jika suka, Anda bisa memanfaatkan kemampuan hebat yang disediakannya, tetapi memodifikasinya sehingga media tidak dipasang secara otomatis. Anda juga dapat menghubungi penulis dan menyarankan pendekatan pemasangan non-otomatis Anda sebagai fitur baru. Sementara itu, lihatlah kemampuannya:

  • Ini bekerja di atas udev, menjadikannya DE-independen dan berbasis acara. (Ini juga menyarankan solusi untuk media optik yang mungkin tidak terlihat oleh udev.)
  • Memungkinkan Anda menentukan MOUNTPOINT_TEMPLATESyang dapat memecahkan masalah penamaan yang telah Anda sebutkan dalam sejumlah cara khusus (lihat uam.conf ), berpotensi juga menggunakan LABEL(seperti yang Anda inginkan)
  • Mekanisme pemberitahuan didukung, Anda hanya perlu menyesuaikannya dengan kebutuhan DE spesifik Anda.
  • Tampaknya memiliki desain yang jelas, memungkinkan Anda dengan mudah menemukan di mana, kapan dan bagaimana setiap tindakan dipicu.
rozcietrzewiacz
sumber
Hari ini saya dirujuk ke tinymount di #awesome, mereka yang tertarik dengan topik ini mungkin harus memeriksanya
lkraav
Sementara itu, saya lebih sering menggunakan bashmount.
lkraav
2

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.
Ingo Blackman
sumber