dnodesize = auto로 설정한 후 ZFS 루트 파일 시스템을 부팅하는 방법(grub이 디스크를 읽을 수 없게 함)

dnodesize = auto로 설정한 후 ZFS 루트 파일 시스템을 부팅하는 방법(grub이 디스크를 읽을 수 없게 함)

6개의 디스크가 있는 서버의 ZFS 위에 proxmox(내 생각에는 v5.4)가 설치되어 있습니다. 2개의 풀이 있습니다. proxmox 루트 파일 시스템과 일부 컨테이너 및 zvol이 있는 2개의 SSD 미러에 있는 rpool입니다. 그리고 나머지 4개의 디스크는 raidz-1의 다른 풀(HDD)에 있습니다.

dnodesize = auto두 달 전에 저는 ZFS 매개변수에서 일부 최적화 작업을 수행 중이었고 rpool 풀과 하위 풀을 포함한 모든 풀에서 활성화했습니다 . 이제 서버를 재부팅했는데 다음 메시지가 표시되었습니다.

error: no such device: 40d7d14f38cc...
error: unknown filesystem
Entering rescue mode...
grub rescue>

제가 수행한 연구에 따르면 dnodesize매개변수와 관련이 있는 것 같습니다(확인여기,여기그리고여기). 첫 번째 링크에서 직접 인용:

일부 파일이 데이터 세트에서 레거시가 아닌(512바이트) dnode 크기를 트리거했을 것입니다. 이는 GRUB가 더 이상 드라이브를 읽을 수 없음을 의미합니다.

이제 어디서부터 시작해야 할지에 대한 몇 가지 아이디어가 있지만 많은 의심도 있습니다(저는 경험이 많지 않은 관리자입니다). 따라서 막다른 골목에 도달하거나 무언가를 확실히 중단하기 전에 먼저 여러분에게 물어보고 싶었습니다.

우선 ZFS 지원 OS로 라이브 USB를 만들 수 있었습니다. 아마도 가장 좋은 옵션은 동일한 5.4 proxmox ISO를 사용하는 것입니다. 거기에 도달하면 라이브 USB에서 기존 proxmox 풀을 로드하고 조작할 수 있습니까? 어떻게?

문제는 dnodesize = legacy변경 사항이 소급 적용되지 않기 때문에 설정하기에 충분하지 않다는 것입니다. 그래서 여기서 어떻게 진행해야 할지 정확히 모르겠습니다. 내가 가진 옵션은 다음과 같습니다.

  1. 표준 dnode 제한인 512바이트를 위반하는 파일을 감지할 수 있는 방법이 있는 경우. 그런 다음 다른 위치로 잘라내거나 이동하고 다시 붙여넣거나 이동하세요. 여기서 문제가 발생합니다. 해당 파일을 감지하는 방법은 무엇입니까?
  2. 모든 rpool 콘텐츠를 외부 디스크로 잘라내어 rpool에 다시 붙여넣습니다. 여기서 문제는 proxmox 루트 파일 시스템을 앞뒤로 이동하고 다시 작동할 것으로 기대하는 것이 안전하지 않다는 것입니다. 아마 cp -a?
  3. grub이 읽어야 하는 유일한 콘텐츠는 /boot 내부 콘텐츠인 것 같습니다. 그러나 /boot 폴더는 rpool 풀 내부에 있으며 zfs 풀은 축소할 수 없습니다. 따라서 부팅용 새 풀을 만들기 위해 현재 풀을 축소할 수 없으며 서버에 추가 디스크를 추가할 수도 없습니다. 유일한 옵션은 /boot를 펜 드라이브로 옮기고 grub에게 그곳에서 검색하도록 지시하는 것입니다. 그러나 그것은 매우 강력하거나 확실한 해결책은 아닌 것 같습니다.

어떤 충고?

편집: zfs 친화적인 부트로더로 grub2를 교체하는 것은 어떻습니까? Proxmox 위키에서:

systemd-boot는 경량 EFI 부트로더입니다. 설치된 EFI 서비스 파티션(ESP)에서 직접 커널 및 initrd 이미지를 읽습니다. ESP에서 커널을 직접 로드하는 주요 이점은 스토리지에 액세스하기 위해 드라이버를 다시 구현할 필요가 없다는 것입니다. ZFS를 루트 파일 시스템으로 사용하는 경우 이는 grub의 ZFS 구현에도 존재하거나 별도의 작은 부트 풀을 생성해야 하는 하위 집합 대신 루트 풀의 모든 선택적 기능을 사용할 수 있음을 의미합니다.

실제로는 다음과 같습니다.

Proxmox VE는 현재 설치 프로그램에서 선택한 디스크 설정에 따라 두 개의 부트로더 중 하나를 사용합니다. 루트 파일 시스템으로 ZFS와 함께 설치된 EFI 시스템의 경우 systemd-boot가 사용됩니다. 다른 모든 배포에서는 표준 grub 부트로더를 사용합니다.

그래서 왜 systemd-boot 대신 grub을 사용하여 설치했는지 모르겠습니다. 아무 것도 손상시키지 않고 부트로더를 교체하는 것이 가능합니까?

당신의 도움을 주셔서 감사합니다.

관련 정보