Puncte:2

Montarea unităților și a Udev - Udev nu montează unități, ci execută alte aspecte ale scriptului

drapel za

Vreau să conectez la cald un hard disk extern, să îl montez și să rulez automat Unison File Synchronizer.

Am făcut o regulă udev numită /etc/udev/rules.d/100-sync.rules

ACTION=="add", SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="wxyz", ATTRS{idProduct}=="wxyz", RUN+="/home/ william/sync.sh"

Acesta declanșează acest script:

#!/bin/bash
mkdir /media/william/Backup
mount -U <my_drives_uuid> /media/william/Backup
su william -c 'notify-send "Unison" "Starting Sync"'
su william -c 'unison Desktop_Ext_local_connection.prf -silent > /home/william/unison_errors.log'
su william -c 'notify-send "Unison" "Finished Sync"'
umount /media/william/Backup
rmdir /media/william/Backup

Rularea scriptului dintr-un shell rădăcină funcționează conform așteptărilor, totuși, atunci când este declanșat de udev, unitatea nu se montează. (Încă primesc notificări de sistem și crearea/distrugerea directoarelor)

Bazat pe acest, cred că nu funcționează pentru că udev folosește un spațiu de nume diferit. Am încercat să creez un fișier /etc/systemd/system/systemd-udevd.service cu continutul

[Serviciu]
MountFlags=shared *(și alternativ PrivateMounts=nu)*

Totuși, acest lucru nu schimbă comportamentul - încă nu se montează. (da, am repornit demonul)

Cum pot face ca unitatea să se monteze folosind udev?

După ce scriptul meu este terminat, Ubuntu montează automat unitatea. Există vreo lucrare prin care Ubuntu să monteze unitatea înainte ca udev să-mi ruleze scriptul?

Nu văd nicio regulă udev pe care Ubuntu o folosește pentru a monta unitatea, conținutul /etc/udev/rules.d sunt doar

100-snap.rules 70-snap.snapd.rules 70-snap.snap-store.rules

Deci, cum montează Ubuntu unitatea după ce scriptul meu este terminat și cum pot schimba ordinea astfel încât acestea să fie montate mai întâi?

Folosesc Ubuntu 20.04.3 LTS, aceeași problemă apare pe laptopul meu care rulează 21.04

William Satterthwaite avatar
drapel za
Am găsit o lucrare în care am 2 scripturi. Primul script îl începe pe al doilea folosind `nohup`, apoi se iese, permițând Ubuntu să monteze unitatea. Al doilea așteaptă 10 secunde pentru a acorda timp monturii, apoi rulează Unison. Nu mi se pare foarte satisfăcătoare această lucrare.
William Satterthwaite avatar
drapel za
Am comentat puțin până în curând fără să testez complet... Nu funcționează, dar da programarea celui de-al doilea script. de exemplu. `acum + 1 minut -f sync2.sh`
user.dz avatar
drapel ng
Da, programarea (tragerea) este o modalitate de a merge.
Puncte:1
drapel ng

AFAIK, toate scripturile udev care includ montarea FS sunt vechi cu câțiva ani în urmă. Cred că a fost schimbat în timp systemd a apărut.

Iată o notă de referință de la udev_237 - om udev (Ubuntu_18.04)

RUN{tip}

    âï¸

    Rețineți că rulează programe care accesează rețeaua sau montarea/demontarea sistemelor de fișiere nu este permisă în regulile udev, datorită sandbox-ului implicit care este aplicat systemd-udevd.service.

Mai bine să mergeți cu soluții care folosesc lib-uri precum udev, udisks, ... Sau un script extern care urmărește în continuare dispozitivul respectiv.

BTW, 100- este prea devreme chiar și pentru alte aplicații (fișierele regulilor udev sunt procesate în ordine lexicală), este bine să îl schimbați într-un număr mare de 2 cifre. Dacă doriți ultima utilizare 99-

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.