Environment
Novell Open Enterprise Server 2 (OES 2) Linux Support Pack 2
Situation
Since
the release of Novell Open Enterprise server 2 Support Pack 2, Novell
supports the use of Cross Protocol File Locking. When installing a new
OES2 SP2 server, by default the CROSS_PROTOCOL_LOCKS setting is enabled (0 = disabled, 1 = enabled).
A bug was found when CROSS_PROTOCOL_LOCKS is enabled, and when roaming profiles on the desktop environment are used to write the users profiles to the server.
This bug caused the /var/lib/samba/locking.tdb file to grow very large in size, as records were constantly written to this locking.tdb file, but the same records were never cleaned up after the client logged out.
E.g.:
OES2SP2LX:/var/lib/samba # ll
total 380824
drwxrwxr-x 9 root ntadmin 4096 Oct 9 02:04 drivers
-rw-r--r-- 1 root root 389566464 Mar 30 10:55 locking.tdb
drwxr-xr-x 2 root root 4096 Oct 9 02:04 netlogon
drwxrwx--- 2 root users 4096 Oct 9 02:04 profiles
Eventually the file could easily grow to 900+ MB's in size and this caused terrible performance problems when logging in (and out). In case the environment consists of a cluster, the problem would also follow the users.
A bug was found when CROSS_PROTOCOL_LOCKS is enabled, and when roaming profiles on the desktop environment are used to write the users profiles to the server.
This bug caused the /var/lib/samba/locking.tdb file to grow very large in size, as records were constantly written to this locking.tdb file, but the same records were never cleaned up after the client logged out.
E.g.:
OES2SP2LX:/var/lib/samba # ll
total 380824
drwxrwxr-x 9 root ntadmin 4096 Oct 9 02:04 drivers
-rw-r--r-- 1 root root 389566464 Mar 30 10:55 locking.tdb
drwxr-xr-x 2 root root 4096 Oct 9 02:04 netlogon
drwxrwx--- 2 root users 4096 Oct 9 02:04 profiles
Eventually the file could easily grow to 900+ MB's in size and this caused terrible performance problems when logging in (and out). In case the environment consists of a cluster, the problem would also follow the users.
Resolution
The setting for CROSS_PROTOCOL_LOCKS can be set to on or off on a number of ways such as using Novell Remote Manager or ncpcon as a work-around.
A solution for the problem has been released with the ncp patch as was released with the OES2 SP2 September 2010 Scheduled Maintenance patch (oes2sp2-Sept-2010-Scheduled-Maintenance-7145-6).
A solution for the problem has been released with the ncp patch as was released with the OES2 SP2 September 2010 Scheduled Maintenance patch (oes2sp2-Sept-2010-Scheduled-Maintenance-7145-6).
Additional Information
It is possible to verify which entries are written to the locking.tdb file by using the tdbdump command.
For example: "tdbdump /var/lib/samba/locking.tdb" will show you if entries that are written to this file are also being cleaned after a logout.
This will show as below :
tdbdump /var/lib/samba/locking.tdb
{
key(16) = "\16\00\00\00\00\00\00\008\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\008\99&\00\00\00\00\00\04 \00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.ldb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\002\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\002\99&\00\00\00\00\00\FE\1F\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.mdb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00"
data(238) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\B5\FB=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00\09\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/DATA/Project/106 Novell/Cluster/Concep-Final.doc\00"
It is possible to manually verify the file's content this way, or it is possible to do the same using this in combination with the wc command to print the number of newlines, words, and bytes in the file.
For example: "tdbdump /var/lib/samba/locking.tdb" will show you if entries that are written to this file are also being cleaned after a logout.
This will show as below :
tdbdump /var/lib/samba/locking.tdb
{
key(16) = "\16\00\00\00\00\00\00\008\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\008\99&\00\00\00\00\00\04 \00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.ldb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\002\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\002\99&\00\00\00\00\00\FE\1F\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.mdb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00"
data(238) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\B5\FB=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00\09\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/DATA/Project/106 Novell/Cluster/Concep-Final.doc\00"
It is possible to manually verify the file's content this way, or it is possible to do the same using this in combination with the wc command to print the number of newlines, words, and bytes in the file.