Hello,
because of problems with bdb (virtual memory using and glibc) and
limitiations (IDL),
I want migrate to mdb.
So my first question:
Does mdb have limitations like bdb it have aka BDB_IDL_LOGN?
Second, I set up an small lab for tests with mdb and don't get the
slapd started
with larger mdb size (10GB).
Here the lab and test:
Start slapd with an empty /var/lib/ldap/ldap.mdb directory
I want reserve 10GByte disk space for mdb (maxsize 10737418240)
error message in syslog
==============================================================
@(#) $OpenLDAP: slapd 2.4.33 $ opensuse-buildservice(a)opensuse.org
daemon: IPv6 socket() failed errno=97 (Address family not supported
by protocol)
mdb_db_open: database "ou=demo" cannot be opened, err 12. Restore from backup!
backend_startup_one (type=mdb, suffix="ou=demo"): bi_db_open failed! (12)
slapd stopped.
created files from slapd while using
==============================================================
~# du -b /var/lib/ldap/ldap.mdb/*
12288 /var/lib/ldap/ldap.mdb/data.mdb
8192 /var/lib/ldap/ldap.mdb/lock.mdb
I "straced" the start of slapd, here I think is the importand
part:
==============================================================
.
.
.
stat("/var/lib/ldap/ldap.mdb", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
mmap(NULL, 2101248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x7fe38f915000
brk(0x7fe3948ae000) = 0x7fe3948ae000
open("/var/lib/ldap/ldap.mdb/lock.mdb", O_RDWR|O_CREAT, 0600) = 9
fcntl(9, F_GETFD) = 0
fcntl(9, F_SETFD, FD_CLOEXEC) = 0
fcntl(9, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
lseek(9, 0, SEEK_END) = 0
ftruncate(9, 8192) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, 9, 0) = 0x7fe3941e4000
open("/var/lib/ldap/ldap.mdb/data.mdb", O_RDWR|O_CREAT, 0600) = 11
read(11, "", 4096) = 0
mmap(NULL, 10737418240, PROT_READ, MAP_SHARED, 11, 0) = -1 ENOMEM
(Cannot allocate memory)
close(11) = 0
munmap(0x7fe3941e4000, 8192) = 0
close(9) = 0
.
.
.
So I tried to start slapd with the default of maxsize
-- every thing is ok --
==============================================================
If i comment out maxsize 10737418240 (use the default of 10M), start
slapd every thing is fine, slapd starts and create files:
~# du -b /var/lib/ldap/ldap.mdb/*
12288 /var/lib/ldap/ldap.mdb/data.mdb
8192 /var/lib/ldap/ldap.mdb/lock.mdb
As I understand, at first slapd start, the database file will be created
with the full size, but as sparse file? So why I don't see this, if
I use the default (maxsize 10485760)
Here my slapd.configuration file
==============================================================
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/yast.schema
include /etc/openldap/schema/rfc2307bis.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
modulepath /usr/lib/ldap
moduleload back_mdb
moduleload back_monitor
sizelimit -1
timelimit 300
disallow bind_anon
require authc
gentlehup on
tool-threads 4
serverID 001
database mdb
suffix "ou=demo"
rootdn "cn=admin"
rootpw password
directory /var/lib/ldap/ldap.mdb
loglevel 256
maxsize 10737418240
index objectClass,entryUUID,entryCSN eq
mounted filesystem for database
==============================================================
debld02:/etc/openldap # mount | grep ldap
/dev/sdb5 on /var/lib/ldap type ext3 (rw,relatime)
free space on filsystem
==============================================================
debld02:/etc/openldap # df -h | grep ldap
/dev/sdb5 30G 5.6G 23G 20% /var/lib/ldap
So I tried to create the sparse file manual
==============================================================
~# su -- ldap
~> id
uid=76(ldap) gid=70(ldap) groups=70(ldap)
~> dd if=/dev/zero of=/var/lib/ldap/ldap.mdb/test.sparse bs=1 count=0 seek=10G
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.3413e-05 s, 0.0 kB/s
~> du -b /var/lib/ldap/ldap.mdb/test.sparse
10737418240 /var/lib/ldap/ldap.mdb/test.sparse
What is going wrong with my test lab?
Thanks Meike