You can use a tool like mcaselector to find and remove unused chunks to reduce the space. you can especially use this to trim chunks outside your worldborder.
shrinking the worldborder will NOT automatically remove already generated areas outside your new worldborder.
Uses more RAM, and isn't quite as flushy in terms of chunk saving, since it has to write data region files at a time instead of chunks at a time
I'm kind of curious how efficient storage would have been if the linear format made use of training zstd's external dictionary for the region and still compressing each chunk independently instead of just compressing everything all as one stream.
On paper (the phrase, not the server) at least it may actually work better for larger worlds since its going to need less iops to load regions, making it more suitable for HDD backed storage. Though as always, ymmv
What were you testing it on? zstd is blisteringly fast to decompress, but only if you're not CPU starved, making this not necessairly well suited for a hosting service.
The major cost of linear paper is that it's going to decompress all 1024 chunk columns every time you load a region, if you were to random teleport to coordinates (step through a nether portal, etc), that could mean loading up to 4 regions at once if you're at both the x and z border of regions. which would take it a moment.
Once that cost has been paid, you should have all chunk columns for the regions loaded in memory, hence no additional loading time spent.
While I'm defending zstd here, I'm actually not happy with the design decisions of the linear region file format; it's like they didn't even read the spec docs of zstd before they decided to use it.