### 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
LVM_SBIN_PATH=/sbin
DEVLINKS=/dev/block/252:1 /dev/disk/by-path/pci-0000:00:07.0-virtio-pci-virtio2-part1 /dev/disk/by-uuid/57b1a3e7-9019-4747-9809-7ec52bba9179
"""
MTAB = """
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=8044400k,nr_inodes=2011100,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,seclabel,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
/dev/mapper/fedora_dhcp129--186-root / ext4 rw,seclabel,relatime,data=ordered 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=24,pgrp=1,timeout=0,minproto=5,maxproto=5,direct 0 0
debugfs /sys/kernel/debug debugfs rw,seclabel,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0