Назад | Перейти на главную страницу

Почему отсутствует UUID после создания файловой системы ext4 в экземпляре RHEL7 ec2

Я использую Ansible для настройки сервера. Этот сервер работает на AWS Ec2, и я подключаю к нему четыре диска EBS.

Когда я запускаю свой доступный playbook, он терпит неудачу примерно в 50% случаев. Ошибка возникает, когда я подключаю путь к недавно отформатированному диску. Во время расследования я заметил, что на одном из четырех дисков, похоже, нет файловой системы и отсутствует его UUID. Ansible не показывает ошибок в задаче по созданию файловой системы.


Задача:

- name: Create File Systems
      filesystem:
        fstype: ext4
        dev: /dev/{{ item }}
      with_items: "{{ ansible_devices }}"
      register: filesystem
      when: item != "nvme0n1"

Пропускаю корневой том ^.

TASK [Create File Systems] ****************************************************************************************************************************************************************************************************************************************************************************************************
changed: [10.76.22.196] => (item=nvme3n1)
changed: [10.76.22.196] => (item=nvme4n1)
changed: [10.76.22.196] => (item=nvme1n1)
changed: [10.76.22.196] => (item=nvme2n1)
skipping: [10.76.22.196] => (item=nvme0n1)

Поэтому, когда он терпит неудачу, и я вхожу в систему, чтобы расследовать, я получаю следующее

[ec2-user@ip-10-76-22-196 ~]$ lsblk -f
NAME        FSTYPE LABEL UUID                                 MOUNTPOINT
nvme0n1
├─nvme0n1p1
└─nvme0n1p2 xfs          de4def96-ff72-4eb9-ad5e-0847257d1866 /
nvme1n1     ext4         35546ab6-8a1f-401f-97fa-7c9daf9005eb /couchbase/DATA
nvme2n1     ext4         379a603a-2726-437f-ad25-14fd43358e96 /couchbase/INDEX
nvme3n1     ext4         b0ceae1f-e902-44d5-a63f-2ef81bb62f21 /couchbase/LOGS
nvme4n1

Затем я снова попытался создать файловую систему

[root@ip-10-76-22-196 ~]# mkfs.ext4 /dev/nvme4n1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1638400 inodes, 6553600 blocks
327680 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2155872256
200 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@ip-10-76-22-196 ~]# lsblk -f
NAME        FSTYPE LABEL UUID                                 MOUNTPOINT
nvme0n1
├─nvme0n1p1
└─nvme0n1p2 xfs          de4def96-ff72-4eb9-ad5e-0847257d1866 /
nvme1n1     ext4         35546ab6-8a1f-401f-97fa-7c9daf9005eb /couchbase/DATA
nvme2n1     ext4         379a603a-2726-437f-ad25-14fd43358e96 /couchbase/INDEX
nvme3n1     ext4         b0ceae1f-e902-44d5-a63f-2ef81bb62f21 /couchbase/LOGS
nvme4n1

но не повезло = /

Я также пробовал другие способы получить эту информацию.

[ec2-user@ip-10-76-22-196 ~]$ ls /dev/disk/by-uuid/
35546ab6-8a1f-401f-97fa-7c9daf9005eb  379a603a-2726-437f-ad25-14fd43358e96  b0ceae1f-e902-44d5-a63f-2ef81bb62f21  de4def96-ff72-4eb9-ad5e-0847257d1866

fsck, кажется, думает, что это ext2?

[ec2-user@ip-10-76-22-196 ~]$ fsck -N /dev/nvme4n1
fsck from util-linux 2.23.2
[/sbin/fsck.ext2 (1) -- /dev/nvme4n1] fsck.ext2 /dev/nvme4n1
[ec2-user@ip-10-76-22-196 ~]$ fsck -N /dev/nvme3n1
fsck from util-linux 2.23.2
[/sbin/fsck.ext4 (1) -- /couchbase/LOGS] fsck.ext4 /dev/nvme3n1
[ec2-user@ip-10-76-22-196 ~]$ lsblk -f
NAME        FSTYPE LABEL UUID                                 MOUNTPOINT
nvme0n1
├─nvme0n1p1
└─nvme0n1p2 xfs          de4def96-ff72-4eb9-ad5e-0847257d1866 /
nvme1n1     ext4         35546ab6-8a1f-401f-97fa-7c9daf9005eb /couchbase/DATA
nvme2n1     ext4         379a603a-2726-437f-ad25-14fd43358e96 /couchbase/INDEX
nvme3n1     ext4         b0ceae1f-e902-44d5-a63f-2ef81bb62f21 /couchbase/LOGS
nvme4n1

В конце концов, я нашел это ...

[ec2-user@ip-10-76-22-196 ~]$ sudo sudo file -s /dev/nvme*
/dev/nvme0:     ERROR: cannot read (Invalid argument)
/dev/nvme0n1:   x86 boot sector; partition 1: ID=0xee, active, starthead 0, startsector 1, 20971519 sectors, code offset 0x63
/dev/nvme0n1p1: data
/dev/nvme0n1p2: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
/dev/nvme1:     ERROR: cannot read (Invalid argument)
/dev/nvme1n1:   Linux rev 1.0 ext4 filesystem data, UUID=35546ab6-8a1f-401f-97fa-7c9daf9005eb (needs journal recovery) (extents) (64bit) (large files) (huge files)
/dev/nvme2:     ERROR: cannot read (Invalid argument)
/dev/nvme2n1:   Linux rev 1.0 ext4 filesystem data, UUID=379a603a-2726-437f-ad25-14fd43358e96 (needs journal recovery) (extents) (64bit) (large files) (huge files)
/dev/nvme3:     ERROR: cannot read (Invalid argument)
/dev/nvme3n1:   Linux rev 1.0 ext4 filesystem data, UUID=b0ceae1f-e902-44d5-a63f-2ef81bb62f21 (needs journal recovery) (extents) (64bit) (large files) (huge files)
/dev/nvme4:     ERROR: cannot read (Invalid argument)
/dev/nvme4n1:   Linux rev 1.0 ext4 filesystem data, UUID=caf9638a-9d10-482e-a554-ae8152cd2fdb (extents) (64bit) (large files) (huge files)

Значит, что-то не так

Если /dev/disk/by-uuid или lsblk не показывает файловую систему, то возможно, что тип раздела не был правильно распознан ядром или представление ядра не было обновлено после mkfs.

Существует ряд ситуаций, когда мусор на диске может вызвать проблемы, включая внешние идентификаторы lvm, подписи программных рейдов или несоответствие в таблицах bios / uefi. Хорошая идея обнулить начало диска.

Если вы используете wipefs для этого (вместо dd) вы получаете дополнительное преимущество, заключающееся в том, что он использует ioctl, чтобы сообщить ядру, что нужно перезагрузить его представление о разделах диска.

Я думаю, что инструменты файловой системы, а также file команда читает непосредственно с диска и поэтому не знает о состоянии ядра. Я думаю, что код обнаружения файловой системы fsck также выполняет только элементарную проверку, чтобы найти тип, в котором отсутствует запись fstab для файловой системы. Контрольный двоичный файл такой же для ext2-ext4, поэтому, если fsck находит тип в fstab, он запускает команду именно с этим типом (fsck.ext4), однако, если он не находит тип, он проверяет начало на наличие подписи файловой системы и для любой из версий ext2 запускает инструмент fsck.ext2 (который проверяет более конкретную версию).