Linux

Linux: 심볼릭 링크와 하드 링크

dewstream 2025. 1. 16. 17:00

※ 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