def load(self, filename, bs=512):
        """Starts filesystem analysis. Detects supported filesystems and \
        loads :attr:`partitions` array.

        Args:
            filename - Path to file or device for reading.

        Raises:
            IOError - File/device does not exist or is not readable.
        """
        self.__filename = filename
        self.__volumes = []

        # Detect partitioning scheme
        self.__partition_scheme = rawdisk.scheme.common.detect_scheme(filename)

        plugin_objects = [plugin.plugin_object for plugin in self.__fs_plugins]
        fs_detector = FilesystemDetector(fs_plugins=plugin_objects)

        if self.__partition_scheme == PartitionScheme.SCHEME_MBR:
            self.__load_mbr_volumes(filename, fs_detector, bs)
        elif self.__partition_scheme == PartitionScheme.SCHEME_GPT:
            self.__load_gpt_volumes(filename, fs_detector, bs)
        else:
            self.logger.warning('Partitioning scheme could not be determined.')
            # try detecting standalone volume
            volume = fs_detector.detect_standalone(filename, offset=0)
            if volume is not None:
                volume.load(filename, offset=0)
                self.__volumes.append(volume)
            else:
                self.logger.warning(
                    'Were not able to detect standalone volume type')