ESXi Troubleshooting - restore-nfs-volumes와 configstore 변경

송주환·2024년 5월 31일
0

TL;DR

이번 포스팅은 ESXi에서 NFS를 사용하는 경우, ESXi가 부팅될 때 NFS 데이터스토어의 로드를 기다리면서 NFS timeout 시간 동안 restore-nfs-volumes 부트 모듈에서 hang에 걸리는 잘 알려진 문제를 일시적으로 해결할 수 있는 방법과, 잘못 구성된 설정을 configstorecli를 통해 제거하는 방법을 다룬다.

문제 상황

해당 ESXi 시스템은 이전에 FreeNAS 기반의 NFS 데이터스토어를 마운트 한 뒤, 삭제한 이력이 있었다.
현재 기준으로 ESXi / vCenter UI에서는 NFS 데이터스토어가 구성되어 있지 않았으며, esxcli를 통해 확인했을 때도 마찬가지였다.
하지만, ESXi 호스트를 재부팅하자, 부트 프로세스가 restore-nfs-volumes에서 hang에 걸리는 문제가 나타났다.

조치 사항

NFS timeout 시간이 지나면 자동으로 다음 단계로 넘어가지만, 부팅 과정에서 4-50분을 기다릴 수 없다면 restore-nfs-volumes 부트 모듈을 비활성화 하는 임시 조치를 취할 수 있다.

# 부팅 시 Shift-O를 입력하여 부트 파라미터 입력 모드로 진입
jumpstart.disable=restore-nfs-volumes

시스템이 부팅된 뒤, 잘못 입력된 NFS 설정을 제거하기 위해 ESXCLI를 확인해 보았으나, ESXi 호스트에는 등록된 NFS 데이터스토어가 존재하지 않았다.

configstore

ESXi 7.0부터, ESXi의 구성 정보는 기존의 xml 파일이 아닌, configstore라는 별도의 내부 저장소에 기록된다.
이 저장소는 configstorecli 명령어를 사용하여 접근/수정할 수 있다.
configstore는 default / current / desired 의 상태 구분을 가지며, configstorecli 명령어로는 current 설정만 변경할 수 있다.

configstorecli로 현재 구성을 조회하기 위해 다음 명령어를 사용하였다.

configstorecli default get -c esx -g storage -k nfs_v41_datastores
configstorecli current get -c esx -g storage -k nfs_v41_datastores
configstorecli desired get -c esx -g storage -k nfs_v41_datastores

그리고, default와 current에는 아무런 값도 없었지만, desired에서 이전에 추가했던 datastore가 있는 것을 확인할 수 있었다.

아마도 datastore를 추가하는 도중에 FreeNAS와의 연결이 끊어지면서, 해당 datastore를 추가하는 작업이 완료되지 못한 채로 계속 남아있는 것으로 추정되었다.
하지만 configstorecli는 current 상태만 수정할 수 있는데, desired 상태에 있는 쓰레기 값을 어떻게 제거해야 할까?

몇 차례 시행 착오를 거친 뒤, 다음과 같은 절차로 desired 상태의 쓰레기 값을 제거할 수 있다는 것을 확인하였다.

  1. desired 상태의 설정 값을 -outfile 옵션을 이용하여 JSON으로 덤프한다
  2. 덤프한 JSON 파일을 -infile 옵션을 이용하여 current 상태로 import 한다
  3. esxcli를 사용하여, 쓰레기 값을 확인하고, 명시적으로 제거한다

내가 겪었던 NFS 사례에 대한 예시 명령어는 다음과 같다.

# desired 설정 덤프
configstorecli config desired get -c esx -g storage -k nfs_v41_datastores -outfile nfs.json

# current import
configstorecli config current set -c esx -g storage -k nfs_v41_datastores -infile nfs.json

# NFS 구성 제거
esxcli storage nfs41 remove -v <volume_name>

즉, 잘못 입력된 desired 설정을 current에 import 하여 시스템에 반영시키고, 해당 구성을 올바른 절차로 제거하면 configstore의 desired 설정이 업데이트 되면서 쓰레기 값을 제거할 수 있다.

이 글이 유사한 이슈를 겪는 사람들에게 도움이 되기를 바란다.

profile
Virtualization / Network / Storage / Server Hardware and.. Linux

0개의 댓글