

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 스토리지 문제 해결
<a name="lfs-migrate-ts"></a>

경우에 따라 파일 시스템에 스토리지 문제가 발생할 수 있습니다. `lfs migrate` 명령과 같은 `lfs` 명령을 사용하여 이러한 문제를 해결할 수 있습니다.

## 스토리지 대상에 공간이 없어서 쓰기 오류가 발생했습니다.
<a name="lfs-migrate-no-storage"></a>

[파일 시스템 스토리지 레이아웃](performance.md#storage-layout)에 설명된 대로 `lfs df -h` 명령을 사용하여 파일 시스템의 스토리지 사용량을 확인할 수 있습니다. 이 `filesystem_summary` 필드에는 총 파일 시스템 스토리지 사용량이 보고됩니다.

파일 시스템 디스크 사용량이 100% 인 경우 파일 시스템의 스토리지 용량을 늘리는 것을 고려해 보세요. 자세한 내용은 [스토리지 용량 관리](managing-storage-capacity.md) 섹션을 참조하세요.

파일 시스템 스토리지 사용량이 100% 가 아닌데도 쓰기 오류가 계속 발생하는 경우, 쓰기 중인 파일이 꽉 찬 OST에 스트라이핑될 수 있습니다.

**취할 조치**
+ 많은 OST가 꽉 찬 경우 파일 시스템의 스토리지 용량을 늘리세요. [OST의 스토리지 불균형](#lfs-migrate-unbalanced-storage) 섹션의 작업에 따라 OST의 스토리지 용량이 불균형하지 않은지 확인합니다.
+ OSTs 가득 차지 않은 경우 모든 클라이언트 인스턴스에 다음 튜닝을 적용하여 클라이언트 더티 페이지 버퍼 크기를 조정합니다.

  ```
  sudo lctl set_param osc.*.max_dirty_mb=64
  ```

## OST의 스토리지 불균형
<a name="lfs-migrate-unbalanced-storage"></a>

Amazon FSx for Lustre는 새 파일 스트라이프를 OST 전체에 균등하게 배포합니다. 하지만 I/O 패턴 또는 파일 스토리지 레이아웃으로 인해 파일 시스템이 여전히 불균형해질 수 있습니다. 따라서 일부 스토리지 타겟은 꽉 찬 반면 다른 타겟은 상대적으로 비어 있을 수 있습니다.

`lfs migrate` 명령을 사용하여 파일 또는 디렉터리를 가득 찬 OST에서 덜 꽉 찬 OST로 이동할 수 있습니다. 이 `lfs migrate` 명령은 블록 또는 비블록 모드에서 사용할 수 있습니다.
+ **블록 모드는** `lfs migrate` 명령의 기본 모드입니다. 차단 모드에서 실행하면 데이터 마이그레이션 전에 `lfs migrate` 코드가 먼저 파일 및 디렉터리에 대한 그룹 잠금을 획득하여 파일이 수정되지 않도록 한 다음 마이그레이션이 완료되면 잠금을 해제합니다. 차단 모드는 다른 프로세스가 파일을 수정하지 못하도록 함으로써 이러한 프로세스가 마이그레이션을 방해하지 않도록 합니다. 단점은 응용 프로그램에서 파일을 수정하지 못하게 하면 응용 프로그램이 지연되거나 오류가 발생할 수 있다는 것입니다.
+ `-n` 옵션이 있는 `lfs migrate` 명령에 대해 **비차단 모드**가 활성화됩니다. 비블록 모드에서 `lfs migrate` 명령이 실행 중인 경우에도 다른 프로세스가 마이그레이션 중인 파일을 수정할 수 있습니다. `lfs migrate` 명령이 마이그레이션을 완료하기 전에 프로세스에서 파일을 수정하면 `lfs migrate` 명령이 해당 파일을 마이그레이션하는 데 실패하고 파일은 원래 스트라이프 레이아웃으로 남게 됩니다.

비차단 모드는 응용 프로그램에 방해가 될 가능성이 적으므로 사용하는 것이 좋습니다.

**취할 조치**

1. 비교적 큰 클라이언트 인스턴스(예: Amazon EC2 인스턴스`c5n.4xlarge` 유형)를 시작하여 파일 시스템에 마운트합니다.

1. 비차단 모드 스크립트 또는 차단 모드 스크립트를 실행하기 전에 먼저 각 클라이언트 인스턴스에서 다음 명령을 실행하여 프로세스 속도를 높이세요.

   ```
   sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60'
   sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
   ```

1. 스크린 세션을 시작하고 비차단 모드 스크립트 또는 차단 모드 스크립트를 실행합니다. 스크립트에서 적절한 변수를 변경합니다.
   + 비차단 모드 스크립트:

     ```
     #!/bin/bash
     
     # UNCOMMENT THE FOLLOWING LINES:
     #
     # TRY_COUNT=0
     # MAX_MIGRATE_ATTEMPTS=100
     # OSTS="fsname-OST0000_UUID"
     # DIR_OR_FILE_MIGRATED="/mnt/subdir/"
     # BATCH_SIZE=10
     # PARALLEL_JOBS=16 # up to max-procs processes, set to 16 if client is c5n.4xlarge with 16 vcpu
     # LUSTRE_STRIPING_CONFIG="-E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32" # should be consistent with the existing striping setup
     #
     
     if [ -z "$TRY_COUNT" -o -z "$MAX_MIGRATE_ATTEMPTS" -o -z "$OSTS" -o -z "$DIR_OR_FILE_MIGRATED" -o -z "$BATCH_SIZE" -o -z "$PARALLEL_JOBS" -o -z "$LUSTRE_STRIPING_CONFIG" ]; then
         echo "Some variables are not set."
         exit 1
     fi
     
     echo "lfs migrate starts"
     while true; do
         output=$(sudo lfs find ! -L released --ost $OSTS --print0 $DIR_OR_FILE_MIGRATED | shuf -z | /bin/xargs -0 -P $PARALLEL_JOBS -n $BATCH_SIZE sudo lfs migrate -n $LUSTRE_STRIPING_CONFIG 2>&1)
         if [[ $? -eq 0 ]]; then
             echo "lfs migrate succeeds for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, exiting."
             exit 0
         elif [[ $? -eq 123 ]]; then 
             echo "WARN: Target data objects are not located on these OSTs. Skipping lfs migrate"
             exit 1
         else
             echo "lfs migrate fails for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, retrying..."
             if (( ++TRY_COUNT >= MAX_MIGRATE_ATTEMPTS )); then
                 echo "WARN: Exceeds max retry attempt. Skipping lfs migrate for $DIR_OR_FILE_MIGRATED. Failed with the following error"
                 echo $output
                 exit 1
             fi
         fi
     done
     ```
   + 차단 모드 스크립트:
     + `OSTS`의 값을 OST 값으로 바꿉니다.
     + 병렬로 실행할 max-procs 프로세스 수를 설정하려면 `nproc`에 정수 값을 제공합니다. 예를 들어 Amazon EC2 인스턴스`c5n.4xlarge` 유형에는 16개의 vCPU가 있으므로 `nproc`에 `16`(또는 16보다 작은 값)을 사용할 수 있습니다.
     + `mnt_dir_path`에 마운트 디렉터리 경로를 입력합니다.

     ```
     # find all OSTs with usage above a certain threshold; for example, greater than or equal to 85% full 
     for OST in $(lfs df -h |egrep '( 8[5-9]| 9[0-9]|100)%'|cut -d' ' -f1); do echo ${OST};done|tr '\012' ','
     
     # customer can also just pass OST values directly to OSTS variable
     OSTS='dzfevbmv-OST0000_UUID,dzfevbmv-OST0002_UUID,dzfevbmv-OST0004_UUID,dzfevbmv-OST0005_UUID,dzfevbmv-OST0006_UUID,dzfevbmv-OST0008_UUID'
     
     nproc=<Run up to max-procs processes if client is c5n.4xlarge with 16 vcpu, this value can be set to 16>
     
     mnt_dir_path=<mount dir, e.g. '/my_mnt'>
     
     lfs find ${mnt_dir_path} --ost ${OSTS}| xargs -P ${nproc} -n2 lfs migrate -E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32
     ```

**참고**
+ 파일 시스템 읽기 성능에 영향이 있는 경우 `ctrl-c` 또는 `ill -9`를 사용하여 언제든지 마이그레이션을 중지하고 스레드 수(`nproc` 값)를 더 낮은 수(예: 8)로 줄인 다음 파일 마이그레이션을 재개할 수 있습니다.
+ 클라이언트 워크로드에서도 열려 있는 파일에서는 `lfs migrate` 명령이 실패합니다. 오류가 발생하고 다음 파일로 이동합니다. 따라서 액세스하는 파일이 많으면 스크립트에서 파일을 마이그레이션하지 못할 수 있으며, 마이그레이션 진행 속도가 매우 느리기 때문에 반영될 수 있습니다.
+ 다음 방법 중 하나를 사용하여 OST 사용량을 모니터링할 수 있습니다.
  + 클라이언트 마운트에서 다음 명령을 실행하여 OST 사용량을 모니터링하고 사용량이 85%를 초과하는 OST를 찾습니다.

    ```
    lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    ```
  + Amazon CloudWatch 지표인 `OST FreeDataStorageCapacity`를 확인하고 `Minimum`을 확인합니다. 스크립트에서 85%가 넘는 OST가 검색되면 지표가 15%에 가까워지면 `ctrl-c` 또는 `kill -9`를 사용하여 마이그레이션을 중단합니다.
+ 새 파일이 여러 스토리지 대상에 스트라이핑되도록 파일 시스템 또는 디렉터리의 스트라이프 구성을 변경하는 것도 고려할 수 있습니다. 자세한 내용은 [파일 시스템의 스트라이핑 데이터](performance.md#striping-data) 섹션을 참조하세요.