zfs receive abort(): internal error: File too large

Fabian Keil freebsd-listen at fabiankeil.de
Sat Jul 19 10:01:03 UTC 2014


Receiving a certain differential snapshot reproducible triggers
an assertion in zfs(8) on my system (currently 11-CURRENT r268660,
but I'll rebuild with HEAD over the weekend):

| fk at r500 ~ $zogftw sync
| [...]
| receiving incremental stream of tank/usr/local at 2014-06-23_22:33 into intenso1/backup/r500/tank/usr/local at 2014-06-23_22:33
| in @ 29.4 MiB/s, out @  0.0 KiB/s, 4674 MiB total, buffer 100% fullinternal error: File too large
| mbuffer: error: outputThread: error writing to <stdout> at offset 0x1241c0000: Broken pipe
| summary: 4674 MiByte in  3 min 45.9 sec - average of 20.7 MiB/s
| mbuffer: warning: error during output to <stdout>: Broken pipe

| fk at r500 ~ $gdb-core zfs.core 
| [...]
| Reading symbols from /sbin/zfs...done.
| [New process 101713]
| [New Thread 803006400 (LWP 101713)]
| Core was generated by `zfs'.
| Program terminated with signal 6, Aborted.
| #0  kill () at kill.S:3
| 3	RSYSCALL(kill)
| (gdb) where
| #0  kill () at kill.S:3
| #1  0x00000008019fa016 in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:45
| #2  0x00000008019f8849 in abort () at /usr/src/lib/libc/stdlib/abort.c:65
| #3  0x000000080168ba92 in zfs_verror (hdl=<optimized out>, error=<optimized out>, fmt=<optimized out>, ap=<optimized out>, hdl=<optimized out>, 
|     error=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c:277
| #4  zfs_standard_error_fmt (hdl=<optimized out>, error=<optimized out>, fmt=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c:403
| #5  0x000000080168b485 in zfs_standard_error (hdl=0x3022, warning: Unmapped DWARF Register #-2 encountered.
| error=<error reading variable: Unable to access DWARF register number 0xfffffffe>, 
|     msg=0x8019fa10a <getpid+10> "\017\202\214\031") at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c:341
| #6  0x0000000801681b9a in zfs_receive_one (hdl=<optimized out>, infd=<optimized out>, tosnap=<optimized out>, flags=<optimized out>, drr=0x0, 
|     drr_noswap=0x0, sendfs=<optimized out>, stream_nv=<optimized out>, stream_avl=<optimized out>, cleanup_fd=<optimized out>, 
|     action_handlep=<optimized out>, top_zfs=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c:3109
| #7  zfs_receive_impl (hdl=0x80301a200, tosnap=<optimized out>, flags=0x7fffffffde90, infd=<optimized out>, sendfs=<optimized out>, 
|     stream_nv=<optimized out>, stream_avl=<optimized out>, top_zfs=<optimized out>, cleanup_fd=<optimized out>, action_handlep=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c:3275
| #8  0x0000000801681395 in zfs_receive_package (destname=<optimized out>, flags=<optimized out>, drr=0x0, zc=0x3001777c1, top_zfs=<optimized out>, 
|     cleanup_fd=<optimized out>, action_handlep=<optimized out>, hdl=<optimized out>, fd=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c:2501
| #9  zfs_receive_impl (hdl=0x80301a200, tosnap=0x7fffffffeae5 "intenso1/backup/r500/tank/usr/local", flags=0x7fffffffde90, infd=0, 
|     sendfs=<optimized out>, stream_nv=<optimized out>, stream_avl=<optimized out>, top_zfs=<optimized out>, cleanup_fd=<optimized out>, 
|     action_handlep=<optimized out>) at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c:3281
| #10 0x000000080167fe71 in zfs_receive (hdl=0x80301a200, tosnap=0x7fffffffeae5 "intenso1/backup/r500/tank/usr/local", flags=0x7fffffffde90, infd=0, 
|     stream_avl=0x0) at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c:3304
| #11 0x00000000004099a1 in zfs_do_receive (argc=<optimized out>, argv=0x7fffffffe7a0)
|     at /usr/src/cddl/sbin/zfs/../../../cddl/contrib/opensolaris/cmd/zfs/zfs_main.c:3950
| #12 0x000000000040572f in main (argc=<optimized out>, argv=<optimized out>)
|     at /usr/src/cddl/sbin/zfs/../../../cddl/contrib/opensolaris/cmd/zfs/zfs_main.c:6953
| (gdb) f 3
| #3  0x000000080168ba92 in zfs_verror (hdl=<optimized out>, error=<optimized out>, fmt=<optimized out>, ap=<optimized out>, hdl=<optimized out>, 
|     error=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
|     at /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c:277
| 277				abort();
| (gdb) l
| 272	
| 273		if (hdl->libzfs_printerr) {
| 274			if (error == EZFS_UNKNOWN) {
| 275				(void) fprintf(stderr, dgettext(TEXT_DOMAIN, "internal "
| 276				    "error: %s\n"), libzfs_error_description(hdl));
| 277				abort();
| 278			}
| 279	
| 280			(void) fprintf(stderr, "%s: %s\n", hdl->libzfs_action,
| 281			    libzfs_error_description(hdl));

What zogftw does is:

|    0   4640   3703 sudo -c - zfs send -I @2013-12-22_11:27 tank/usr/local at 2014-06-23_22:33
| 1001   4641   3703 mbuffer -m 100M
|    0   4642   3703 sudo -c - zfs receive -v -u -F intenso1/backup/r500/tank/usr/local
|    0   4643   4640 zfs send -I @2013-12-22_11:27 tank/usr/local at 2014-06-23_22:33
|    0   4644   4642 zfs receive -v -u -F intenso1/backup/r500/tank/usr/local

It happens when receiving to other pools as well,
mbuffer always gets to 67.1 MiB.

zstreamdump doesn't seem to consider the stream objectionable:

| fk at r500 ~ $sudo zfs send -I @2013-12-22_11:27 tank/usr/local at 2014-06-23_22:33 | zstreamdump
| BEGIN record
| 	hdrtype = 2
| 	features = 4
| 	magic = 2f5bacbac
| 	creation_time = 0
| 	type = 0
| 	flags = 0x0
| 	toguid = 0
| 	fromguid = 0
| 	toname = tank/usr/local at 2014-06-23_22:33
| END checksum = 2fb1374c0/c59b43b4b2/1a3f6af4955b/262293c445759
| BEGIN record
| 	hdrtype = 1
| 	features = 4
| 	magic = 2f5bacbac
| 	creation_time = 53a88f1e
| 	type = 2
| 	flags = 0x0
| 	toguid = f2e0cfa41ab80745
| 	fromguid = f1f10991be60bd7d
| 	toname = tank/usr/local at 2014-06-23_22:33
| END checksum = 1bdac72d140ea8d1/9e56d965e806168a/ed215fadf1a47e7f/a99aa9cca7be2746
| END checksum = 0/0/0/0
| SUMMARY:
| 	Total DRR_BEGIN records = 2
| 	Total DRR_END records = 3
| 	Total DRR_OBJECT records = 98837
| 	Total DRR_FREEOBJECTS records = 796
| 	Total DRR_WRITE records = 140583
| 	Total DRR_WRITE_BYREF records = 0
| 	Total DRR_WRITE_EMBEDDED records = 0
| 	Total DRR_FREE records = 103847
| 	Total DRR_SPILL records = 0
| 	Total records = 344068
| 	Total write size = 7722947584 (0x1cc52d400)

Receiving tank/usr/local at 2014-06-23_22:33 non-incrementally works
as expected, receiving additional incremental snapshots works too.

The zpools:

| fk at r500 ~ $zpool status
|   pool: intenso1
|  state: ONLINE
|   scan: scrub repaired 0 in 0h8m with 0 errors on Fri Jul 18 17:42:59 2014
| config:
| 
| 	NAME                  STATE     READ WRITE CKSUM
| 	intenso1              ONLINE       0     0     0
| 	  label/intenso1.eli  ONLINE       0     0     0
| 
| errors: No known data errors
| 
|   pool: tank
|  state: ONLINE
| status: Some supported features are not enabled on the pool. The pool can
| 	still be used, but some features are unavailable.
| action: Enable all features using 'zpool upgrade'. Once this is done,
| 	the pool may no longer be accessible by software that does not support
| 	the features. See zpool-features(7) for details.
|   scan: scrub repaired 0 in 4h11m with 0 errors on Sat Mar 22 18:25:01 2014
| config:
| 
| 	NAME           STATE     READ WRITE CKSUM
| 	tank           ONLINE       0     0     0
| 	  ada0s1d.eli  ONLINE       0     0     0
| 
| errors: No known data errors

| fk at r500 ~ $zpool upgrade
| This system supports ZFS pool feature flags.
| 
| All pools are formatted using feature flags.
| 
| 
| Some supported features are not enabled on the following pools. Once a
| feature is enabled the pool may become incompatible with software
| that does not support the feature. See zpool-features(7) for details.
| 
| POOL  FEATURE
| ---------------
| tank
|       embedded_data
 
| fk at r500 ~ $zpool list
| NAME       SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
| intenso1  2.72T  13.3G  2.71T     0%  1.00x  ONLINE  -
| tank       228G   193G  35.2G    84%  1.00x  ONLINE  -

According to my logs, I first saw the problem with r267067
(using a different receiving pool), but as the dataset hasn't
been zfs-sent for about 6 months, the problem could be quite
a bit older.

Fabian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20140719/354e947c/attachment.sig>


More information about the freebsd-fs mailing list