Pertanyaan ini mirip, tapi agak kebalikan dari yang saya inginkan. Saya ingin drive USB eksternal dipasang secara otomatis saat boot, tanpa ada yang masuk, ke lokasi seperti /media/<label>
.
Saya tidak ingin harus memasukkan semua data ke fstab, sebagian karena itu membosankan dan menjengkelkan, tetapi kebanyakan karena saya tidak dapat memprediksi apa yang akan saya tancapkan ke dalamnya atau bagaimana partisi akan berubah di masa depan.
Saya ingin drive dapat diakses untuk hal-hal seperti GKG , dan tersedia ketika saya masuk dengan SSH. gnome-mount
tampaknya hanya me-mount hal-hal ketika Anda masuk secara lokal ke sesi grafis Gnome.
/usr/local/sbin/udev-automounter.sh mount %k
seharusnya/usr/local/sbin/udev-automounter.sh %k
. Maaf.\x20
. jadi tidak cantik, tapi itu akan berhasil. udev tidak menangani label-dengan-spasi dengan baik, tetapi ada opsi lain yang menggunakan garis bawah alih-alih\x20
(jadi setidaknya terlihat bagus). Sepertinya penanganan ruang harus masuk ke shellscripts.Jawaban:
vol_id
perintah usang .vol_id
telah digantikan olehblkid
. Untuk memperbaiki skrip, ganti "vol_id" dengan "blkid -o udev" diudev-auto-mount.sh
skrip.Saya telah membenturkan kepala saya di sekitar ini untuk sementara waktu sekarang, dan saya pikir saya telah menemukan solusi yang berhasil. Ini dikembangkan dan diuji pada sistem berbasis Debian, sehingga harus bekerja di Ubuntu. Saya akan menunjukkan asumsi yang dibuatnya sehingga dapat disesuaikan dengan sistem lain juga.
/media/LABEL
direktori untuk memasang perangkat.gksudo
atau serupa.Saya belum menguji ini pada boot sistem, tetapi satu-satunya alasan saya dapat melihat bahwa itu mungkin tidak berhasil adalah jika mencoba untuk memasang drive USB sebelum sistem siap untuk mount. Jika itu masalahnya, Anda mungkin perlu satu tweak tambahan untuk skrip mount. (Saya memeriksa dengan ServerFault untuk melihat apakah ada saran, tetapi tidak banyak minat di sana.)
Kalau begitu, ke sana.
Referensi UDEV:
Latar Belakang (UDEV? Whuzzat?)
UDEV adalah sistem hotplug kernel. Itulah yang secara otomatis mengkonfigurasi perangkat yang tepat dan symlink perangkat (mis.
/dev/disk/by-label/<LABEL>
), Baik pada saat boot maupun untuk perangkat yang ditambahkan saat sistem sedang berjalan.D-Bus dan HAL digunakan untuk mengirim acara perangkat keras ke pendengar seperti Lingkungan Desktop. Jadi, ketika Anda masuk ke GNOME dan memasukkan CD atau mencolokkan drive USB, peristiwa itu mengikuti rantai ini:
Dan presto, drive Anda dipasang. Tetapi dalam sistem tanpa kepala, kami tidak ingin harus masuk untuk mendapatkan manfaat dari penghitungan otomatis.
Aturan Udev
Karena UDEV memungkinkan kami menulis aturan dan menjalankan program dengan penyisipan perangkat, ini adalah pilihan yang ideal. Kita akan mengambil keuntungan dari aturan Debian / Ubuntu yang ada, biarkan mereka mengatur
/dev/disk/by-label/<LABEL>
symlink untuk kita, dan menambahkan aturan lain yang akan memasang perangkat untuk kita.Aturan UDEV disimpan di
/etc/udev/rules.d
(dan/lib/udev/rules.d
di Karmic), dan diproses dalam urutan numerik. File apa pun yang tidak dimulai dengan nomor akan diproses setelah file bernomor. Di sistem saya, aturan HAL ada dalam file yang dipanggil90-hal.rules
, jadi saya memasukkan aturan saya89-local.rules
sehingga mereka diproses sebelum mereka sampai ke HAL. Terutama, Anda perlu memastikan aturan ini terjadi setelah60-persistent-storage.rules
.local.rules
mungkin cukup baik.Masukkan ini ke file aturan baru Anda:
Pastikan tidak ada spasi setelah
\
, hanya anewline
(\n
).Ubah
SUBSYSTEMS=="usb"
keSUBSYSTEMS=="usb|ieee1394"
untuk dukungan Firewire.Jika Anda ingin perangkat selalu dimiliki oleh pengguna tertentu, tambahkan
OWNER="username"
klausa. Jika Anda hanya perlu file yang dimiliki oleh pengguna tertentu, ubah skrip pemasangan sebagai gantinya.Membaca Aturan
Ini menambahkan program untuk dijalankan ke daftar program perangkat untuk dijalankan. Ini mengidentifikasi perangkat partisi USB dengan
<LABEL>
, kemudian meneruskan informasi ini ke skrip yang melakukan mount. Secara khusus, aturan ini cocok:ENV{ID_FS_LABEL_ENC}=="?*"
- variabel lingkungan yang ditetapkan oleh aturan sistem sebelumnya. Tidak ada untuk sistem non-file, jadi itu sebabnya kami memeriksanya. Kami sebenarnya ingin menggunakanID_FS_LABEL
untuk mount point, tetapi saya belum meyakinkan UDEV untuk menghindarinya bagi saya, jadi kami akan membiarkan skrip mount menangani hal itu.Variabel lingkungan ini dan lainnya diperoleh oleh udev menggunakan
vol_id
perintah ( usang ). Ini adalah alat yang berguna untuk melihat detail cepat yang bagus di partisi:ACTION=="add"
- hanyaadd
acara pertandingan ...SUBSYSTEMS=="usb"
- hanya cocok dengan perangkat yang ada di bus USB. Kami menggunakan diSUBSYSTEMS
sini karena ini cocok dengan orangtua perangkat kami; perangkat yang kami minati sebenarnya adalah SUBSYSTEM == "scsi". Menyesuaikan dengan perangkat USB induk menghindari penambahan program kami ke drive internal.RUN+="..."
- bukan kecocokan, tetapi tindakan: tambahkan program ini ke daftar program yang akan dijalankan. Dalam argumen program,%k
diperluas ke nama perangkat (misalnyasdc1
, tidak/dev/sdc1
) dan$env{FOO}
mendapatkan konten variabel lingkungan FOO.Menguji Aturannya
Tautan referensi pertama (di atas) adalah tutorial UDEV yang luar biasa, tetapi sedikit kedaluwarsa. Program yang dijalankan untuk menguji aturan Anda (
udevtest
khususnya) telah digantikan olehudevadm
utilitas catch-all .Setelah Anda menambahkan aturan, masukkan perangkat Anda. Berikan waktu beberapa detik, lalu periksa untuk melihat perangkat apa yang ditugaskan kepadanya:
Jika drive Anda yang dapat dihapus berisi
label_Baz
, itu ada di perangkatsdc1
. Jalankan ini dan lihat output menjelang akhir:Cari nama skrip dari
RUN+=
aturan kami di beberapa baris terakhir (ke-3 dari bawah dalam contoh ini). Anda dapat melihat argumen yang akan digunakan untuk perangkat ini. Anda dapat menjalankan perintah itu sekarang untuk memeriksa apakah argumennya benar; jika berfungsi pada commandline Anda, itu akan bekerja secara otomatis ketika perangkat dimasukkan.Anda juga dapat memantau acara UDEV secara realtime: lari
sudo udevadm monitor
(lihatman udevadm
detail tentang sakelar). Kemudian cukup colokkan perangkat baru dan saksikan acara bergulir. (Mungkin berlebihan kecuali kamu benar-benar detail tingkat rendah ...)Muat Ulang Aturan
Setelah Anda memverifikasi aturan tersebut dibaca dengan benar, Anda perlu memberitahu UDEV untuk memuat ulang aturannya sehingga yang baru berlaku. Gunakan salah satu dari metode ini (jika yang pertama tidak berhasil, yang kedua harus ... tetapi coba yang pertama):
Lari
sudo udevadm control --reload-rules
Lari
sudo /etc/init.d/udev reload
reboot
Naskah! Sebenarnya, 2 Script ...
Ini skrip pertama. Karena program yang kita jalankan perlu diselesaikan dengan cepat, ini hanya memutar script kedua di latar belakang. Masukkan ini
/usr/local/sbin/udev-automounter.sh
:Ini skrip kedua. Ini melakukan sedikit lebih banyak input input. Menempatkan ini dalam
/usr/local/sbin/udev-auto-mount.sh
. Anda mungkin ingin mengubah opsi pemasangan di bawah. Script ini sekarang menangani menemukan LABEL partisi sendiri; UDEV hanya mengirim nama PERANGKAT.Jika ada masalah saat memasang drive saat boot , Anda dapat menaruh banyak waktu
sleep 60
dalam skrip ini, untuk memberi waktu bagi sistem untuk melakukan semuanya sebelum skrip mencoba memasang drive.Saya telah memberikan saran di komentar untuk cara memeriksa (jalankan
ps
untuk melihat apakah server web sedang berjalan), tetapi Anda ingin mengubahnya untuk sistem Anda. Saya pikir sebagian besar server jaringan yang mungkin Anda gunakan akan mencukupi untuk tujuan ini - nfsd, smbd, apache, dll. Risikonya, tentu saja, skrip mount akan gagal jika layanan tidak berjalan, jadi mungkin menguji Keberadaan file tertentu akan menjadi solusi yang lebih baik.Skrip Pembersihan Bonus Super!
Satu lagi skrip. Yang dilakukan adalah melepas perangkat dan menghapus direktori mountpoint. Diasumsikan memiliki privs untuk melakukan ini, jadi Anda harus menjalankannya
sudo
. Script ini sekarang mengambil titik mount penuh pada commandline, misalnya:Masukkan ini
/usr/local/sbin/udev-unmounter.sh
:sumber
Satu opsi terakhir yang disarankan orang lain di internet adalah
ivman
, tetapi tampaknya bergantung padapmount
, yang sudah Anda nyatakan tidak berfungsi.pmount
ditinggalkan danivman
hampir sama.Penggantinya
ivman
adalahhalevt
, dan tersedia di Karmic. Ini adalah implementasi ulangivman
(baca: "dipertahankan" dan "tidak tergantung pada pmount"). Paket tidak tersedia di Jaunty, meskipun Anda mungkin bisa membuatnya sendiri jika Anda tidak berencana untuk meningkatkan.Kedua alat ini berada di atas lapisan DBus dan HAL dan merespons peristiwa dari mereka. Tampaknya keduanya dapat berjalan baik sebagai daemon sistem atau sebagai pengelola mount sesi pengguna (ala Gnome-VFS) -
/etc/defaults/{ivman,halevt}
file-file tersebut bertanggung jawab atas pengaturan sistem.Berikut adalah beberapa instruksi untuk mengubah
ivman
menggunakan/media/<LABEL>
mountpoints. Kemungkinanhalevt
memiliki cara yang lebih sederhana untuk melakukannya, tetapi mungkin mereka akan membantu Anda menemukan jawaban.Bekerja dengan HALEVT
Pembaruan : Demi mendapatkan pemasangan CD otomatis, yang jawaban UDEV saya tidak berikan, saya melihat lebih dalam
halevt
. Saya menemukan posting blog ini yang membantu menjelaskan banyak tentang prosesnya. Saya memang harus mengkompilasihalevt
paket saya sendiri untuk Debian Lenny (untungnya semua dependensi ada di bagian lenny-backports). Setelah diinstal, prosesnya sebagian besar tidak mengerikan:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(lihat di bawah; sumber )/etc/hal/fdi/policy/preferences.fdi
(lihat di bawah)eject.hal
skrip dari blogpost di atas, modifikasi, dan simpan/usr/local/bin
./etc/halevt/halevt.xml
Jika Anda perlu me-restart daemon HAL dan HALEVT untuk memeriksa konfigurasi baru Anda, gunakan ini untuk mendapatkannya dalam urutan yang benar:
Langkah 1
Periksa itu
START_DAEMON=yes
di/etc/default/halevt
.Langkah 2
Di
/etc/PolicyKit/PolicyKit.conf
, tambahkan ini di dalam<config></config>
bagian:Langkah 3
Di
/etc/hal/fdi/policy/preferences.fdi
, tambahkan ini di dalam bagian `:Langkah 4
Naskahnya bagus tetapi perlu dijalankan
/bin/bash
; beberapa sistem sebenarnya dapat digunakan/bin/dash
saat/bin/sh
dipanggil. Jadi, ubah baris teratas dalam skrip untuk memastikan Anda mendapatkan yang benar:Langkah 5
Ini bagian yang menyenangkan. Sistem Anda mungkin sudah menyediakan dasar
/etc/halevt/halevt.xml
, jadi Anda harus menyesuaikan ini untuk Anda gunakan sendiri. Dalam kasus saya, sistem saya sudah menyediakan pemasangan dasar removeable, tetapi saya harus menambahkan dukungan untuk pemasangan CDROM dan tombol eject.Posting blog yang saya sebutkan memiliki contoh konfigurasi XML yang baik untuk melihat tweak Anda sendiri. Ini sebagian besar tentang menyiapkan pengganti gnome-mount untuk lingkungan penulis
fluxbox
, jadi XML contohnya melakukan lebih dari yang Anda inginkan, tapi ini cara yang bagus untuk merasakan apa yang dapat Anda lakukan. Ada juga beberapa contoh bagus di/usr/share/doc/halevt/examples
.Saya juga harus berlari
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
sebelum semuanya berjalan.Inilah tambahan saya untuk membuat pekerjaan CD / DVD otomatis:
Langkah 6
Setelah sistem halevt-daemon Anda berfungsi, Anda harus menonaktifkannya saat Anda masuk ke GNOME, dan mulai lagi ketika Anda logout. (Lihat jawaban saya untuk pertanyaan ini untuk manajer login non-GDM.) Hal ini bersifat teoritis karena saya tidak menggunakannya, tetapi harus berfungsi.
Di
/etc/gdm/PreSession/Default
, tambahkan ini untuk menghentikan sistem halevt-daemon:Di
/etc/gdm/PostSession/Default
, tambahkan ini untuk me-restart sistem halevt-daemon:sumber
Seiring berjalannya waktu, solusi yang lebih mudah muncul.
Solusi ini bergantung pada paket perangkat lunak udevil yang ditulis untuk tujuan ini dan tidak perlu bermain-main dengan aturan udev. Mungkin lebih disukai (untuk pengguna baru dan lama) sebagai solusi langsung.
The
devmon
Script dari udevil melakukan semua keajaiban sementara hanya tergantung pada udev dan fasih. Bekerja hampir di luar kotak tanpa memerlukan konfigurasi awal.Semua yang telah saya lakukan di workstation saya adalah memanggil devmon dari
rc.local
seperti ini:devmon 2>&1 >> /var/log/devmon &
Untuk kenyamanan Anda, Anda mungkin ingin menanamkan ini ke skrip init daripada
rc.local
menggunakan alat otomatis sepertipleaserun
untuk membuatnya: https://unix.stackexchange.com/ a / 124609/42673Setelah menjalankannya, penyimpanan yang saya pasang diperiksa (mencari partisi dan jika ditemukan melihat label sistem file mereka) kemudian dipasang ke
/media/FILESYSTEM_LABEL
.Tidak bisa membayangkan sesuatu yang lebih sederhana dari itu kecuali mungkin bahwa (dalam) systemd terkenal untuk menggabungkan fungsi ini di beberapa titik di masa depan.
Sekilas tentang udevil ( github.io/udevil )
Script: devmon ( igurublog / script-devmon )
sumber
jawaban quack quixote tidak berfungsi di Ubuntu Lucid Lynx (10.04) - tidak ada
/sbin/vol_id
perintah.Daripada bersikap mewah dan menggunakan udev, masukkan ini ke /etc/rc.local Anda dan lakukan:
sumber
Untuk sistem berbasis Debian (misalnya Ubuntu dll) ada paket usbmount yang secara otomatis memasang drive USB untuk Anda. Ini pada dasarnya menggunakan pendekatan berbasis udev seperti yang sudah diuraikan - hanya itu hanya menginstal paket sederhana. Tampaknya penulis asli paket telah kehabisan tenaga tetapi Ubuntu / Debian tampaknya masih mempertahankannya (saya kira itu tidak serumit itu) - jadi masih tersedia dalam rilis terbaru.
Script yang terinstal dapat dikonfigurasi (/etc/usbmount/usbmount.conf) untuk memberikan poin mount yang sesuai.
sumber
Untuk menghapus instruksi hebat quack quixote untuk dihapus:
Tambahkan baris berikut ke file aturan udev yang Anda buat sebelumnya (/etc/udev/rules.d) "
Selanjutnya buat skrip berikut dan chmod dapat dieksekusi (/usr/local/sbin/udev-autounmounter.sh) dengan konten berikut:
Akhirnya skrip unmount itu sendiri (udev-auto-unmount.sh):
Jadi dengan instruksi lain, direktori akan otomatis muncul dan hilang pada acara udev.
sumber
if [ -n "$device_is_mounted" ]; then
seharusnya begituif [ -z "${MOUNTPT}" ]; then
, bukan?Anda mungkin ingin mencoba Pysdm
sumber
Anda dapat mencoba memasukkan
su username -c gnome-volume-manager
/etc/rc.local. Mungkin cukup dengan menjalankan gnome-volume-manager.Sunting: Tampaknya gnome-volume-manager tidak lagi menjadi bagian dari distribusi default, bahkan pada desktop Ubuntu.
Namun, mungkin jika Anda menginstalnya, masih akan berfungsi. Ini patut dicoba. Jika tidak berhasil, hapus lagi.
Ada juga
usbmount
paket, yang melakukan apa yang Anda inginkan, tetapi mungkin mengganggu penghitungan otomatis.sumber
Adendum saya yang diedit untuk solusi berbasis udev quack quixote ditolak, jadi saya akan meletakkannya di sini. Silakan merujuk ke posnya terlebih dahulu.
Pertama-tama, jika Anda ingin aturan udev Anda bertindak ketika perangkat apa pun terpasang melalui subsistem SCSI (yang mencakup USB, FireWire, dan eSATA), ubah kecocokan SUBSYSTEMS dalam aturan udev
SUBSYSTEMS=="scsi"
.Namun perlu diingat bahwa ini akan secara otomatis me-mount apa saja, termasuk drive internal jika Anda menyumbatnya saat sistem sedang berjalan, jadi ini mungkin bukan yang Anda inginkan.
Kedua, ini adalah skrip yang saya gunakan yang menggantikan semua skrip dalam posting itu. Ini juga secara otomatis membersihkan mountpoint yang dibuat di / media / segera setelah perangkat blok yang dipasang dihapus - tidak perlu intervensi manual. Lebih lanjut, alih-alih memanggil skrip yang berbeda untuk dijalankan di latar belakang, skrip menempatkan dirinya di latar belakang ketika skrip tidak dieksekusi dari terminal (misalnya ketika dijalankan melalui udev).
Menggunakan menunggu tidak menunggu untuk menunggu sampai perangkat yang dipasang menghilang, dan kemudian menghapus direktori yang dibuatnya. Oleh karena itu, Anda perlu menginstal alat yang tidak sah pada sistem Anda. Pada distro berbasis Debian (termasuk Ubuntu),
sudo apt-get install inotify-tools
sudah cukup.Anda akan perhatikan bahwa saya memasang perangkat tanpa sinkronisasi, dan hanya baca. Itu hanya karena 99% dari waktu, kasus penggunaan saya membaca dari drive eksternal, dan setiap kali saya perlu menulis, saya akan tetap aktif di server, dan dapat dengan mudah mengeluarkan
mount -o remount,rw <mountpoint>
perintah. Edit sesuai dengan kebutuhan Anda :)sumber
halevt
tampaknya tidak menjadiapt-get
paket yang mampu saat ini untuk versi modern.Coba konfigurasikan melalui mountmanager, sehingga Anda tidak harus memasukkan data secara manual.
Itu harus menjadi bagian dari repositori ubuntu.
sumber
Jika Anda hanya memiliki satu drive yang dipasang pada satu waktu, Anda dapat mengedit ini ke dalam
/etc/fstab
file Anda . Sesuatu di sepanjang garis:Ini harus memasangnya saat boot, dan membuatnya dapat diakses oleh siapa saja dengan perms. Jika Anda memiliki lebih dari satu drive, Anda masih dapat melakukan ini dengan:
sumber