• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

vipw: the password db file is busy

Tschan

Well-Known Member
Themenstarter #1
Hallo,

ich wollte einen User anlegen (adduser) aber leider war das Filesystem voll. Ich hab also Platz gemacht und es nochmal probiert. Ging aber nicht, weil der User schon existiert. Löschen kann ich den User auch nicht mehr (rmuser), es kam eine Fehlermeldung:

user (mustermann) does not exist in the password database

Ich hab dann gegoogelt und habe eine Lösung mit vipw gefunden. Habe damit den Eintrag aus der User-DB gelöscht und das Programm mit CTRL+ 2xZ verlassen.
Seit dem ist die User-DB anscheinend blockiert, denn ein vipw bringt mir jetzt folgende Meldung:

vipw: the password db file is busy

adduser funktioniert auch nicht mehr, bleibt einfach hängen.

Weiss irgendwer wie ich die User-DB entblocken kann, bzw. das Problem lösen kann?

Danke und Gruß,
Andy
 
#2
Aus der manpage:
Code:
     Once the information has been verified, vipw uses pwd_mkdb(8) to update
     the user database.  This is run in the background, and, at very large
     sites could take several minutes.  Until this update is completed, the
     password file is unavailable for other updates and the new information is
     not available to programs.
Ich würde schauen, ob pwd_mkdb(8) noch läuft, falls nicht ist es vielleicht unerwartet beendet worden. Siehe dazu auch BUGS-Section unter pwd_mkdb(8). Da steht auch wie die DBs gelockt werden. Wenn alles fehlschlägt, hast Du ja sowieso ein Backup von Deinem Server gemacht. ;)
 

Tschan

Well-Known Member
Themenstarter #3
Danke für die Antwort. Leider steht unter der BUG-Section nicht genau wie gelockt wird und mit Google finde ich nur das ich nach /etc/ptmp suchen und diese Datei löschen soll. Diese Datei gibt es aber nicht. Die einzige Datei die mir verdächtig vorkommt ist pw.jdCusk, aber ich bin mir nicht sicher ob ich diese löschen sollte.

Ich hab also immer noch keine Lösung gefunden und hoffe noch auf gute Tipps von Euch. :-)

Danke und Gruß,
Andy
 
#4
Also gelockt wird per rename(2). Das steht dort. Diese Datei wird in /etc erzeugt und das Suffix das Du da siehst könnte durchaus ein temporärer Zufallsname sein. So sehen sie üblicherweise aus.

Falls Du die Datei entfernen möchtest, sichere sie irgendwo. Auf jeden Fall solltest Du zuvor eine root-Shell bereits offen haben. Am sichersten ist ein Snapshot von dem Mountpoint zu machen, wo /etc ist oder ein Backup mit /sbin/dump.

Ich würde, nachdem ich den obigen Absatz beherzigt habe, diese Datei proberweise löschen und pwd_mkdb noch ein mal laufen lassen. Dann versuchen, sich auf einem neuen Terminal einzuloggen. Wenn's nicht klappt, dann Backup wieder einspielen oder vom Snapshot-/etc alles ins /etc zurückkopieren.

Aber vorsicht! Mir ist so etwas noch nie passiert und ich spreche hier nur mit Dir, weil sich viele wahrscheinlich nicht trauen, irgendetwas zu empfehlen. Vergiss auf jeden Fall nicht, über Erfolg oder Fehlschlag zu berichten, weil so etwas wichtig ist als Feedback für andere Benutzer, die in paar Jahren guggeln.
 

crotchmaster

happy BSD user
#5
nakal hat gesagt.:
Aber vorsicht! Mir ist so etwas noch nie passiert und ich spreche hier nur mit Dir, weil sich viele wahrscheinlich nicht trauen, irgendetwas zu empfehlen. Vergiss auf jeden Fall nicht, über Erfolg oder Fehlschlag zu berichten, weil so etwas wichtig ist als Feedback für andere Benutzer, die in paar Jahren guggeln.
Ich traue mich. :p
Ich hatte vor Monaten auch so einen Fall und hatte irgendwo eine Anleitung für solche Fälle gefunden. Der Fehler war, das nicht zu bookmarken. :grumble:
Aber die Vorgehensweise kommt mir bekannt vor. Da wir ja alle ein funktionierendes Backup haben, können wir uns entspannt zurücklehnen.

Gruß c.
 
#6
Es gibt übrigens 2 Dateien die nach "pwd_mkdb /etc/master.passwd" aktualisiert werden: /etc/pwd.db und /etc/spwd.db. Du solltest auch schauen, ob das andere auch per rename(2) gelockt ist.

Ich hab sie mal proberweise gelöscht und mit dem obigen Kommando wieder erstellt das Einloggen hat geklappt.
 

Tschan

Well-Known Member
Themenstarter #7
Vielen Dank für Eure Hilfe, ich hab das Problem lösen können.

ich hab mit ps -x nach verdächtigen Prozessen gesucht und diese beiden mit kill -9 gekillt:

48745 p0- T 0:00.00 vipw
48746 p0- T 0:00.02 vi /etc/pw.jdCusk

Danach funktionierte wieder alles.

Nochmal besten Dank Euch allen!

Gruß,
Andy
 

Björn König

Well-Known Member
#8
Programme, die du mit Strg+Z in den Hintergrund geschickt hast, kannst du mit "fg" wieder in den Vordergrund holen. Außerdem sollte man beim Töten nicht gleich das Signal 9 an Prozesse schicken; du benutzt ja auch nicht den Schalter am Netzteil um deinen PC auszuschalten.

Björn