Each partition of the table (clustered table or a heap table) or partition of the non-clustered index is stored on a single filegroup. Several or all partitions or even all objects can share the same filegroup. The key points are:
1) single filegroup can consist of more than one files. And should, in most of the cases! Think about 4 equal files per filegroup. Too much files in filegroup is also not good, but single file per filegroup is often not good.
2) you hold a database file on a single disc? That is not just bad for performance (because multiple discs running in parallel will easily outperform that) but it is also dangerous. If the disk is damaged, you don't have redundancy and you have downtime
and lower availability. Consider RAID10 arrays. You need at least 4 disks, even number of disks. Capacity is half of the disks, but it is the king in speed and reliability, for both reads and writes. If RAID10 is too expensive for the available budget for
disks, consider RAID5. RAID5 is much much slower in writes, several times slower than RAID10. Reads are ok, comparable to RAID10, sometimes slightly exceeding.
3) build your clustered and non-clustered indexes so data you read and write is physically close together. Typically, it is by time value followed by id. E.g. (DATE, INT) would be the typical clustered key for such tables. INT is identity, ever-growing column,
and DATE is also growing most of the time.
4) Consider combining partitioning with partitioned views. It is a view that combines tables that are partitioned. Partitioned view enables you independent indexing and independent online rebuilds. In SQL2008R2 single partition rebuild is offline operation.
5) Compressing the older (less used) partitions can help you reduce space occupies
IMHO, the biggest problem you have are disks, not the partitions. Build the RAID10 array for current data that is frequently read and written, and build RAID5 array for the older data that are mostly used for reading.