시스템은 CentOS 7입니다. MD RAID가 포함된 두 개의 하드 드라이브에 설치했는데 드라이브 중 하나에 문제가 발생했습니다. 대신 우리는 약간 더 큰 SSD 두 개를 사용하기로 결정했습니다. 연결되고 시스템이 부팅되면 sda
두 개의 파티션이 있는 오래된 하드 드라이브처럼 보입니다. sda1
참여하는 md126
500M 은 다른 모든 것을 포함하는 LVM PV /boot
입니다 . 그리고 새로운 SSD입니다.sda2
md127
sdb
sdc
어레이를 HDD에서 SSD로 옮기기 시작했습니다. 이전 장치와 마찬가지로 새 장치를 분할하고 이를 어레이에 추가하면 어레이가 3개의 장치를 포함하도록 커집니다.
mdadm --add /dev/md126 /dev/sd[bc]1
mdadm --add /dev/md127 /dev/sd[bc]2
mdadm --grow -n 3 /dev/md126
mdadm --grow -n 3 /dev/md127
얼마 후 모든 RAID가 완전히 동기화되었는지 확인한 다음 어레이에서 드라이브를 제거하고 각각 2개의 장치를 포함하도록 다시 설정했습니다.
mdadm -f /dev/md126 /dev/sda1
mdadm -r /dev/md126 /dev/sda1
mdadm -f /dev/md127 /dev/sda2
mdadm -r /dev/md127 /dev/sda2
mdadm --grow -n 2 /dev/md126
mdadm --grow -n 2 /dev/md127
두 어레이 모두 깨끗합니다. 새로 설치된 장치에 부트로더를 설치합니다.
[root@master ~]# grub2-install /dev/sdc
Installing for i386-pc platform.
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub2-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.
이러한 경고가 표시되는 것이 마음에 들지 않으며 올바른 장치에 설치되어 있는지 여전히 확실하지 않습니다. 확인해 보니 /boot/grub2/device.map
기존 드라이브를 참조하고 있어서 수정했고 지금은 다음과 같습니다.
# this device map was generated by anaconda
(hd0) /dev/sdb
(hd1) /dev/sdc
(hd2) /dev/sda
나머지 드라이브는 결국 삭제되고 다시 사용되기를 바랍니다. 따라서 데이터가 유출되지 않도록 모든 데이터를 삭제하겠습니다.
dd if=/dev/zero of=/dev/sda bs=8k
완료한 다음 확인하기 위해 SSD에 grub을 다시 설치해 보았습니다.
[root@master ~]# grub2-install /dev/sdb
Installing for i386-pc platform.
grub2-install: error: disk `mduuid/85faee0a366da795c6ac33a7c4a48ae8' not found.
첫 번째 줄은 즉시 나타나고 오류 메시지는 10초 동안 지연됩니다. 두 번째 SSD도 마찬가지입니다.
/dev/sda1
어레이에 다시 추가하여 3개의 장치로 올바르게 늘리면 다음과 같이 표시됩니다 .
[root@master /]# grub2-install /dev/sdb
Installing for i386-pc platform.
grub2-install: error: unknown filesystem.
유효한 부팅 파일 시스템이 포함되어 있다고 확신합니다. RAID에서 분리하고 확인해보니 다음과 같습니다.
[root@master /]# blkid -p /dev/sda1
/dev/sda1: UUID="85faee0a-366d-a795-c6ac-33a7c4a48ae8" UUID_SUB="bc7af7ca-09f2-f533-3a79-53d98f5dd09a" LABEL="master.service.intrid.ru:boot" VERSION="1.0" TYPE="linux_raid_member" USAGE="raid" PART_ENTRY_SCHEME="dos" PART_ENTRY_TYPE="0xfd" PART_ENTRY_FLAGS="0x80" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="2048" PART_ENTRY_SIZE="1046528" PART_ENTRY_DISK="8:0"
[root@master /]# tune2fs -l /dev/md126 | grep feat
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
[root@master /]# mdadm -f /dev/md126 /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md126
[root@master /]# mdadm -r /dev/md126 /dev/sda1
mdadm: hot removed /dev/sda1 from /dev/md126
[root@master /]# tune2fs -l /dev/sda1 | grep feat
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
아주 이상한.
이제 나는 막혔습니다. 시스템이 잘 작동하고 있고 모든 파일 시스템도 괜찮으며 클라이언트에게 서비스를 제공합니다. 예를 들어, /boot
설치되어 사용 가능하다면 제거하고 확인한 다음 다시 설치합니다.
인터넷에는 복구 라이브 미디어에서 시스템을 재부팅하는 방법이나 재부팅 시 복구 셸에 grub을 넣은 후 이 문제를 해결하는 방법에 대한 조언이 넘쳐납니다. 내가 확인한 일부 리소스:
- https://ahelpme.com/linux/grub2-grub-install-error-disk-mduuid-not-found-even-after-the-partition-has-bios_grub-on/
- grub2 설치 오류 - 디스크를 찾을 수 없습니다(그런데 이건 답변이 안왔어요)
- https://linoxy.com/fix-grub-filesystem-type-unknown-error-on-centosredhat/
- https://www.linuxquestions.org/questions/linux-newbie-8/centos-7-error-unknown-filesystem-grub-rescue-4175687414/
그러나 아직 재부팅하지 않았으며 원격이고 여기 주변의 누구도 부트로더를 고칠 수 있는 방법이 없기 때문에 부팅될 것이라고 확신할 때까지 재부팅하고 싶지 않습니다. 이전에 이와 같은 장치를 여러 번 교체한 적이 있으며 그러한 문제가 있었던 기억은 없지만 일반적으로 CentOS보다 최신 소프트웨어가 있는 Gentoo 또는 Debian에서 이 문제가 항상 발생했습니다.
그렇다면 복구 미디어를 부팅하지 않고도 시스템에서 원격으로 부트로더를 복구할 수 있을까요? 아마도 grub에게 아무것도 확인하지 말고 미디어의 적절한 위치에 필요한 것을 쓰라고 지시하면 될까요?
/boot
파일 시스템을 덤프하고 이를 포함하는 배열을 처음부터 다시 만들고 이미지를 다시 쓰면 도움이 될까요? 나중에 initramfs를 어떻게 다시 생성합니까?
답변1
한동안 노력하고 생각한 후에 질문에 언급된 첫 번째 기사로 돌아왔습니다.https://ahelpme.com/linux/grub2-grub-install-error-disk-mduuid-not-found-even-after-the-partition-has-bios_grub-on/
저자는 다시 시작한 후에 재구성될 커널의 배열과 관련된 일부 구조가 있다고 믿습니다. 어느 순간? 아마도 발견과 조립 과정 중에 있었던 것 같습니다. 사실은,부트 어레이 재구성도움이되었습니다. 이것이 내가 이 문제를 해결한 방법입니다.
먼저 배열을 언로드하고 분해합니다.
[root@master ~]# umount /boot
[root@master ~]# mdadm --stop /dev/md126
mdadm: stopped /dev/md126
[root@master ~]# cat /proc/mdstat
Personalities : [raid1]
md127 : active raid1 sdc2[4] sdb2[3]
487731200 blocks super 1.2 [2/2] [UU]
bitmap: 2/4 pages [8KB], 65536KB chunk
unused devices: <none>
mdstat
시작 배열이 표시되지 않습니다. 또한 dmesg
모든 것이 괜찮은지 확인하기 위해 이것을 읽었습니다.
[243050.619210] md126: detected capacity change from 535756800 to 0
[243050.619260] md: md126 stopped.
[243050.619271] md: unbind<sdb1>
[243050.629871] md: export_rdev(sdb1)
[243050.630093] md: unbind<sdc1>
[243050.635890] md: export_rdev(sdc1)
그런 다음 다시 다시 조립하십시오.
[root@master ~]# mdadm --assemble --run /dev/md126 /dev/sdb1 /dev/sdc1
mdadm: /dev/md126 has been started with 2 drives.
자동으로 설치됩니다 dmesg
.
[243124.197117] md: bind<sdc1>
[243124.197468] md: bind<sdb1>
[243124.200993] md/raid1:md126: active with 2 out of 2 mirrors
[243124.201010] md126: detected capacity change from 0 to 535756800
[243124.201461] md126: unknown partition table
[243124.238232] md126: unknown partition table
[243124.246330] EXT4-fs (md126): mounted filesystem with ordered data mode. Opts: (null)
이제 설치되었습니다:
[root@master ~]# LANG=C grub2-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
[root@master ~]# LANG=C grub2-install /dev/sdc
Installing for i386-pc platform.
Installation finished. No error reported.
재부팅이 필요하지 않습니다!