### Summary

Detection of device serial number relies on `sg_inq` command, particularly on searching for `Unit serial number:` string in the output. However the output is different on RHEL 8, so serial number isn't detected, below is an example:
```
# sg_inq /dev/nvme0n1
Identify controller for /dev/nvme0n1:
  Model number: Amazon Elastic Block Store
  Serial number: vol00030c2ca006fa585
  Firmware revision: 1.0
  Version: 0.0
  No optional admin command support
  No optional NVM command support
  PCI vendor ID VID/SSVID: 0x1d0f/0x1d0f
  IEEE OUI Identifier: 0xa002dc
  Controller ID: 0x0
  Number of namespaces: 1
  Maximum data transfer size: 64 pages
  Namespace 1 (deduced from device name):
    Namespace size/capacity: 62914560/62914560 blocks
    Namespace utilization: 0 blocks
    Number of LBA formats: 1
    Index LBA size: 0
    LBA format 0 support: <-- active
      Logical block size: 512 bytes
      Approximate namespace size: 32 GB
      Metadata size: 0 bytes
      Relative performance: Best [0x0]
```
I'd propose to use the `lsblk` command to get serial number more reliable, for example:
```
# lsblk /dev/nvme0n1 -d -l -o SERIAL -n
vol00030c2ca006fa585
```
Below is proposed patch:
```diff
--- site-packages/ansible/module_utils/facts/hardware/linux.py.orig  2021-04-13 01:03:23.000000000 +0200
+++ site-packages/ansible/module_utils/facts/hardware/linux.py       2021-08-06 11:50:47.683629740 +0200
@@ -698,15 +698,14 @@
             for key in ['vendor', 'model', 'sas_address', 'sas_device_handle']:
                 d[key] = get_file_content(sysdir + "/device/" + key)

-            sg_inq = self.module.get_bin_path('sg_inq')
+            lsblk_path = self.module.get_bin_path('lsblk')

-            if sg_inq:
-                device = "/dev/%s" % (block)
-                rc, drivedata, err = self.module.run_command([sg_inq, device])
+            if lsblk_path:
+                rc, drivedata, err = self.module.run_command("%s /dev/%s -d -l -o SERIAL -n" % (lsblk_path, block))
                 if rc == 0:
-                    serial = re.search(r"Unit serial number:\s+(\w+)", drivedata)
+                    serial = drivedata.rstrip()
                     if serial:
-                        d['serial'] = serial.group(1)
+                        d['serial'] = serial

             for key, test in [('removable', '/removable'),
                               ('support_discard', '/queue/discard_granularity'),
```

### Issue Type

Bug Report

### Component Name

module_utils/facts/hardware/linux.py

### Ansible Version

```console
$ ansible --version
ansible 2.10.8
  config file = /home/velisseev/aws/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/blue-python/3.6/lib/python3.6/site-packages/ansible
  executable location = /opt/blue-python/3.6/bin/ansible
  python version = 3.6.13 (default, Feb 22 2021, 12:57:38) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
```


### Configuration

```console
$ ansible-config dump --only-changed
ANSIBLE_FORCE_COLOR(/home/xxx/aws/ansible/ansible.cfg) = True
ANSIBLE_PIPELINING(/home/xxx/aws/ansible/ansible.cfg) = True
ANSIBLE_SSH_ARGS(/home/xxx/aws/ansible/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=1800s
ANSIBLE_SSH_RETRIES(/home/xxx/aws/ansible/ansible.cfg) = 3
COLOR_DIFF_REMOVE(/home/xxx/aws/ansible/ansible.cfg) = yellow
DEFAULT_FORKS(/home/xxx/aws/ansible/ansible.cfg) = 50
DEFAULT_HOST_LIST(/home/xxx/aws/ansible/ansible.cfg) = ['/home/xxx/aws/ansible/inventory']
DEFAULT_LOG_PATH(env: ANSIBLE_LOG_PATH) = /home/xxx/ansible.log
DEFAULT_MANAGED_STR(/home/xxx/aws/ansible/ansible.cfg) = Ansible managed
DEFAULT_REMOTE_USER(/home/xxx/aws/ansible/ansible.cfg) = centos
DEFAULT_STDOUT_CALLBACK(/home/xxx/aws/ansible/ansible.cfg) = yaml
DISPLAY_SKIPPED_HOSTS(env: ANSIBLE_DISPLAY_SKIPPED_HOSTS) = True
HOST_KEY_CHECKING(/home/xxx/aws/ansible/ansible.cfg) = False
INJECT_FACTS_AS_VARS(/home/xxx/aws/ansible/ansible.cfg) = True
SHOW_CUSTOM_STATS(/home/xxx/aws/ansible/ansible.cfg) = True
```


### OS / Environment

RHEL 8

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)
- name: Collect facts for devices
  setup:
    gather_subset:
      - '!all'
      - '!any'
      - devices
- debug:
    var: ansible_facts.devices
```


### Expected Results

Serial numbers should be included while then don't.

### Actual Results

```console
Serial numbers are not included in `ansible_facts.devices` dict.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'processor_vcpus': 8
        },
    },
    {
        'cpuinfo': open(os.path.join(os.path.dirname(__file__), '../fixtures/cpuinfo/ppc64le-power8-24cpu-cpuinfo')).readlines(),
        'architecture': 'ppc64le',
        'nproc_out': 24,
        'sched_getaffinity': set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]),
        'expected_result': {
            'processor': [
                '0', 'POWER8 (architected), altivec supported',
                '1', 'POWER8 (architected), altivec supported',
                '2', 'POWER8 (architected), altivec supported',
                '3', 'POWER8 (architected), altivec supported',
                '4', 'POWER8 (architected), altivec supported',
                '5', 'POWER8 (architected), altivec supported',
                '6', 'POWER8 (architected), altivec supported',
                '7', 'POWER8 (architected), altivec supported',
                '8', 'POWER8 (architected), altivec supported',
                '9', 'POWER8 (architected), altivec supported',
                '10', 'POWER8 (architected), altivec supported',
                '11', 'POWER8 (architected), altivec supported',
                '12', 'POWER8 (architected), altivec supported',
                '13', 'POWER8 (architected), altivec supported',
                '14', 'POWER8 (architected), altivec supported',
                '15', 'POWER8 (architected), altivec supported',
                '16', 'POWER8 (architected), altivec supported',
                '17', 'POWER8 (architected), altivec supported',
                '18', 'POWER8 (architected), altivec supported',
                '19', 'POWER8 (architected), altivec supported',