운영중인 서버에서 Azure File을 마운트해 사용하면서 겪은 문제와 해결과정을 정리했다.
내가 하고자 했던 것
/uploads 폴더를 Azure CIFS 마운트 경로이자 서비스 파일 기본 경로로 설정
평상시에는 Azure 스토리지에 직접 기록하고 마운트 실패 시 로컬 디렉토리에 데이터가 쌓이도록 유지
서비스는 항상 동일한 /uploads 경로만 바라보도록 구성
문제 상황
마운트 실패 시 동작을 고려하지 못한 상태에서 운영하여 이미 /uploads 경로에 Azure CIFS가 마운트된 상태
로컬 데이터를 보기 위해 CIFS를 잠시 해제하고 bind로 덮어 씌우려고 했으나,
기존 CIFS 위에 다시 마운트가 겹치면서 Azure CIFS / ext4 / bind 마운트가 꼬이는 문제가 발생
umount를 해도 Azure와 로컬이 함께 풀리거나 마운트가 여러번 올라간 것 처럼 보였다.
원인
리눅스에서 동일 경로에 마운트 하게되면 기존 마운트가 가려지거나 덮어쓰기가 발생
따라서 원본에 직접 접근할 수 있는 우회 경로가 필요함.
해결 방법
우선 이미 중복이 됫거나 꼬인 마운트가 있다면 아래와 같은 방법으로 정리한다.
1. 꼬인 마운트 정리
- 중복 마운트나 꼬임이 생겼을 때는 lazy-unmount로 정리한다.
sudo umount -l /home/user/uploads || true
sudo umount -l /home/user/uploads_real || true
# 재마운트
sudo mount /home/user/uploads
- 불필요한 자동 마운트가 걸려있을 수 있으므로 fstab을 확인하고 필요 없는 자동 마운트 줄은 제거한다.
sudo nano /etc/fstab
2. 로컬 원본 데이터 접근하기
- CIFS와 별개로 원본(ext4) 데이터를 확인할 수 있도록 별도 경로를 마련한다.
# 임시 경로 생성
sudo mkdir -p /mnt/original_home
# sda1을 임시 경로에 마운트
sudo mount /dev/sda1 /mnt/original_home
# 원본 uploads 확인
ls /mnt/original_home/home/user/uploads
3. 원본 디렉토리만 bind 접근하기
- 필요할 때 원본 uploads를 다른 경로에서도 접근할 수 있도록 bind를 사용한다.
sudo mkdir -p /home/user/uploads_real
sudo mount --bind /mnt/original_home/home/user/uploads /home/user/uploads_real
마무리
Azure CIFS를 서비스 경로에 직접 마운트하면 편리하지만 장애 상황에서 로컬 데이터가 숨겨져 버리는 문제가 발생할 수 있음.
따라서 별도 경로에 로컬 디스크를 마운트해 원본을 확인하고, 필요 시 Azure 스토리지로 안전하게 이관하는 방식으로 운영하면 좋을듯하다.
유용한 명령어 정리
- 폴더 전체 용량 확인하기
du -sh /home/dohwa_sw/uploads/map
- 로컬에서 Azure 스토리지로 파일 복사하기
# -r : 재귀 복사
# -u : 대상 파일이 없거나 소스가 더 최신인 경우에만 덮어씀
cp -ru /home/dohwa_sw/uploads_real/intrs/* /home/dohwa_sw/uploads/intrs/
'운영체제 > Ubuntu' 카테고리의 다른 글
| 리눅스 사용자 및 그룹 관리 (0) | 2023.12.26 |
|---|---|
| Ubuntu Apache VirtualHost 설정 (0) | 2022.02.13 |