O Raspberry Pi geralmente monta duas partições no momento da inicialização; aqui está /etc/fstab
:
proc /proc proc defaults 0 0
PARTUUID=8a6020b5-01 /boot/firmware vfat defaults 0 2
PARTUUID=8a6020b5-02 / ext4 defaults,noatime 0 1
Tenho um problema porque, em várias ocasiões, a /boot/firmware
partição (vfat) ( aparentemente aleatoriamente ) foi "desmontada"; observei isso na saída de lsblk --fs
:
# 'boot/firmware' mounted correctly:
$ lsblk --fs
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
├─nvme0n1p1 vfat FAT32 bootfs 146B-AD94 444.8M 13% /boot/firmware
└─nvme0n1p2 ext4 1.0 rootfs ece25014-1cd7-4874-9bfc-f91e486bc000 364.9G 2% /
# 'boot/firmware' becomes "un-mounted":
$ lsblk --fs
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
├─nvme0n1p1 vfat FAT32 bootfs 146B-AD94 444.8M 13%
└─nvme0n1p2 ext4 1.0 rootfs ece25014-1cd7-4874-9bfc-f91e486bc000 364.9G 2% /
Depois de considerar algumas opções para ajudar a "solucionar" esse problema, pensei que usar a --poll
opção com findmnt
seria uma boa escolha; ou seja:
$ nohup /usr/bin/findmnt -n --poll=umount,mount --target /boot/firmware &
Executei este comando e testei usando umount
e mount
para acionar findmnt --poll
:
$ nohup /usr/bin/findmnt --poll=umount,mount --target /boot/firmware &
[1] 10904
# wait a while, then
$ sudo umount /boot/firmware
$ sudo mount -a
# check nohup.out:
$ cat nohup.out
umount /boot/firmware /dev/nvme0n1p1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro
mount /boot/firmware /dev/nvme0n1p1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro
O que preciso fazer é disparar uma rotina quando a umount ...
saída for produzida. Até agora não consegui fazer isso, e é aí que preciso de ajuda. Preciso de um script que inicie o findmnt --poll
comando e então espere por uma saída começando com umount
. Quando essa saída chegar, gostaria de executar dmesg
(?), capturar essa saída para um arquivo de log, talvez algum outro(s) diagnóstico(s) e, finalmente, emitir um sudo mount -a
.
Depois de findmnt --poll
gerar outra linha com mount
, acho que o script deve retornar ao estado de "espera" para capturar o próximo umount
evento.
Li um pouco sobre o wait
comando , mas me pergunto se é a abordagem correta porque:
O comando wait faz com que um script de shell ou uma sessão de terminal aguarde a conclusão dos processos em segundo plano.
Neste caso, findmnt --poll
não termina - continua a rodar, sondando por outra mudança de estado reportável. Alguma sugestão sobre como abordar isso?
Graças à sugestão de @muru, tenho uma resposta: