New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Send/Recv backward compatibility is broken with ZFS v0.7.x #6507
Comments
|
Install latest version - 0.6.5.11 or 0.7. 0.6.5.9 may have problems with recv from newer openZFS versions. Closed as #5699 duplicate. |
|
About compatibility - we don't break disk data format, but API and ABI will be stabilized only in 1.0 release. |
|
Ok, so it's just
It's understood, but just to be clear - does "send/recv stream" format is fixed and/or versioned? @gmelikov Thanks! |
|
There is some minimal version compatibility information in the stream that is only relevant when using the extra parameters, such as |
|
@gmelikov Just tried with Debian ZFS version that you recommend and got same bug. System halted when started recv. Sending side: Is issue really fixed in v0.6.5.11 or that was just a guess?) |
|
IIRC there was some problems we fixed in 0.6.5.11, looks like it's not your case. Unfortunately the best method is to update to 0.7 on both sides, this release includes many useful updates, and this behavior may be found in other OpenZFS systems too. Fortunately it's only one minor regression we have. Be ready for API/ABI incompatibility problems before version 1.0. |
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems.the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11)
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems.the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: refs/heads/spl-0.6.5-release
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: 'refs/heads/spl-0.6.5-release'
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: 3010774dd6ad6e6eb1f6a4d9c603dd49c55c79c9
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: spl-0.6.5-release
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: spl-0\.6\.5-release
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: "spl-0.6.5-release" Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
this combines changes from e6d3a84 OpenZFS 6393 - zfs receive a full send as a clone and 50c957f Implement large_dnode pool feature to hopefully allow sending regular streams from 0.7.x to 0.6.5.x based systems. the problematic records of the following kind now no longer lead to an infinite loop, but instead allow the receive to complete: drr_type = FREEOBJECTS firstobj = 64 numobjs = 36028797018963904 err = 0 see issues openzfs#5699 (older incompatibility between FreeNAS and <= 0.6.5.11) and openzfs#6507 (recent incompatibility between 0.7.x and <= 0.6.5.11) Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Requires-spl: refs/pull/647/head
|
see #6616 for some analysis and maybe further progress/workarounds |
All objects after the last written or freed object are not supposed to exist after receiving the stream. Free them accordingly, as if a freeobjects record for them had been included in the stream. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes #5699 Closes #6507 Closes #6616
When sending an incremental stream based on a snapshot, the receiving side must have the same base snapshot. Thus we do not need to send FREEOBJECTS records for any objects past the maximum one which exists locally. This allows us to send incremental streams (again) to older ZFS implementations (e.g. ZoL < 0.7) which actually try to free all objects in a FREEOBJECTS record, instead of bailing out early. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes #5699 Closes #6507 Closes #6616
All objects after the last written or freed object are not supposed to exist after receiving the stream. Free them accordingly, as if a freeobjects record for them had been included in the stream. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes openzfs#5699 Closes openzfs#6507 Closes openzfs#6616
When sending an incremental stream based on a snapshot, the receiving side must have the same base snapshot. Thus we do not need to send FREEOBJECTS records for any objects past the maximum one which exists locally. This allows us to send incremental streams (again) to older ZFS implementations (e.g. ZoL < 0.7) which actually try to free all objects in a FREEOBJECTS record, instead of bailing out early. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes openzfs#5699 Closes openzfs#6507 Closes openzfs#6616
All objects after the last written or freed object are not supposed to exist after receiving the stream. Free them accordingly, as if a freeobjects record for them had been included in the stream. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes openzfs#5699 Closes openzfs#6507 Closes openzfs#6616
When sending an incremental stream based on a snapshot, the receiving side must have the same base snapshot. Thus we do not need to send FREEOBJECTS records for any objects past the maximum one which exists locally. This allows us to send incremental streams (again) to older ZFS implementations (e.g. ZoL < 0.7) which actually try to free all objects in a FREEOBJECTS record, instead of bailing out early. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes openzfs#5699 Closes openzfs#6507 Closes openzfs#6616
All objects after the last written or freed object are not supposed to exist after receiving the stream. Free them accordingly, as if a freeobjects record for them had been included in the stream. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes #5699 Closes #6507 Closes #6616
When sending an incremental stream based on a snapshot, the receiving side must have the same base snapshot. Thus we do not need to send FREEOBJECTS records for any objects past the maximum one which exists locally. This allows us to send incremental streams (again) to older ZFS implementations (e.g. ZoL < 0.7) which actually try to free all objects in a FREEOBJECTS record, instead of bailing out early. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes #5699 Closes #6507 Closes #6616
All objects after the last written or freed object are not supposed to exist after receiving the stream. Free them accordingly, as if a freeobjects record for them had been included in the stream. Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> Closes openzfs#5699 Closes openzfs#6507 Closes openzfs#6616
System information
Describe the problem you're observing
Problem is that zfs stream generated by ZFS v0.7 can't be successfully received on v0.6.5.x. Take into account that both pools has exactly the same features enabled and no special flags was enabled during
zfs send(like compression or deduplication of stream).Features on ZFS v0.7 pool:
and it's version:
[ 4.050576] ZFS: Loaded module v0.7.0-1, ZFS pool version 5000, ZFS filesystem version 5My case:
I use my ArchLinux(zfs ~v0.7) server as a backup server for CentOS(zfs 0.6.5.9) server. Full replication ZFS stream generated by CentOS server with
zfs send -Rsuccessfully received on ArchLinux, but when I tried to restore CentOS server from such backupzfs send -R archlinux_pool/backup | ssh centos zfs receive centos_poolit doesn't work - zfs recv process hangs and takes 100% cpu time (sy) and do nothing. System is still remains responsible.Upgrading CentOS server to v0.7.1 before receiving this old stream fixes the problem.
I've also tried to boot into two rescue systems (Debian with zfs 0.6.5.x and FreeBSD 10.x) and import this CentOS's pool then receive stream - whole server hangs completely in both cases.
Reproducible 100% of time.
If such kind of backward compatibility is not guarantied(really?) than
zfs recvshould immediately print exact error instead of hanging the server. Also, there should be some kind of versioning and probably some flag likezfs send --maximize-compatibilityor--generate-for=0.6.5or some other workaround because upgrading ZFS on receiving side is often not a option at all.Describe how to reproduce the problem
zfs send -Rfrom first server to second (success)zfs recvfrom second to first (zfs process hangs or even whole server hangs)Include any warning/errors/backtraces from the system logs
Unfortunately no errors seen in dmesg or stderr/out
The text was updated successfully, but these errors were encountered: