### Summary

When `hardware/linux.py` is gathering facts, if `get_mount_info()` (inside `get_mount_facts()`) fails and `res.successful()` returns false, then it tries to call `res.get()` on the result:

https://github.com/ansible/ansible/blob/d1c49f2e1c991b56060267b38751dad4ba703bdb/lib/ansible/module_utils/facts/hardware/linux.py#L576-L577

However, `multiprocessing.pool.AsyncResult.get()` is defined to reraise the exception, not return it: https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.AsyncResult.get

This causes the entire `hardware` fact gathering to fail due to the reraised exception. Additionally, this exception gets eaten by the following handler. The `sys.stderr.write` doesn't seem to print to the controller's terminal. I had to remove it in order to see the stack trace.

https://github.com/ansible/ansible/blob/d1c49f2e1c991b56060267b38751dad4ba703bdb/lib/ansible/module_utils/facts/ansible_collector.py#L75-L77

The end result is that whenever `get_mount_info()` on the async pool fails, the exception is reraised outside of the `multiprocessing` context and _all_ of the `hardware/*.py` facts get silently dropped.

### Issue Type

Bug Report

### Component Name

facts

### Ansible Version

```console
ansible 2.10.9
  config file = None
  configured module search path = ['/home/jenkins/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, May  6 2021, 00:05:59) [GCC 10.2.1 20201203]
```


### Configuration

```console
(no output)
```


### OS / Environment

Controller:
* Alpine Linux 3.13.5
* Python 3.8

All target hosts:
* CentOS 7
* Python 2.7


### Steps to Reproduce

```yaml
    - name: Gather hardware facts
      setup:
        gather_subset: '!all,!min,hardware'

    - name: DEBUG - Dump host vars state if fact gathering does not include mount information
      debug:
        var: ansible_facts
      when: ansible_mounts is not defined
```
With this playbook, it may take many reruns to reproduce the issue (need `get_mount_info()` to fail). It may be easier to simply edit `hardware/linux.py` to make `get_mount_info()` always throw an exception since the issue is in the error handling code.

### Expected Results

When `get_mount_info()` fails, the exception information should show up in the `['info']['note']` field of the mountpoint fact. (Additionally, I think that any hard failures during fact gathering should have some error printed to the screen instead of being silently ignored.)

### Actual Results

```console
When `get_mount_info()` fails, all `hardware` facts are silently ignored/dropped.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
uptime_facts = {}
        uptime_file_content = get_file_content('/proc/uptime')
        if uptime_file_content:
            uptime_seconds_string = uptime_file_content.split(' ')[0]
            uptime_facts['uptime_seconds'] = int(float(uptime_seconds_string))
        return uptime_facts
    def _find_mapper_device_name(self, dm_device):
        dm_prefix = '/dev/dm-'
        mapper_device = dm_device
        if dm_device.startswith(dm_prefix):
            dmsetup_cmd = self.module.get_bin_path('dmsetup', True)
            mapper_prefix = '/dev/mapper/'
            rc, dm_name, err = self.module.run_command("%s info -C --noheadings -o name %s" % (dmsetup_cmd, dm_device))
            if rc == 0:
                mapper_device = mapper_prefix + dm_name.rstrip()
        return mapper_device
    def get_lvm_facts(self):
        """ Get LVM Facts if running as root and lvm utils are available """
        lvm_facts = {}
        if os.getuid() == 0 and self.module.get_bin_path('vgs'):
            lvm_util_options = '--noheadings --nosuffix --units g --separator ,'
            vgs_path = self.module.get_bin_path('vgs')
            
            vgs = {}
            if vgs_path:
                rc, vg_lines, err = self.module.run_command('%s %s' % (vgs_path, lvm_util_options))
                for vg_line in vg_lines.splitlines():
                    items = vg_line.strip().split(',')
                    vgs[items[0]] = {'size_g': items[-2],