[Megoldva] Udisks2 mount opciók

Fedorán - de más, manapság használatos desktop Linuxon is - van az úgy, hogy az ember USB host interface-re csatlakoztat egy pendrive-ot vagy HDD-t, a gép meg felcsatolja a block divece-on található filerendszereket, vagy beállítástól függően csak meghagyja a felcsatolás lehetőségét a /run/media/$USER alkönyvtár alá.

Amire szükségem volna, hogy az egyes filerendszerekhez - gondolom, UUID és/vagy filerendszer típus alapján - be tudjam állítani a számomra jónak gondolt mount opciókat.

Google nem mondta meg, többnyire azt javasolták, írjam az fstab-ba, de jó volna, ha maradna ez a per user szintű automatikus kezelés, csak testreszabható mount opciókkal.

Egyébként azért kellene, mert megformáztam a backup célokra fenntartott 400 GB-os HDD-met - még partíciós táblát sem tettem rá, minek - btrfs-re, s egy compress=lzo opcióval kellene felcsatolnom.

(Csalódás volt a btrfs: míg a live linuxomban használva ~50 %-ra tömörít, itt 104 GiB-ra tett fel 107 GiB anyagot. Persze tudom, attól függ, mi mennyire tömöríthető, de mivel mentés volt, ez is korábbi /home-ok tartalma többnyire. Gondoltam, az aktuális /home-omat btrfs-re migrálom, de ha ilyen kismértékű a tömörítés, akkor minek.)

Megoldás.

Hozzászólások

Az udisks forrása szerint vannak megengedhető mount opciók:

http://cgit.freedesktop.org/udisks/tree/src/udiskslinuxfilesystem.c?id=…

pl.:

static const gchar *vfat_allow[] = { "flush", "utf8=", "shortname=", "umask=", "dmask=", "fmask=", "codepage=", "iocharset=", "usefree", "showexec", NULL };

Ezeket az udisksctl mount ... -o opciónál el is fogadja, GUI-ban hogyan lehet megoldani, én szerintem ezt a lehetőséget kihagyták belőle (a KDE Device Notifieréből biztosan).

Az egy dolog, hogy parancssorban esetleg megy, csak fogalmam sincs, hogyan generálódik az esemény, ki hívja, s mikor. Éppen ezért reménykedtem abban, hogy valahol van egy konfigurációs állomány, ahol rendelkezni lehet a mount opciókról. Ezek szerint ez ennyire be van drótozva? És ha igen, jó ez így? A Linuxokra nem ez jellemző általában.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ez ennyire be van drótozva, a /run/media is a forráskódban van. De a mount opciók között ott vannak a kötelező és a _lehetséges_ opciók, szóval rendelkezhetsz róla, csak épp a GUI nem ad rá lehetőséget (parancssorból próbálgathatod, ott ami a listában van, szabadon használhatod).

Nem általában van gondom a parancssorral. Itt az a probléma, hogy nem tudom, hogyan jön létre az esemény, amit a block eszköz csatlakozása triggerel. Tehát nem tudom, hol nyúlhatnék bele. Nem önmagában a parancssor a gond, mert akkor akár egy mount -o remount,... paranccsal is élhetnék. Itt az a problémám, hogy kellene egy konfigurációs állomány, amelybe beleírom, milyen filerendszerhez, UUID-hoz milyen mount opciók tartozzanak, s amikor a device kábelét az USB csatlakozóba dugják, akkor egyből ennek megfelelően csatolódjon az eszköz.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mi az, ami nem derül ki a "man udisks"-ből? Kb. úgy működik, hogy az udisksd figyeli az udev eseményeket, és dbus-on át nyújt egy interfacet különböző szolgáltatásokhoz, mint pl. a mountolás, vagy az új eszközök figyelése. A kliens progi meg (legyen az GUI vagy command line), dbus-on keresztül látja, hogy bedugtál egy pendriveot, majd szól az udiskd-nek, hogy na, mountolj, ezekkel az opciókkal. Csak épp a GUI kliensből hiányzik a lehetőség a saját opciókra. Ha neked kell egy konfig állomány, akkor lehet hekkelni a klienst(vagy akár az udisksd démont is, pl. ha fájrendszerenként elég neked custom opció, akkor a fent linkelt forrásfájlban elég egyszerűen cserélhetőek a hardcodeolt mount flagek).

Még nem olvastam el az alább linkelt blogot, de meg fogom tenni, csak most dolgom van.

Az világos, hogy a daemon figyel. Az viszont már nem, hogy amikor esemény van, akkor a daemon valahogyan hívja a klienst, vagy a kliensnek csupán az a dolga, hogy aszinkron módon, bármikor beállítsa azon tulajdonságokat, amelyekkel a daemon esemény esetén cselekedni fog.

A leírásból az előbbire gondolok. Viszont nem látom a hívás helyét, így azt sem, hogyan tudok belenyúlni, hol tudom megváltoztatni a mount opciókat. Xfce-t használok, azon belül egy "Places" nevű panel plugin-t. Itt automatikusan megjelenik az új device, s van mount, valamint mount and open lehetőségem. A beállításokban viszont távolról sincsenek mount opciók. Azt reméltem, az udisks-nek van valahol konfigurációs állománya, amelyben elpanaszkodhatom neki a bajaimat.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ja, ez egy tök hasznos összefoglaló.

Az eredeti problémához még egy oldal:
http://davidz25.blogspot.hu/2012/03/simpler-faster-better.html


We've been trying all sorts of things over the years (the most complex being the now deprecated gnome-mount program reading mount options from e.g. GConf) and while some of these things have worked great in theory, they were just way too complex; our users just didn't have the time nor the inclination to figure out how to use our software... and I don't blame them... my experience is that if the effort more complex than editing a single text file with emacs(1) or vi(1) you've lost most people.

Szóval régebben a gnome-mount ezt tudta, igaz GConf-ból vett mount flagekkel, ami meg most van udisks frontendként a gnomeban (gnome-disks), az már csak az fstab-ban tud elhelyezni mount opciókat :)

Elolvastam, s hasznos volt. Eddig nagy homály volt bennem ezen a téren, sokat tisztult most a kép. Ebből kiderült, hogy az udisks a block device-okkal kapcsolatos ügyködés terén illeszti az udevd-t a D-Bus-hoz, s így a desktop-hoz.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

"Csalódás volt a btrfs: míg a live linuxomban használva ~50 %-ra tömörít, itt 104 GiB-ra tett fel 107 GiB anyagot."

Nem lehet hogy nem compress opcióval hoztad létre a fájlokat? Csak akkor tömöríti az adatokat, ha eleve compress-szel felcsatolt fs-re másolod fel. Ha nem így volt, akkor érdemes lenne egy hasonlót futtatni:

su -c "find /mnt/backup -type f -print0 | xargs -0 btrfs fil defrag -v -c"

Szerk.: vagy ha sok lenne a fájlnév paraméter, akkor ciklusba tenni.

A btrfs man-ját érdemes átnézni.

Kieg.: Miért nem jó megoldás az fstab? Szerintem ez lenne a legtisztább. Támogatott mód hack nélkül és sok idő múlva is átlátható, nem kell doksit csinálni a hack-ről.

Nem, jól csináltam. Manuálisan csatoltam a filerendszert compress=lzo opcióval, majd ezt követően másoltam fel a file-okat. Sokkal inkább arról lehet szó, hogy manapság már eleve tömörítettek a file-jaink, nem nagyon tömöríthetők tovább. Egy mp3, ogg vorbis hang, jpeg, png kép, h.264 video, odt dokumentum mind-mind tömörített file-ok. Néhány kilobyte-os konfigurációs text állományok tömörítésével meg nem lehet csodát tenni. A live-on azért voltam hatékonyabb, mert elsősorban konfig file-ok voltak, azt meg jól lehet tömöríteni.

Amit az fstab-ba írok, az meg fog jelenni a Thunar-ban, Places plugin-ben úgy, hogy felcsatolhatom egy egérkattintással? Illetve, ha kihúzom a csatlakozóból az eszközt, akkor eltűnik a GUI-ról?

Tehát azt szeretném, hogy a kényelmes automatizmusok működjenek, csak előre megadhassam egy file-ban a mount opciókat.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nekem GUI alól mount-olja be automatikusan, mikor bedugom, pl. a pendrive-om. Betettem az fstab-ba vfat + /media/valami mount point + rw,noexec opciókkal, és így is kerül csatolásra a rendszer által.

Mi nem úgy működik nálad amit máshogy szeretnél? Feltételezném, hogy XFCE alatt is így kellene mennie.

Fedorán az történik, hogy amit beírok az fstab-ba, az nem látszik többé GUI-ról, már úgy értve, nem kínálódik fel mount-olásra és lecsatolásra, valamint eject-re. Valahol logikus egyébként, mert az automatikus kezelés esetén a mount point a /run/media/$USER, az fstab-ba meg aligha írhatom, hogy éppen azon felhasználó nevével létrehozott alkönyvtárhoz csatoljon, aki a GUI-ról mount-ol. Ráadásul az illető alkönyvtárat létre is kell hozni előbb.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A /media/valami még a régi udisks volt, azóta fejlesztettek rajta :)
Az újban egyébként meg kell adni, hogy x-gvfs-show az fstab mount opciói közt, és akkor elvileg látszik a GUI-n is. A mount pointot meg megcsinálja, csak célszerű nem a /run/media-t használni, hanem pl. az /mnt-t. Mindez nagyon szépen beállítható a gnome-disksben, ha nincs kedve az embernek vi-ozni. Kipróbáltam, csináltam egy ilyet az /etc/fstab-ba (illetve a gnome-disks csinálta):

/dev/disk/by-id/usb-UFD_3.0_Silicon-Power8G_121001240540000034-0:0-part1 /mnt/usb-UFD_3.0_Silicon-Power8G_121001240540000034-0:0-part1 auto nosuid,nodev,nofail,noauto,x-gvfs-show 0 0

Ez egy 8 gigás pendrive, user tudja mountolni, a megadott helyre, a megadott mount opciókkal, mindezt GUI-ból. Szóval van remény!

Nem lehet hogy nem compress opcióval hoztad létre a fájlokat?

Kizárt, hiszen 104 GiB-ra fért fel 107 GiB. Az eltérés nem adódik abból, hogy keverem a GB-ot a GiB-tal, erre természetesen figyeltem. Mind a du, mind a df parancsot futtattam -h és ellenpróbaként --si kapcsolóval is.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Amennyire én tudom az udisks csak a disk kezelésért felel, míg az összes device esemény az udev hatókörébe tartozik.
Szóval én valami udev szabályokkal próbálkoznék.

===============================================================================
// Hocus Pocus, grab the focus
winSetFocus(...)

http://c2.com/cgi/wiki?FunnyThingsSeenInSourceCodeAndDocumentation