※ Linux: Symbolic Link and Hard Link.
안녕하세요. 듀스트림입니다.
리눅스 시스템을 운영하다보면 여러 용도로 많이 쓰이는 게 있죠.
바로 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link)입니다.
이번 포스팅에서는 이 링크들에 대해 자세히 살펴보겠습니다.
1. 심볼릭 링크와 하드 링크?
1.1. 심볼릭 링크(Symbolic Link)
• 정의: 원본 파일의 경로(위치)를 참조하는 별칭 파일로 원본 파일의 주소를 저장. (파일에 대한 바로가기와 비슷함.)
• 개념도: [원본 파일] → [링크 파일] → [경로]
• 작동 방식:
- 심볼릭 링크 자체가 별도의 inode(파일 식별자)를 가짐.
- 파일 경로가 저장되므로, 원본 파일의 inode나 데이터 블록에 직접 영향을 미치지 않음.
• 특징:
- 파일 시스템 간 경로 참조 가능. (파일 시스템 내에서 다른 디렉토리나 파일 시스템을 넘나드는 참조 가능.)
- 원본 파일 삭제 시 깨진 링크 발생.
- 설정 파일, 디렉토리 경로 등을 동적으로 참조. (심볼릭 링크는 디렉토리 링크 가능.)
• 고려 사항:
- 깨진 링크 문제를 방지하려면 원본 파일의 유효성을 지속적으로 확인 필요.
- 링크가 깊어질 경우(중첩 심볼릭 링크) 관리가 복잡해질 수 있음.
1.2. 하드 링크(Hard Link)
• 정의: 동일한 파일에 대해 추가적인 참조를 생성(별칭)하는 방식. 동일한 inode를 공유.
•개념도: [원본 파일] ↔ [링크 파일] (동일한 inode)
• 작동 방식:
- 동일 inode를 통해 데이터를 참조하므로, 원본과 링크는 동일한 물리적 데이터 블록을 공유.
• 특징:
- 하드 링크는 일반적으로 디렉토리에 대해 사용할 수 없으나, 특수한 경우(ln 명령어 옵션과 특정 파일 시스템 설정)로 가능.
- 원본 삭제 후에도 다른 링크를 통해 데이터 접근 가능. (원본 파일이 삭제되어도 데이터는 유지됨.)
- 동일 파일 시스템 내에서만 생성 가능.
- 데이터 중복 방지 및 안정적인 백업.
- 원본 파일과 하드 링크는 완전히 동일하며, 변경 시 다른 링크에서도 동일하게 반영.
• 고려 사항:
- 파일 시스템 제한(FS 간 불가)을 이해하고 사용.
- 하드 링크의 수가 많아지면 데이터 관리 복잡도 증가.
심볼릭 링크와 하드 링크 비교 표
특성 | 심볼릭 링크 | 하드 링크 |
파일 스시템 간 | 가능 | 불가능 |
데이터 블록 공유 | 공유하지 않음 | 공유 |
inode 공유 | 별도 inode 사용 | 동일 inode 사용 |
원본 삭제 시 | 깨진 링크 발생 | 데이터 접근 가능 |
디렉토리 링크 | 가능 | 일반적으로 불가능 |
유연성 | 높음 | 제한 |
2. 심볼링 링크와 하드링크의 사용 시점
2.1. 심볼릭 링크(Symbolic Link)
• 파일 시스템 간 경로를 참조해야 할 때.
• 경로가 가변적일 때 (예: 설정 파일의 최신 버전을 참조).
• 디렉토리를 링크해야 할 때 (하드 링크는 디렉토리 링크 불가).
2.2. 하드 링크(Hard Link)
• 파일 시스템 내에서 데이터 중복 없이 동일 데이터를 여러 경로에서 접근할 때.
• 데이터 손실 방지 및 백업 효과를 원할 때.
• 원본 파일 삭제로 인한 링크 손상을 방지할 때.
3. 사용 방법
3.1. 심볼릭 링크(Symbolic Link)
ln -s <원본 파일> <링크 이름>
예: ln -s /var/log/syslog /tmp/syslog_link
3.2. 하드 링크(Hard Link)
ln <원본 파일> <링크 이름>
예: ln /var/log/syslog /tmp/syslog_hardlink
4. 추가 기술적 개념
4.1. inode와 데이터 블록
• inode는 메타데이터(소유자, 권한, 크기 등) 저장.
• 데이터 블록은 실제 파일 내용 저장.
• 하드 링크는 동일 inode를 공유하지만, 심볼릭 링크는 별도 inode로 파일 경로만 저장.
4.2. 파일 시스템 간 심볼릭 링크 문제
외부 파일 시스템으로 이동 시 심볼릭 링크는 깨질 수 있음. 이 문제를 해결하려면 파일 복사 대신 링크 업데이트 필요:
rsync -a --copy-links /source /destination
4.3. 복구 및 관리 도구
• 심볼릭 링크 복구: readlink -f로 원본 경로 확인.
• 깨진 링크 제거: find /path -xtype l -delete.
5. 적용 예시
5.1. 설정 파일 관리
여러 버전의 설정 파일을 교체할 때 심볼릭 링크로 간편하게 관리.
ln -s /etc/app/config.v1 /etc/app/config
# 버전 변경 시
ln -sf /etc/app/config.v2 /etc/app/config
5.2. 데이터 백업 및 복원
하드 링크로 데이터 중복 없이 백업을 유지.
# 원본 삭제 후에도 백업 파일을 통해 데이터 접근 가능.
ln /home/user/data.txt /backup/data.txt
5.3. 시스템 디렉토리 간 참조
심볼릭 링크를 사용하여 대규모 디렉토리를 간단히 참조.
ln -s /mnt/storage/project /home/user/project_link
5.4. 깨진 링크 점검
심볼릭 링크가 깨졌는지 확인.
find /path -xtype l
5.5. 파일 중복 제거
동일한 데이터가 있는 경우 하드 링크를 생성해 디스크 공간 절약.
ln /path/file1 /path/file2
6. 성능 및 관리
6.1. 하드 링크의 디스크 공간 효율성.
• 동일 데이터 블록을 재사용하므로, 대량 데이터 백업 시 디스크 사용량 감소.
• 단점: 변경된 데이터가 모든 링크에 반영되므로 원본과 독립적인 데이터 관리가 불가.
6.2. 심볼링 링크의 유연성.
• 동적 파일 시스템 관리에 적합. 예를 들어, 최신 버전의 실행 파일 참조.
• 단점: 깨진 링크 발생 시 디버깅 필요.
6.3. 운영상 리스크 관리
심볼릭 링크는 경로 변경에 민감. 자동화 스크립트로 깨진 링크를 정리.
# 출력에서 링크 수 확인 (nlink 필드)
ls -l file_name
추가적으로 PostgreSQL 서버 운영 시 wal 파일로 인한 Disk Full 장애 시 장애 처리 방법으로도 심볼릭 링크를 활용할 수 있습니다.
오늘 포스팅은 여기까지입니다.
다음 포스팅에서 뵙겠습니다.
'Linux' 카테고리의 다른 글
Linux: OpenSSH 사용법 (0) | 2025.02.24 |
---|---|
Linux: chage 사용법 (0) | 2025.02.23 |
Linux: ulimit(open files, core file size) 리소스 제한 변경 방법 (0) | 2025.01.11 |
Linux: top 사용법 (1) | 2025.01.03 |
도커(Docker): 명령어 사전 (0) | 2024.12.16 |