Ok, most of you all know this stuff, but just to restate the obvious.
A full update has all (most) of the system stuff you need on your device to run.
It makes no presumptions of what system data you currently have on your device.
On the other hand, it can refuse to update to an older version.
On Onyx a full update is about 1.5 GB or so.
An incremental update contains modifications to existing sytem data on your device.
It presumes that it is modifying a specific, known, last installed, full version.
If you have modified anything by rooting or hacking there
may be complications.
On Onyx an incremental update is about 0.5 GB or so.
To make things a bit more complicated, a single update may be partially full and partially incremental.
As an example, here is the last Poke5P full update:
Code:
Partition New Operations
-------------- ------ --------------------------------------
boot 96.0 M REPLACE[3], REPLACE_XZ[6], REPLACE_BZ[39]
dtbo 8.00 M REPLACE_XZ[1], REPLACE_BZ[3]
product 389 M REPLACE[26], REPLACE_XZ[168], REPLACE_BZ[1]
system 2.09 G REPLACE[59], REPLACE_XZ[992], REPLACE_BZ[21]
system_ext 286 M REPLACE[13], REPLACE_XZ[127], REPLACE_BZ[3]
vbmeta 8.00 k REPLACE_XZ[1]
vbmeta_system 4.00 k REPLACE_XZ[1]
vendor 487 M REPLACE[1], REPLACE_XZ[242], REPLACE_BZ[1]
xbl 3.01 M REPLACE_XZ[2]
You can see that it does not contain every single partition.
But the ones that it does have, it fully overwrites.
If you replaced the boot image for Magisk you won't have root afterwards, but it won't explode.
Here is a Poke5P incremental update:
Code:
Partition Old New Operations
-------------- ------ ------ --------------------------------------
abl 148 k REPLACE_XZ[1]
boot 96.0 M 96.0 M ZERO[40], SOURCE_COPY[1], PUFFDIFF[1], BROTLI_BSDIFF[1]
dtbo 8.00 M 8.00 M ZERO[4], BROTLI_BSDIFF[1]
product 389 M 637 M ZERO[3], REPLACE_XZ[41], REPLACE_BZ[78], SOURCE_COPY[310], PUFFDIFF[6], BROTLI_BSDIFF[56]
recovery 96.0 M ZERO[35], REPLACE[3], REPLACE_XZ[9], REPLACE_BZ[1]
system 2.09 G 1.92 G ZERO[5], REPLACE_XZ[67], REPLACE_BZ[147], SOURCE_COPY[1876], PUFFDIFF[30], BROTLI_BSDIFF[293]
system_ext 286 M 284 M ZERO[2], REPLACE_XZ[3], REPLACE_BZ[25], SOURCE_COPY[252], PUFFDIFF[6], BROTLI_BSDIFF[110]
vbmeta 8.00 k 8.00 k BROTLI_BSDIFF[1]
vbmeta_system 4.00 k 4.00 k BROTLI_BSDIFF[1]
vendor 487 M 487 M ZERO[3], SOURCE_COPY[800], BROTLI_BSDIFF[203]
xbl 3.01 M 3.01 M ZERO[4], REPLACE_XZ[1], SOURCE_COPY[5]
It modifies lots of things and if those things aren't how it expects there are going to be problems.
Note that abl is fully replaced. If you were looking just for that you could use a payload dumper and get a clean copy.
The other files, like boot, can not be extracted except in the context of a device updated to a specific full update.
(These printouts are from a work-in-progress utility.)