On 07/12/2010 09:49, dmcfeeters wrote:
I have a system running Samba 4 Alpha 11, and I seem to have a corrupted LDB
file in my directory. (Probably the result of taking a backup without using
tdbbackup). Right now, running tdbbackup on the file produces an error
message similar to the following:
Won't be a too bad idea to move to at least alpha13 or even better the
latest git revision ...
Failed to insert into DC=WWW,DC=EXAMPLE,DC=COM.ldb.bak.tmp
failed to copy DC=WWW,DC=EXAMPLE,DC=COM.ldb
If I run
ldbsearch -H "DC=WWW,DC=EXAMPLE,DC=COM.ldb" -a> www.example.com.ldif
I get a text file containing a text dump of my directory. I can reload this
into a new tdb file using ldbadd, but only if I remove the one object called
@INDEXLIST. Without removing this object, ldbadd simply hangs, and then
eventually dies with the following error:
ltdb: tdb(newfile.ldb): tdb_transaction_cancel: no transaction
Failed to commit transaction: Failed to store index records in transaction
commit: Other
Well that's not a good idea to rebuild index out of the control of samba
so basically doing ldbadd like this won't work very well
So, my question is: am I on the right track in rebuilding this LDB file? I
know I should have kept a good backup, but right now I would really like to
recover the file, and it seems that all (or most) of my data is still there,
if it can only be made accessible. It seems that this should work, but it
doesn't seem to be importing any indexes, and if the file is not indexed I
fear that performance will not be acceptable (if it even works at all).
No it's not the good way to do. A possible way is to remove all the
@INDEX entry of the ldbsearch dump, add an empty @INDEXLIST
or with one entry ie:
dn: @INDEXLIST
@IDXATTR: sn
@IDXONE: 1
distinguishedName: @INDEXLIST
Normally at this moment you should have a valid tdb file but with broken
indexes, verify that you can tdbdump it.
If so then edit the sam.ldb like this:
ldbedit -H sam.ldb -o modules:
locate the @INDEXLIST entry and remove almost every thing so that it
looks like
dn: @INDEXLIST
@IDXATTR: sn
@IDXONE: 1
distinguishedName: @INDEXLIST
then do ldbsearch -H sam.ldb, got take a coffee if you provision is big
(lot of entries ) if not it should be quick (~1 minute), by altering the
indexlist in the sam.ldb we force samba4 to reindex the whole ldb.
You can check that your sam.ldb + DC=domain, DC=tld.ldb have been
reindexed by doing:
ldbsearch -H sam.ldb -o modules:
And look at the @INDEXLIST entry it should be "big" (> 20 lines, when
just before it was just 4 lines), doing the same search on DC=domain,
DC=tld.ldb should also give you a "big" list.
Then you will repeat: I will use samba_backup (in source4/scripting/bin)
to make my backup ! (please check that the backup made are really
working ...).
Good luck.
Matthieu.
--
Matthieu Patou
Samba Team http://samba.org
Private repo http://git.samba.org/?p=mat/samba.git;a=summary
--
To unsubscribe from this list go to the following URL and read the
instructions: https://lists.samba.org/mailman/options/samba