Quando apro per la prima volta un terminale, o ne apro uno nuovo dopo che non ne ho usato uno per un po', qualsiasi tipo di completamento della scheda nella mia home directory (ad esempio, ls
e Scheda ) impiega diversi secondi. Ho già visto questo comportamento durante l'utilizzo di autofs
per montare le unità di rete, ma non ne ho in ~/
. Io monto le condivisioni NFS con l'automount di systemd, ma quelle sono in ~/badabing/
, quindi tutto in ~/
stesso è solo un file locale.
Nel caso si tratti di un problema di montaggio automatico, ecco il relativo /etc/fstab
righe (sì, il server si chiama "badabing", l'ho chiamato durante un abbuffata dei Soprano qualche anno fa):
badabing:/nfs_shares/music /mnt/badabing/music nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
badabing:/nfs_shares/series /mnt/badabing/series nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
badabing:/nfs_shares/movies /mnt/badabing/movies nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=5sec,x-systemd.idle-timeout=1min 0 0
Quindi, in ~/badabing
Ho:
$ ls -l ~/badabing/
total 0
lrwxrwxrwx 1 terdon terdon 32 Jan 10 2016 movies -> /mnt/badabing/nfs_shares/movies/
lrwxrwxrwx 1 terdon terdon 31 Jan 10 2016 music -> /mnt/badabing/nfs_shares/music/
lrwxrwxrwx 1 terdon terdon 31 Jan 10 2016 series -> /mnt/badabing/nfs_shares/series
Vorrei indagare di più su questo. Posso in qualche modo strace
completamento della scheda? È l'unico modo per aggiungere echo
comandi nei vari script di completamento bash per vedere cosa c'è in sospeso? Ce ne sono parecchi, quindi preferirei evitarlo.
Quindi, cosa sta causando questo o, almeno, come posso eseguire il debug ulteriormente?
Risposta accettata:
Io farei questo:
sudo strace -pXXXX -tfo /tmp/strace.log
dove XXXX è l'id del processo di bash. In un rapido controllo del completamento del nome file su uno dei miei alberi di directory montati su NFS, funziona senza problemi:
-f
Traccia i processi figlio così come vengono creati dai processi attualmente tracciati come risultato della chiamata di sistema fork(2).
-t
Prefissa ogni riga della traccia con l'ora del giorno.
Alcune persone potrebbero preferire -r
:
-r
Stampa un timestamp relativo all'ingresso di ciascuna chiamata di sistema. Questo registra la differenza di tempo tra l'inizio delle chiamate di sistema successive.