Portál AbcLinuxu, 3. listopadu 2025 22:21
M.
Ř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...
M
/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.
M.
/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 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.
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.