Currently PFS3 appears to be limited to 137GB maximum partition size. This limit should be raised, at least if it doesn't lead into filesystem format incompatibilities.
The limit is imposed by the reserved area - the area of the disk where all the meta data is stored. CalcNumReserved in format.c will fail at 100GB. This should be easy to fix.
The limit imposed by the structure of the reserved area is defined in blocks.h
#define MAXDISKSIZE (104*253*253*32)
which is in 512 byte sectors, it calculates to about 100G.
The reasoning is thus: 104 superindexblocks referring to 253 bitmapblocks which each map 253*32 blocks. The limit can be increased by
- increasing the size of the blocks in the reserved area
- increasing the general blocksize
- increasing the number of superindexblocks
- adding a level of indirection.
Increasing the size of the reserved blocks from 1K now to 2K, but that will increase memory use as well. With 2K blocks the limit imposed by the bitmap becomes
104*509*509*32 = 400G.
with 4K we get 1.5T.
The larger rootblock has more space for pointers adding another factor 2.
Mapping 1K or even 2K, 4K data blocks instead of 512byte sectors adds another factor 2, 4 or 8.
The size of the reserved blocks already is a setting in the rootblock, the blksize (but sizes other than 1K are not yet supported).
Adding a level of indirection has the biggest gain, but also has the biggest cost in performance and memory use.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The limit is imposed by the reserved area - the area of the disk where all the meta data is stored. CalcNumReserved in format.c will fail at 100GB. This should be easy to fix.
The limit imposed by the structure of the reserved area is defined in blocks.h
#define MAXDISKSIZE (104*253*253*32)
which is in 512 byte sectors, it calculates to about 100G.
The reasoning is thus: 104 superindexblocks referring to 253 bitmapblocks which each map 253*32 blocks. The limit can be increased by
- increasing the size of the blocks in the reserved area
- increasing the general blocksize
- increasing the number of superindexblocks
- adding a level of indirection.
Increasing the size of the reserved blocks from 1K now to 2K, but that will increase memory use as well. With 2K blocks the limit imposed by the bitmap becomes
104*509*509*32 = 400G.
with 4K we get 1.5T.
The larger rootblock has more space for pointers adding another factor 2.
Mapping 1K or even 2K, 4K data blocks instead of 512byte sectors adds another factor 2, 4 or 8.
The size of the reserved blocks already is a setting in the rootblock, the blksize (but sizes other than 1K are not yet supported).
Adding a level of indirection has the biggest gain, but also has the biggest cost in performance and memory use.