Storage devices store data (usually permanently). Examples of storage device are hard disk, CD, DVD, flash disk, ram disk, etc.
Storage device provides one or more disks. Disk can be either permanent (like for hard disk) or removable (CD). Storage device can provide more than one disk (for example SATA bus).
Disk represents storage medium. The medium is usually block oriented (i.e. it consists of number of blocks of uniform size). Disk device driver represents the disk as data object, where request to specified offset returns block into which the offset points.
Size of a disk is returned by data size function.
Filesystem is component, which allows storing of data objects (files) on disk. Filesystem basically organizes a disk in such a way, it can be represented as table of named records (possibly nested).
Standard dynamic casting mechanism can be used to determine what type of filesystem is stored on disk.
The data object used to host filesystem does not have to be disk. Any data object will do. For example .iso files are handled by ISO9660 filesystem component. Also implementing new file systems is much easier, as it is possible to develop it using file n some existing filesystem, or evem block of memory to make the tests fast.
Most archives, like ZIP or TAR can be thought of as a file system in a file.