[gelöst] locate (mlocate) findet keine Dateien von Benutzern

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8311
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] locate (mlocate) findet keine Dateien von Benutzern

Beitrag von smutbert » 11.07.2021 13:00:22

Hallo allerseits,

irgendwie scheint das Aktualisieren der locate-Datenbank nicht richtig zu funktionieren, auch nicht wenn ich die Aktualisierung selbst starte

Code: Alles auswählen

# updatedb
# file rpi_MECH_3bplus.pdf 
rpi_MECH_3bplus.pdf: PDF document, version 1.4
# locate rpi
#
Es werden lediglich Dateien gefunden, die zum System gehören und selbst die werden, wenn sie „neu“ sind nur gefunden, wenn ich davor updatedb aufgerufen habe, obwohl mlocate.timer aktiviert ist und Erfolgsmeldungen wie

Code: Alles auswählen

$ journalctl -p7 -u mlocate.service
-- Journal begins at Sun 2021-07-11 10:53:21 CEST, ends at Sun 2021-07-11 12:55:15 CEST. --
Jul 11 10:53:22 iolaos systemd[1]: Started Update a database for mlocate.
Jul 11 10:53:22 iolaos systemd[1]: mlocate.service: Succeeded.
im Log stehen.

In der »/etc/updatedb.conf« ist auch nichts relevantes von der Indizierung ausgeschlossen. Mir gehen bei der Fehlersuche langsam die Ideen aus.
Zuletzt geändert von smutbert am 12.07.2021 11:33:55, insgesamt 2-mal geändert.
Grund: Problem gelöst

Benutzeravatar
TRex
Moderator
Beiträge: 8029
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: locate (mlocate) findet keine Dateien von Benutzern

Beitrag von TRex » 11.07.2021 15:07:55

Kannst du feststellen, welche DB verwendet wird (beim Lesen _und_ Schreiben)? Kann man die Liste der Dateien ausgeben?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
smutbert
Moderator
Beiträge: 8311
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: locate (mlocate) findet keine Dateien von Benutzern

Beitrag von smutbert » 11.07.2021 16:48:38

Geschrieben wird in eine temporäre Datei oder Kopie, gelesen wird »/var/lib/mlocate/mlocate.db«, das ist aber leider kein bekanntes Datenbankformat.

locate kann aber immerhin eine Statistik ausgeben und da tun sich gleich einige Merkwürdigkeiten auf. Ich fange mit meinem Problem an. Lege ich eine Datei in »/etc« an wird sie gefunden

Code: Alles auswählen

# touch /etc/rpi.txt
# systemctl start mlocate.service
# locate rpi
/etc/rpi.txt
# locate --statistics
Database /var/lib/mlocate/mlocate.db:
	396 directories
	7443 files
	287175 bytes in file names
	177628 bytes used to store database
dieselbe Datei in /home dagegen nicht

Code: Alles auswählen

# mv /etc/rpi.txt /home
# systemctl start mlocate.service
# locate rpi
# locate --statistics            
Database /var/lib/mlocate/mlocate.db:
	396 directories
	7442 files
	287163 bytes in file names
	177619 bytes used to store database
»/home« liegt wie »/« auf einem btrfs, allerdings auf einem eigenen Subvolume – das ist schon einmal eine Spur, der ich nachgehen an.

Es sind übrigens insgesamt eindeutig zu wenige Dateien, da fehlen auch viele außerhalb von »/home«. Da bin ich mir noch nicht sicher ob die auch alle auf anderen Subvolumes als »/« liegen.


Vorher waren es übrigens nicht zu wenige Dateien. Das ist eine weitere Merkwürdigkeit. Da weiß ich noch nicht ob sie etwas mit meinem Problem zu tun hat.

Benutzeravatar
MSfree
Beiträge: 10657
Registriert: 25.09.2007 19:59:30

Re: locate (mlocate) findet keine Dateien von Benutzern

Beitrag von MSfree » 12.07.2021 08:18:44

locate und mlocate verhalten sich unterschiedlich, siehe auch hier:
https://packages.debian.org/de/sid/mlocate

Eventuell erklärt das ja schon das Problem. Im Gegensatz zu locate listet mlocate nur Dateien, auf die der Aufrufende Benutzer auch Zugriffsrechte hat.

Daß (m)locate erst dann Dateien findet, nachdem die Datenbank mit updatedb aktualisiert wurde, liegt in der Natur der Sache. (m)locate dursucht nicht das Dateisystem sondern nur seine eigene Datenbank. Logischerweise werden Dateien, die zwar schon im Dateisystem aber noch nicht in der Datenbank sind, von (m)locate nicht gefunden.

Benutzeravatar
smutbert
Moderator
Beiträge: 8311
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: locate (mlocate) findet keine Dateien von Benutzern

Beitrag von smutbert » 12.07.2021 11:32:32

Das war nicht das Problem, aber gerade beim Aktualisieren der Datenbank dachte ich schon, ich hätte die Ursache gefunden.
updatedb(.mlocate) wird standardmäßig einmal pro Tag von mlocate.service ohne weitere Optionen und als root aufgerufen. Rufe ich updatedb aber selbst auf, gibt es plötzlich viel mehr Dateien und Verzeichnisse in der Datenbank

Code: Alles auswählen

# systemctl start mlocate.service
# locate --statistics
Database /var/lib/mlocate/mlocate.db:
	396 directories
	7442 files
	287163 bytes in file names
	177619 bytes used to store database

Code: Alles auswählen

# updatedb.mlocate
# locate --statistics
Database /var/lib/mlocate/mlocate.db:
	14029 directories
	157467 files
	8623341 bytes in file names
	3604903 bytes used to store database
Das dürfte an einigen systemd-Optionen in der »/lib/systemd/system/mlocate.service« liegen (PrivateTmp, PrivateDevices, Private...), die dafür sorgen, dass updatedb in eigenen Namespaces läuft, aber wie es gleich 20 bis 40 Mal so vielen Dateien und Verzeichnisse sein können ist mir nicht klar und das obwohl die Dateien, die ich gerne finden würde, immer noch nicht dabei sind.
(Insgesamt sind auf diesem Dateisystem etwa 10^5 Verzeichnisse und 10^6 Dateien – keine Ahnung was hier vorgeht.)



Die Option

Code: Alles auswählen

PRUNE_BIND_MOUNTS="yes"
in der »/etc/updatedb.conf« dürfte die eigentliche Ursache meines Problems sein. Offensichtlich werden btrfs-subvolumes ab dem zweiten gemounteten Volume pro Dateisystem gleich behandelt wie bind-mounts.
Setze ich die Option auf "no" findet updatedb alle Dateien, allerdings in mehrfacher Ausführung, weil ich auch das root-volume von btrfs gemountet habe (aber das kann ich ja anhand des Pfads vom Indexieren ausschließen – hoffe ich zumindest).

Danke für die Denkanstöße, das Problem ist damit gelöst.

Antworten