Portál AbcLinuxu, 8. května 2025 13:50

Dotaz: Reakce na mountnutí disku

11.1. 23:13 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Reakce na mountnutí disku
Přečteno: 584×
Odpovědět | Admin
Ahoj ..

K mám USB krabičku, v ní 2 disky naformátované btrfs. S vypínačem. Když vypínač zapnu, disky se roztočí, PC (udev) pozná, že se připojily disky. v udev pravidlech se mi disk mountne na určité místo. To funguje dobře.

Jenže disk má subvolumy, a ty pak ručně mountuju na určitá místa v systému ( přes skript, ale spustit ho musím ručně). A to je právě ono. Nedalo by se nějak to mountování subvolumes taky zautomatizovat ?

Když do udev pravidel dám skript a v něm obyč mountuju ( ať už disk nebo subvolumy) , tak mount ještě ten disk nevidí, proto se v udev pravidlech používá systemd-mount. Ten disk namountuje, ale v privátním filesystému a asi až potom mountnutí zveřejní. Řešením by bylo přes systemd-mount namoutnovat i subvolumy, ale vypadá to, že tohle neumí ( teda nenašel jsem takovou možnost).

Vy jste tady zkušení , tak se tedy ptám : umí systemd mountnut subvolumy ? Jak ?

Nebo jiná cesta mě napadla : hlídat mountnutí disku, a jako reakci spustit moutnutí subvolum. Ale tady tápu, nevím, jak hlídat ... tedy napadlo mě přes cron, ale to mi přijde dost overkill.

V tý krabičce je jen záloha dat + nějaké další data (ISO atd), a pouštím to tak jednou týdně. No v nejhorším budu mountovat ručně ...

Má někdo nápad, jak to mountování subvolum zautomatizovat ?

Děkuji za popostrčení :-D

M.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.1. 00:06 X
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Strelim:
[Unit]
Description=Mount btrfs subvolume
[Mount]
What=UUID=....
Where=/media/test
Type=btrfs
Options=defaults,auto,nofail,subvol=@milan
[Install]
WantedBy=multi-user.target
Řešení 1× (Milan Uhrák (tazatel))
12.1. 00:29 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Aha ... to je systemd-mount unita, že ?

předtím jsem měl v rules
ENV{ID_FS_UUID}=="af761341-f12a-447b-aa33-2fa088c96a4c", ACTION=="add", RUN{program}+="/usr/bin/systemd-mount --no-block --collect $devnode /media/extDisk"
Tak jsem v sekci RUN změnil můj původní zápis na jméno mého skriptu a v něm
/usr/bin/systemd-mount --no-block --collect $NODE /media/extDisk
To funguje,

budu tedy pokračovat
/usr/bin/systemd-mount --no-block --collect -t=btrfs -o=defaults,auto,nofail,subvol=@milan $NODE /media/extDisk
S tím -o jsem si nebyl jistý co tam patří, dokumentace nic ... děkuji, zkusím zítra ...

Tak nějak ale vaše rady vždy fungovaly... :-D

M

12.1. 10:23 X
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Je to tak, naprilad "subvolume_test.mount'. Subvolume se urci volbou 'subvol'. Netestovano.
12.1. 11:01 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
No, nevím, jak je to možný, ale při pokusu z konzole spustit
/usr/bin/systemd-mount --no-block --collect -t=btrfs -o=defaults,auto,subvol=Filmy /dev/sdc /srv/data/Filmy
mi to psalo :
Failed to start transient mount unit: Unit srv-data-Filmy.mount was already loaded or has a fragment file.
Takže jsem pátral, a zjistil jsem, musel jsem, že srv-data-Filmy.mount skutečně eistuje ( jesti jen do následujícího restartu nevím, jetě jsem nezkoušel, ale ve skrtiptu mi stačí ( resp musí spustit jen
 systemctl start srv-data-Filmy.mount
Jako fakt koukám, tohle jsem nikdy nepotřeboval, ale jak je to vše udělaný ... no žasnu. :-D

M.

12.1. 11:44 X
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Parada.
12.1. 12:06 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
A díky za nasměrování ...
12.1. 18:44 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše shrnutí
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ok, takže tu máme Debian 12. V
/etc/udev/rules.d
jsem vytvořil soubor
99_ext_disk.rules
který obsahuje
ENV{ID_FS_UUID}=="af761341-f12a-447b-aa33-2fa088c96a4c", ACTION=="add", RUN+="/root/bin/disk.automount.sh $devnode"
af761341-f12a-447b-aa33-2fa088c96a4c = můj případ, vy si tam dejte potřebné hodnoty ( najdete např. v /dev/disk/by-uuid/ )

samotný soubor
/root/bin/disk.automount.sh
obsahuje jednak mountování disku, pak i mountování subvolumů btrfs. Protože skript je spouštěn udevem dvakrát ( jsou dva disky "slité" do jednoho velkého pomocí btrfs ) po začátku programu se nastavuje hodnota 'run' v hlídacím souboru, jako flag, že už jedna instance běží - nedokázal jsem to jinak ... možná to jde...
#! /bin/bash
watchFile="/root/bin/automount.watch"
test=`grep "run" $watchFile`
logfile="/root/bin/automount.log"
echo -e "\n\n"`date` >> $logfile
if  [[ "$test" == "run" ]]; then
    echo "mountování již běží :$test: " >> $logfile
    exit 0
fi

echo "run" > $watchFile

NODE=${1:-""}
if [ -z $NODE ]; then
    echo "Bez node " >> $logfile
    echo "" > $watchFile
    exit 1
fi
echo $NODE >> $logfile


point=`systemctl list-units -t mount --all | grep 'mounted' | grep '/media/extDisk'`
if [ -n "$point" ]; then
    echo " $NODE už připojeno :>$point< :" >> $logfile
    echo "" > $watchFile
    exit 0
fi

echo "mountuju $NODE na /media/extDisk" >> $logfile

rv=`/usr/bin/systemd-mount --no-block --collect $NODE /media/extDisk 2>&1`
st=$?
if [ $st -gt 0 ]; then
    echo "$NODE Mount disku se nezdařil: $rv" >>$logfile
    echo "" > $watchFile
    exit 1
fi

echo "$NODE mount subvolume Filmy" >> $logfile

point=`systemctl list-units -t mount --all | grep mounted | grep /srv/data/Filmy`
if [ -n "$point" ]; then
    echo "$NODE už připojeno " >> $logfile
    echo "" > $watchFileunmount /
    exit 0
fi

$rv=`systemctl start srv-data-Filmy.mount`
st=$?
if [ $st -gt 0 ]; then
    echo "$NODE Při mountu Filmy se něco nezdařilo: $st $rv" >>$logfile
fi
echo "$NODE mount subvolume Software " >> $logfile
systemctl start srv-data-Software.mount
echo "$NODE mount subvolume zalohy " >> $logfile
systemctl start srv-data-zalohy_ext.mount

echo "" > $watchFile
exit 0
Soubor je plný hlášek, tak trochu ladící režim, protože některé úseky mě zlobily, chtěl jsem vědět, co se vlastně děje... A zachoval jsem ta hlášení i pro vás, snad to využijete . Nebo promažete.

Výsledkem je, že po spuštění (nebo připojení) zálohovacího disku se disk automaticky disk připojí a připojí se i připojí 3 další subvolumy do složek, které jsou pak pro mě i ostatní pak dostupné v síti. To připojování se děje na serveru, je tam sice ssh připojení, ale tento způsob je pro mě supr. No odpojování ( odmountování před fyzickým vypnutím / odpojením ) funguje "samo" ale asi to ošetřím nějakým skriptem už na mém PC...

M.
13.1. 10:32 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Odpovědět | | Sbalit | Link | Blokovat | Admin

x-systemd.automount v /etc/fstab

To↑ je univerzální odpověď na všechny otázky kolem automatického mountování subvolume (i čehokoliv jiného). Pak už stačí, aby v /etc/fstab bylo několik řádků se stejným UUID=..., ale jiným subvol=... / subvolid=... a je to, cíle je dosaženo.

13.1. 13:55 X
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
Systemd pak generuje unity automaticky, nebo jak to vlastne vznika? bude to bungovat i u externiho USB/disku?
13.1. 16:35 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku

Záleží na distru, ale obvykle z fstab i z crypttab vzniknou unity.

Externí disk se ničím neliší od interního, pokud jde o x-systemd.automount.

Za běžných okolností je do mountpointu „namountovaný“ systemd, který na vyžádání (při prvním přístupu) mountne přes sebe ten opravdový filesystém.

Teď si nevzpomínám, co se stane, když automount je, ale zařízení s FS není. Mám dojem, že se nějakou dobu čeká a pak ty čekající přístupy selžou nebo tak. Někde je to (trochu) konfigurovatelné.

Pro mnohem flexibilnější nastavení je dobré prostudovat systemd.path. Tím se dá celkem spolehlivě spustit akce při změně adresáře (třeba toho mount pointu).

13.1. 20:19 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: Reakce na mountnutí disku
No vida ... a já se škrábu levou rukou za pravým uchem ...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.