Portál AbcLinuxu, 8. května 2025 13:50
Řešení dotazu:
[Unit] Description=Mount btrfs subvolume [Mount] What=UUID=.... Where=/media/test Type=btrfs Options=defaults,auto,nofail,subvol=@milan [Install] WantedBy=multi-user.target
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/extDiskTo funguje, budu tedy pokračovat
/usr/bin/systemd-mount --no-block --collect -t=btrfs -o=defaults,auto,nofail,subvol=@milan $NODE /media/extDiskS 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...
/usr/bin/systemd-mount --no-block --collect -t=btrfs -o=defaults,auto,subvol=Filmy /dev/sdc /srv/data/Filmymi 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.mountJako fakt koukám, tohle jsem nikdy nepotřeboval, ale jak je to vše udělaný ... no žasnu.
/etc/udev/rules.djsem vytvořil soubor
99_ext_disk.ruleskterý 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.shobsahuje 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 0Soubor 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.
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.
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).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.