ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Raid 리눅스 복구 삽질기
    Linux 2024. 5. 30. 23:05

    이전 삽질 참조: https://iskra.sarang.net/179

     

     

    무슨 바람이 불었는지,

    서버에서 뭔가를 아주 오랜만에 작업하다가...

    CentOS 9 가 나온 것을 이제야 알았다.

     

    그래서, CentOS 8 을 CentOS 9 로 업그레이드해 보았다.

     

    그동안 자체 패키징한 것이 많아서인지 뭔가 Warning 이 많이 뜬 것 같았지만 그냥 업그레이드하고

    확인 없이 리부팅을 했더니.....

     

    Grub> 

     

    이 뜨고 말았다. 부트로더가 날아갔다.

     

     이 글은 다시 UEFI 기반 하드웨어 RAID 로 운영하던 서버에 대한 부트로더 복구기로 향후에 다시 발행할 때, 참조하기 위한 백업 용도이다. 이전에 CentOS 7 에서 CentOS 8 로 업그레이드 할 때도 비슷한 문제를 겪었는데

    기억나는 것이 하나도 없다.

     

    1.  CentOS 설치 디스크로 부팅하고, raid 리눅스 커널 모듈 올리기.

     일반 설치 CD를 사용하여 복구를 시도한다.

      CentOS 정상 설치 모드로 부팅한다.

      설치언어는 간단하게 영어로 선택하고, 네트워크 설정을 선택한 다음, 유선 또는 무선으로 네트워크 설정을 활성화한다.

     

       여기까지 하고,  Alt+F2 로 콘솔을 열어서  복구를 시도한다.

     

        백업해 둔 커널 모듈을 올린다.

        (rcraid.ko 커널 모듈은 CentOS 7, CentOS 8, CentOS 9 설치 CD에 들어 있는 커널과 호환되는 모듈을 미리 만들어 둬야 한다.)

     

        현재, CentOS 7 설치 때 사용된 모듈이 있어서 해당 모듈을 사용한다.

        모듈은 FAT32 포맷된 USB 에 복사해서 마운트한다.

    # mkdir /mnt/usb
    # mount /dev/sdb1 /mnt/usb
    # insmod /mnt/usb/rcraid.ko

     

    2.  Raid HDD 루트 파티션 활성화하기.

    OS 가 설치된 하드 디스크를 파악한다.

    [root@localhost ~]# fdisk -l /dev/sdc
    Disk /dev/sdc: 7.28 TiB, 8000976715776 bytes, 15626907648 sectors
    Disk model: Array 01
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: C70A2915-0667-44B8-9986-313354CC9C72

    Device       Start         End     Sectors  Size Type
    /dev/sdc1     2048      411647      409600  200M EFI System
    /dev/sdc2   411648     4605951     4194304    2G Microsoft basic data
    /dev/sdc3  4605952 15626725375 15622119424  7.3T Linux LVM

     

    rcraid 모듈을 인스톨하고, 루트 파티션을 그냥 마운트하면 다음과 같은 오류가 발생한다.

    # mkdir /mnt/server_root
    # mount /dev/sdc3 /mnt/server_root/
    mount: unknown filesystem type 'LVM2_member'

     

    lvm 에서 해당 디스크를 볼륨 그룹으로 인식하도록 해야 한다.

    # modprobe dm-mod
    # vgscan
    Reading volume groups from cache.
    Found volume group "centos" using metadata type lvm2

     

    볼륨 그룹의 이름 centos 는 처음 볼륨 그룹을 만들 때, 지정한 이름이다.

    이제 볼륨을 활성화한다.

    # vgchange -ay centos
    # fdisk -l 

     

    이제 잃어버린 root 파일 시스템을 마운트한다.

    # mount /dev/mapper/centos_root /mnt/server_root

     

    chroot 로 접근하기 전에, 기존 시스템의 파일 시스템 마운트 상태를 파악한다.

    [root@localhost ~]# cat /etc/fstab

    #
    # /etc/fstab
    # Created by anaconda on Thu Nov 22 14:25:58 2018
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root /                       xfs     defaults,noatime        0 0
    UUID=65c6532b-de34-40a1-a7a9-efe46ba675b6 /boot xfs     defaults,noatime        0 0
    UUID=D5E4-409D          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0

     기존 시스템의 root 파일 시스템의 boot 폴더와 boot/efi 폴더가 위와 같이 다른 파티션으로부터 마운트되어 있다는 것을 확인 후, 해당 파일 시스템을 마운트한다.

    # cd /mnt/server_root
    # mount /dev/sdc2 boot
    # mount /dev/sdc1 boot/efi

     

    3. chroot 로  이전 설치 패키지 정리하기.

    네트워크 활성화 및 부팅시 활성화된 커널 패러미터를 사용하기 위해 아래의 파일 시스템을 마운트한다.

    #!/bin/sh
    for i in /dev /dev/pts /proc /sys /run;
    do
      mount -B $i  /mnt/server_root/$i;
    done

     

    이제 기존 루트 파일시스템으로 chroot 한다.

    # cd /mnt/server_root
    # chroot ./

     

    만약 네트워크가 도메인 이름 검색을 하지 않으면, /etc/resolf.conf 파일에 nameserver 를 등록한다.

    [root@localhost /]# cat /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 8.8.8.8

     

    4. Grub2 재설치하고 MBR 에 Grub2 다시 설치하기

    yum 으로 grub2 efi 지원 패키지를 다시 설치한다. 만약 다시 설치되지 않으면 업그레이드 과정에 삭제된 것일 수 있으므로 새로 설치한다.

    # yum reinstall grub2-efi-x64  grub2-tools  shim-x64

     

    grub2 부트 메뉴를 등록한다.

    # grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

     

    메뉴 엔트리의 위치는 다음과 같다.

    [root@localhost entries]# ls -l /boot/loader/entries/
    합계 24
    -rw-r--r--. 1 root root 470  1월 29 10:41 6c6e4e645acb4354bd661ac39377b743-0-rescue.conf
    -rw-r--r--  1 root root 567  1월 29 11:47 6c6e4e645acb4354bd661ac39377b743-6.12.11-1.el9.elrepo.x86_64.0~custom.conf
    -rw-r--r--  1 root root 485  1월 29 11:47 6c6e4e645acb4354bd661ac39377b743-6.12.11-1.el9.elrepo.x86_64.conf
    -rw-r--r--  1 root root 434  1월 29 11:47 6c6e4e645acb4354bd661ac39377b743-6.9.2-1.el9.elrepo.x86_64.conf
    -rw-r--r--  1 root root 485  1월 29 11:47 6c6e4e645acb4354bd661ac39377b743-6.9.3-1.el9.elrepo.x86_64.0~custom.conf
    -rw-r--r--  1 root root 434  1월 29 11:47 6c6e4e645acb4354bd661ac39377b743-6.9.3-1.el9.elrepo.x86_64.conf

     

    5. 부팅하기.

     

     

    'Linux' 카테고리의 다른 글

    AMD Ryzen CPU 와 CentOS 리눅스  (0) 2020.03.11
    PDFium 라이브러리 삽질기 - 5  (0) 2019.12.16
    PDFium 라이브러리 삽질기 - 4  (0) 2019.12.13
    PDFium 라이브러리 삽질기 - 3  (0) 2019.12.11
    PDFium 라이브러리 삽질기 - 2  (0) 2019.12.10

    댓글

Designed by Tistory.