Kami memperbarui server kami dari distro yang sangat ketinggalan zaman ke sistem berbasis Debian Jessie modern, termasuk lightdm / xfce, dan tentu saja systemd (dan udisks2). Satu hal yang menonjol adalah mengotomatiskan drive USB. Kami biasa melakukannya dengan beberapa aturan udev. Aturan lama hampir masih berfungsi - titik mount dapat dibuat dan drive dipasang dengan baik, tetapi setelah beberapa detik systemd melakukan sesuatu yang merusak mount, sehingga upaya akses selanjutnya menghasilkan kesalahan "Transport endpoint tidak terhubung".
Secara manual memasang drive melalui baris perintah berfungsi dengan baik. Begitu juga dengan membiarkan pengelola file (thunar dan thunar-volman, yang pada gilirannya menggunakan udisks2). Tapi itu bukan opsi yang layak - kebanyakan sistem ini berjalan tanpa kepala, jadi thunar biasanya tidak berjalan. Kita harus dapat menyambungkan disk drive untuk cadangan berbasis cron tanpa pengawasan.
Saya berpikir bahwa memodifikasi skrip udev untuk menelurkan pekerjaan terpisah yang menunggu beberapa detik sebelum melakukan mount mungkin melakukan trik, tetapi systemd tampaknya berusaha keras untuk mencegah ini - entah bagaimana masih menunggu pekerjaan yang terpisah untuk menyelesaikan sebelum melanjutkan.
Mungkin memiliki skrip udev menggelitik udisks2 entah bagaimana adalah pendekatan yang tepat? Saya bingung, jadi saran apa pun sangat dihargai.
sumber
Jawaban:
Setelah beberapa kesalahan dimulai saya menemukan ini. Kuncinya adalah menambahkan layanan unit systemd antara udev dan skrip pemasangan.
(Sebagai catatan, saya tidak bisa mendapatkan ini bekerja menggunakan udisks2 (melalui sesuatu seperti
udisksctl mount -b /dev/sdb1
) dipanggil baik langsung dari aturan udev atau dari file unit systemd. Tampaknya ada kondisi lomba dan node perangkat tidak cukup siap , mengakibatkanError looking up object for device /dev/sdb1
. Sayangnya, karena udisks2 dapat mengatasi semua kekacauan titik mount ...)Pengangkatan berat dilakukan oleh skrip shell, yang menangani pembuatan dan penghapusan titik pemasangan, dan pemasangan dan pelepasan drive.
/usr/local/bin/usb-mount.sh
Script, pada gilirannya, dipanggil oleh file unit systemd. Kami menggunakan sintaks nama file "@" sehingga kami dapat meneruskan nama perangkat sebagai argumen.
/etc/systemd/system/[email protected]
Akhirnya, beberapa aturan udev memulai dan menghentikan layanan unit systemd pada hotplug / cabut:
/etc/udev/rules.d/99-local.rules
Ini sepertinya berhasil! Beberapa perintah yang berguna untuk men-debug hal-hal seperti ini:
udevadm control -l debug
mengaktifkan log masuk/var/log/syslog
sehingga Anda dapat melihat apa yang terjadi.udevadm control --reload-rules
setelah Anda memodifikasi file dalam aturan.d dir (mungkin tidak perlu, tetapi tidak ada salahnya ...).systemctl daemon-reload
setelah Anda memodifikasi file unit systemd.sumber
blkid
sepertinya tidak mengekstrakID_FS_LABEL
, jadi saya hanya menggunakanDEVBASE
daripadaLABEL
untuk membangunnyaMOUNT_POINT
saja.udevadm
sebagai gantiblkid
. Ini memberikan lebih banyak detail serta informasi tambahan. (mis.udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. Pembersihan dapat menggunakan pemeriksaan tambahan sepertiif [ "$f" != "/media/*" ]; then
sebelum menjalankanfind
.ada
systemd
opsi pemasangan otomatis yang ringkas dan baru yang dapat digunakanfstab
yang memungkinkan Anda untuk menggunakan semua opsi izin pemasangan standar, dan ini terlihat seperti ini:contoh dalam satu
fstab
baris:yang
noauto
pilihan akan berarti itu tidak akan berusaha untuk dipasang di boot, seperti dengan perangkat lunak yang lebih tuaautofs
.setelah menambahkan
x-systemd.automount
baris baru untukfstab
Anda maka perlu menjalankan:dan kemudian keduanya, atau satu, dari yang berikut:
untuk informasi lebih lanjut tentang itu:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
sumber
sudo systemctl restart local-fs.target
melakukan trik untuk sayaSaya telah memodifikasi skrip dari @MikeBlackwell ke:
/dev/sd[a-z]
tetapi/dev/sd[a-z]*
; sering terjadi dengan server yang memiliki jumlah spindel yang lebih besar./var/log/usb-mount.track
/var/log/messages
dengan tag usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Karena @MikeBlackwell telah melakukan sebagian besar pengangkatan berat, saya memilih untuk tidak menulis ulang; baru saja membuat perubahan yang diperlukan. Saya telah mengakui pekerjaannya melihat namanya dan URI dari jawaban aslinya.
Temukan di https://github.com/raamsri/automount-usb
sumber
Menggunakan pendekatan pmount , systemd, dan Mike Blackwell, Anda dapat menyederhanakan semuanya:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH dan terima kasih Mike.
sumber
Saya akan menjawab dengan Warren Young. Saya memiliki beberapa perubahan yang saya buat
Saya menambahkan beberapa perlindungan ruang karena memberikan kesalahan dari eval lingkungan untuk drive.
Saya menambahkan bagian ke chmod disk usb sehingga semua pengguna memiliki akses penuh ke disk non ntfs atau vfat.
/usr/local/bin/usb-mount.sh
sumber