backupd IOERROR reading backup files larger than 2GB

ellie timoney ellie at fastmail.com
Sun Jun 16 20:44:16 EDT 2019


Hi Carlos,

Sudden overnight intuition, and I think this will fix the issue -- the problem isn't that the lseek is failing at >2GB; the problem is that its off_t return value is being truncated to an int before being checked to see if it's negative for the error case (so any "I succeeded, the offset is > 2GB" response looks like "negative, it's an error"). Doh!

I think this will fix the immediate issue:
https://github.com/cyrusimap/cyrus-imapd/commit/63f8c09fa2076c0e2fa55436e071e3e341fe48b6

But then I found and fixed some similar ones:
https://github.com/cyrusimap/cyrus-imapd/commit/0930d3af4ed9bd44d328db8cfa4d9f2e2be7bada

Remains to be seen whether more similar issues pop up -- since no-one's tripped over this previously, I guess you're the first person to try this with a >2GB backup file :(

Cheers,

ellie

On Fri, Jun 14, 2019, at 3:50 PM, ellie timoney wrote:
> Hi Carlos,
> 
> This is quite weird, I'm not sure why a 64bit platform would have any trouble around the 2GB mark??
> 
> What does the Cyrus ./configure report for your system's integer sizes? e.g. mine shows:
> 
>> checking size of int... 4 
>> checking size of long... 8 
>> checking size of size_t... 8 
>> checking size of off_t... 8 
>> checking size of time_t... 8 
>> checking size of long long int... 8 
>> checking size of unsigned long long int... 8 
>> checking whether byte ordering is bigendian... no
> 
> What's your level of comfort with C debugging? It'd be very helpful to see a core file+binary from the time that lseek error occurs?
> 
> Cheers,
> 
> ellie
> 
> On Fri, Jun 7, 2019, at 1:58 AM, Carlos Larrañaga wrote:
>> Hi Ellie,
>> 
>>  Thanks for answering. We use latest 64bit Oracle Linux (not CentOs like I said before, sorry) and zlib is also 64bit version:
>>> # uname -a
>>> Linux xxx 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 17:35:45 PDT 2019 x86_64 x86_64 x86_64 GNU/Linux
>>> 
>>> # yum list installed zlib
>>> Loaded plugins: langpacks, ulninfo
>>> Installed Packages
>>> zlib.x86_64 1.2.7-18.el7 @ol7_latest
>>> 
>>>  # lsof -p 17005 |grep lib |grep -i z
>>>  backupd 17005 cyrus mem REG 253,0 90248 134400930 /usr/lib64/libz.so.1.2.7
>>> 
>>>  # file /usr/lib64/libz.so.1.2.7
>>>  /usr/lib64/libz.so.1.2.7: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=b9d5f73428bd6ad68c96986b57bea3b7cedb9745, stripped
>>> 
>>>  # rpm -qf /usr/lib64/libz.so.1.2.7
>>>  zlib-1.2.7-18.el7.x86_64
>> I have summarized here some information about the backupd error reading the file descriptor 15, which is a backup larger than 2GB. The error is logged 1755 times. Instead, there is no error for fd 12, which is a backup of less than 2 GB:
>>> *#-- CLIENT SIDE*
>>> *-----------------------------------------------*
>>> 
>>> 
>>> # time sync_client -v -o -n backup -A
>>> Thu Jun 6 17:08:02 CEST 2019
>>> USER aaa
>>> QUOTA user.aaa
>>> USER ccc
>>> Error from do_user(ccc): bailing out!
>>> 
>>> real 30m16.223s
>>> user 0m0.006s
>>> sys 0m0.006s
>>> **
>>> 
>>> *#-- BACKUP SERVER SIDE ----------------------------------------*
>>> # LOGFILE
>>> 
>>> # tail -f /var/log/imapd.log
>>> Jun 6 17:09:11 bcrux cyrus/backupd[2584]: IOERROR: gzuc_read: lseek 15: No such file or directory
>>> Jun 6 17:09:11 bcrux cyrus/backupd[2584]: IOERROR: gzuc_read: lseek 15: No such file or directory
>>> Jun 6 17:09:11 bcrux cyrus/backupd[2584]: IOERROR: gzuc_read: lseek 15: No such file or directory
>>> Jun 6 17:09:11 bcrux cyrus/backupd[2584]: IOERROR: gzuc_read: lseek 15: No such file or directory
>>> 
>>> 
>>> *# lsof of the backupd PROCESS
*# lsof -P -p 2584 
>>> 
>>> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
>>> backupd 2584 cyrus cwd DIR 253,0 4096 128 /
>>> backupd 2584 cyrus rtd DIR 253,0 4096 128 /
>>> backupd 2584 cyrus txt REG 253,0 768632 939542214 /usr/local/cyrus/libexec/backupd
>>> backupd 2584 cyrus mem REG 253,0 37208 135746334 /usr/lib64/libnss_sss.so.2
>>> backupd 2584 cyrus mem REG 253,0 31416 134406707 /usr/lib64/libnss_dns-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 61632 134406709 /usr/lib64/libnss_files-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 43336 68814977 /usr/lib64/sasl2/webmail.so.0.0.0
>>> backupd 2584 cyrus mem REG 253,0 57960 68856627 /usr/lib64/sasl2/libdigestmd5.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 24232 68797220 /usr/lib64/sasl2/libcrammd5.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 20088 68797044 /usr/lib64/sasl2/libplain.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 20056 68797036 /usr/lib64/sasl2/liblogin.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 1845816 135873512 /usr/lib64/libdb-5.3.so
>>> backupd 2584 cyrus mem REG 253,0 28272 67113426 /usr/lib64/sasl2/libsasldb.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 20064 67113423 /usr/lib64/sasl2/libanonymous.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 11448 135872733 /usr/lib64/libfreebl3.so
>>> backupd 2584 cyrus mem REG 253,0 155784 134400716 /usr/lib64/libselinux.so.1
>>> backupd 2584 cyrus mem REG 253,0 15464 134401447 /usr/lib64/libkeyutils.so.1.5
>>> backupd 2584 cyrus mem REG 253,0 40672 134399432 /usr/lib64/libcrypt-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 105824 134781819 /usr/lib64/libresolv-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 53944 134406785 /usr/lib64/libjansson.so.4.10.0
>>> backupd 2584 cyrus mem REG 253,0 88776 135352942 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
>>> backupd 2584 cyrus mem REG 253,0 1137032 134400337 /usr/lib64/libm-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 991616 135352396 /usr/lib64/libstdc++.so.6.0.19
>>> backupd 2584 cyrus mem REG 253,0 19296 134399434 /usr/lib64/libdl-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 142008 134722750 /usr/lib64/libpthread-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 2151704 134365659 /usr/lib64/libc-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 753232 134401161 /usr/lib64/libsqlite3.so.0.8.6
>>> backupd 2584 cyrus mem REG 253,0 90248 134400930 /usr/lib64/libz.so.1.2.7
>>> backupd 2584 cyrus mem REG 253,0 11128 134400947 /usr/lib64/libpcreposix.so.0.0.1
>>> backupd 2584 cyrus mem REG 253,0 402384 134400940 /usr/lib64/libpcre.so.1.2.0
>>> backupd 2584 cyrus mem REG 253,0 67104 135269427 /usr/lib64/libkrb5support.so.0.1
>>> backupd 2584 cyrus mem REG 253,0 15920 135873508 /usr/lib64/libcom_err.so.2.1
>>> backupd 2584 cyrus mem REG 253,0 210832 134781960 /usr/lib64/libk5crypto.so.3.1
>>> backupd 2584 cyrus mem REG 253,0 967864 134781967 /usr/lib64/libkrb5.so.3.3
>>> backupd 2584 cyrus mem REG 253,0 320400 134781952 /usr/lib64/libgssapi_krb5.so.2.2
>>> backupd 2584 cyrus mem REG 253,0 115856 134400341 /usr/lib64/libnsl-2.17.so
>>> backupd 2584 cyrus mem REG 253,0 42168 134401419 /usr/lib64/libwrap.so.0.7.6
>>> backupd 2584 cyrus mem REG 253,0 2516640 134400708 /usr/lib64/libcrypto.so.1.0.2k
>>> backupd 2584 cyrus mem REG 253,0 470360 134400711 /usr/lib64/libssl.so.1.0.2k
>>> backupd 2584 cyrus mem REG 253,0 121208 134401258 /usr/lib64/libsasl2.so.3.0.0
>>> backupd 2584 cyrus mem REG 253,0 2898664 838888996 /usr/local/cyrus/lib/libcyrus_imap.so.0.0.0
>>> backupd 2584 cyrus mem REG 253,0 599528 838888999 /usr/local/cyrus/lib/libcyrus_sieve.so.0.0.0
>>> backupd 2584 cyrus mem REG 253,0 20112 134406704 /usr/lib64/libuuid.so.1.3.0
>>> backupd 2584 cyrus mem REG 253,0 20781704 136182553 /usr/lib64/libicudata.so.50.1.2
>>> backupd 2584 cyrus mem REG 253,0 1539544 136197152 /usr/lib64/libicuuc.so.50.1.2
>>> backupd 2584 cyrus mem REG 253,0 553264 838890012 /usr/local/cyrus/lib/libcyrus_min.so.0.0.0
>>> backupd 2584 cyrus mem REG 253,0 1961968 838888994 /usr/local/cyrus/lib/libcyrus.so.0.0.0
>>> backupd 2584 cyrus mem REG 253,0 163408 134355369 /usr/lib64/ld-2.17.so
>>> backupd 2584 cyrus 0u IPv4 2092952 0t0 TCP hostb1.upv.es:2005->host1.upv.es:27107 (ESTABLISHED)
>>> backupd 2584 cyrus 1u IPv4 2092952 0t0 TCP hostb1.upv.es:2005->host1.upv.es:27107 (ESTABLISHED)
>>> backupd 2584 cyrus 2u IPv4 2092952 0t0 TCP hostb1.upv.es:2005->host1.upv.es:27107 (ESTABLISHED)
>>> backupd 2584 cyrus 3w FIFO 0,9 0t0 2141764 pipe
>>> backupd 2584 cyrus 4u IPv4 2141763 0t0 TCP hostb1.upv.es:2005 (LISTEN)
>>> backupd 2584 cyrus 5u REG 0,20 0 86644 /run/cyrus-b1/socket/backupd-0.lock
>>> backupd 2584 cyrus 6r FIFO 0,9 0t0 2141754 pipe
>>> backupd 2584 cyrus 7w FIFO 0,9 0t0 2141754 pipe
>>> backupd 2584 cyrus 8r FIFO 0,9 0t0 2141755 pipe
>>> backupd 2584 cyrus 9w FIFO 0,9 0t0 2141755 pipe
>>> backupd 2584 cyrus 10u unix 0xffff9d9df53d4400 0t0 2093417 socket
>>> backupd 2584 cyrus 11w REG 253,5 680 18253611600 /b1/lib/log/admin/backupd-2584
>>> backupd 2584 cyrus 12uW REG 253,5 976281587 13958644353 /b1/bck/b1/a/aaa_ouuUx9
>>> backupd 2584 cyrus 13ur REG 253,5 3573760 13958644354 /b1/bck/b1/a/aaa_ouuUx9.index
>>> backupd 2584 cyrus 14u REG 253,5 2576 13958644355 /b1/bck/b1/a/aaa_ouuUx9.index-journal
>>> backupd 2584 cyrus 15uW REG 253,5 3104341527 12884902595 /b1/bck/b1/c/ccc_Mqmymx
>>> backupd 2584 cyrus 16u REG 253,5 47927296 12884902596 /b1/bck/b1/c/ccc_Mqmymx.index
>>> 
>>> *# BACKUP SIZES*
>>>  # ls -lh /b1/bck/b1/a/*
>>> /b1/bck/b1/c/* 
>>> *-rw------- 1 cyrus mail 932M Jun 6 17:08*
>>> /b1/bck/b1/a/*aaa_ouuUx9*
>>> -rw------- 1 cyrus mail 3.5M Jun 6 16:46
>>> /b1/bck/b1/a/aaa_ouuUx9.index
>>> -rw------- 1 cyrus mail 2.6K Jun 6 17:08
>>> /b1/bck/b1/a/aaa_ouuUx9.index-journal
>>> 
>>> -rw------- 1 cyrus mail 2.9G Jun 6 17:01 /b1/bck/b1/c/ccc_Mqmymx
>>> -rw------- 1 cyrus mail 46M Jun 6 17:01 /b1/bck/b1/c/ccc_Mqmymx.index
>>> 
>>> *# IMAP SESSION DEBUG*
>>> # cat /b1/lib/log/admin/backupd-2584
>>> ---------- admin Thu Jun 6 17:08:02 2019
>>> 
>>> <1559833682<COMPRESS DEFLATE
>>> >1559833682>OK DEFLATE active
>>> <1559833682<GET USER aaa
>>> >1559833698>* MAILBOX %(UNIQUEID acd014aa-7b1d-43c9-b1d3-f97b06540739 MBOXNAME user.aaa MBOXTYPE NIL LAST_UID 0 HIGHESTMODSEQ 2 RECENTUID 0 RECENTTIME 0 LAST_APPENDDATE 0 POP3_LAST_LOGIN 0 POP3_SHOW_AFTER 0 UIDVALIDITY 1520512152 PARTITION default ACL "aaa lrswipkxtecdan group:super lrswipkxtecdan " OPTIONS P SYNC_CRC 0 SYNC_CRC_ANNOT 0 QUOTAROOT NIL XCONVMODSEQ 0)
>>> OK Success
>>> <1559833698<APPLY QUOTA %(ROOT user.aaa LIMIT 5120000 STORAGE 5120000)
>>> >1559833698>OK Success
>>> <1559833698<GET USER ccc
>> 
>> Best regards,
>> Carlos
>> 
>> 
>> 
>> El 06/06/2019 a las 4:04, ellie timoney escribió:
>>> It kinda sounds like your platform might be 32bit? Or your zlib is compiled to use 32bit integer sizes?
>>> 
>>> On Mon, Jun 3, 2019, at 10:07 PM, Carlos Larrañaga wrote:
>>>> Hi,
>>>> 
>>>> We're testing backup feature un cyrus-imapd 3.0.10. There's no problem when backup is created first time, but when the backup already exists and is larger than 2GB, we get the following error from the backupd: 
>>>>> cyrus/backupd[xxxx]: IOERROR: gzuc_read: lseek 12: No such file or directory
>>>> As said, it happens only when then backup file already exists and is larger than 2GB. The backupd process keeps reading de compressed backup file til sync_client exit with "Error from sync_do_user(xxx): bailing out!".
>>>> 
>>>>  We use xfs with latest CentOs. Seems like backupd is unable to read the compressed backup file.
>>>> 
>>>>  Anyone else with this problem? Any idea how to fix it? 
>>>> Thanks in advance for your help.
>>>> 
>>>>  Best regards,
>>>>  Carlos.
>>>> ----
>>>> Cyrus Home Page: http://www.cyrusimap.org/
>>>> List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
>>>> To Unsubscribe:
>>>> https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
>>>> 
>>>> *Attachments:*
>>>>  * smime.p7s
>>> 
>>> 
>>> ----
Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
>>> https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
>> 
>> 
>> *Attachments:*
>>  * smime.p7s
> 
> ----
> Cyrus Home Page: http://www.cyrusimap.org/
> List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
> To Unsubscribe:
> https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.andrew.cmu.edu/pipermail/info-cyrus/attachments/20190617/c71cff80/attachment-0001.html>


More information about the Info-cyrus mailing list