저번 포스트에 이어 리눅스에서 저장 장치를 관리하는데 필요한 개념인 파일 시스템과 마운트에 대해 설명하겠다.
1. OS에서 데이터를 관리하는 방법: 파일 시스템(File System)
파일 시스템(File System)은 운영체제에서 데이터를 저장하고 관리하는 체계로, 저장 장치(HDD, SSD..)에 파일이라는 단위로 데이터를 관리하고 배치하여 사용자가 데이터에 쉽게 접근 및 수정할 수 있게 해준다. 쉽게 말해, 어떤 물건을 어떤 캐비넷에 넣을지, 해당 캐비넷은 어떤 방에 둘지 정리 방법을 정하는 것(계층적)과 유사하다. 파일 시스템의 종류는 다음과 같다.
파일 시스템 종류
1) EXT(Extended File System) - EXT4
- 리눅스에서 주로 사용되는 저널링 파일 시스템이다(RHEL 6까지 기본 파일 시스템으로 사용되었다).
- EXT4는 EXT3에 비해 더 큰 파일(최대 16TB)과 파일 시스템(최대 1EB)을 지원하여 대용량 스토리지를 다룰 수 있다
- 하지만, XFS에 비해서는 대용량 데이터 처리 기능이 부족하다.
- 파일 데이터를 효율적으로 저장하기 위해 Extent 구조를 사용한다. Extent는 연속된 데이터 블록을 하나의 단위로 묶어 관리하는 방식으로 조각화 현상을 줄이는데 유리하다.
- fsck(file system check) 속도를 대폭 개선하여, 파일 시스템 크기가 커도 빠르게 검사 및 복구가 가능하다
2) XFS(eXtended File System)
- 고성능 64bit 저널링* 파일 시스템으로 리눅스에서 주로 사용된다(RHEL 7 부터 기본 파일 시스템으로 사용)
- 최대 파일 크기는 8EB를 지원한다
- 저널링 파일 시스템: 데이터를 수정/변경 시 변경 사항을 먼저 로그(저널)에 기록하고, 로그에 저장되면 실제 데이터를 변경하는 방식이다. 저널링 파일 시스템을 사용하면, 비정상적인 오류, 정전 등이 발생했을 때, 로그를 참고하여 빠른 복구 및 데이터 무결성을 보장한다. 일반적으로 성능과 데이터 보호 사이에서 균형을 맞추기 위해서 XFS에서는 메타 데이터만 저널링하고, 데이터 저널링은 선택적으로 가능하다.
- 멀티스레딩과 비동기 IO를 지원하여 파일을 병렬 처리하고, 대규모 파일 시스템, 대용량 파일을 관리하는데 최적화되어있다(소규모 파일 처리는 조금 느림, EXT4가 더 유리할 수도 있음)
*메타 데이터와 데이터
데이터는 파일의 실제 내용을 의미하고, 메타 데이터는 파일 명, 파일 크기, 생성 날짜, 권한 등 파일에 대한 설명 정보를 의미한다.
3) NTFS(New Technology File System)
- Windows에서 기본 파일 시스템으로 사용된다
- 최대 파일 크기는 16TB, 최대 파일 시스템 크기(볼륨)은 16EB(대용량)
- 저널링을 통해 데이터 손상 방지 및 빠른 복구 지원(데이터 무결성, 안정성)
- 파일/디렉토리 단위에서 ACL(Access Contrl List)을 사용해 권한을 설정하고, EFS(Encrypting File System)을 통해 파일/디렉토리를 암호화하여 보안 기능을 제공
- 다른 운영체제와의 호환성에 일부 제약이 존재한다
4) FAT(File Allocation System) - FAT32, exFAT
- 가장 오래된 파일 시스템(DOS부터 사용)
- FAT32
- FAT의 시스템 확장 버전
- 최대 파일 크기 4GB(대용량 파일을 다룰 때 제한적)
- 대부분의 운영체제에서 지원됨(높은 호환성)
- 저널링 기능은 지원하지 않는다
- 가벼워서(구조가 단순) USB와 같은 소형 장치에 많이 사용한다
- exFAT
- FAT32의 단점을 개선한 버전
- 최대 파일의 크기 16EB, 최대 파일 시스템 크기(볼륨) 12PB (대용량 파일 지원)
- 저널링 미지원
- Windows, macOS, 최신 버전의 Linux에서 지원, FAT 32만큼 호환성이 좋지는 못하다
외에 UFS, ReFS, HFS+.. 등등이 존재한다
다시 돌아와, 파티션에 파일 시스템을 생성하는 작업을 포맷팅(formatting)이라고 한다(정확히 말하면 high level formatting*이다). 각 파티션 마다 별도의 파일 시스템이 필요하며, 어떤 파일 시스템을 사용할지는 호환성, 보안성, 파티션의 크기, 용도 등을 고려해서 선택한다.
*우리는 주로 컴퓨커를 초기화할 때, '포맷한다'라고 말하곤 한다. 앞서 언급한 포맷팅을 할 때, 파일 시스템을 설정하기에 앞서 저장 장치를 초기화하게 된다. 따라서 유사한 의미로 데이터 삭제를 포맷한다고 지칭하는 것이다.
*high level formatting과 low level formatting
low level formatting: 하드 디스크에 물리적으로 데이터를 기록할 수 있는 기본 구조를 만드는 작업(물리적 구조). 주로 하드 디스크 제조사에서 수행되기 때문에 일반적으로 하는 경우는 거의 없다.
high level formatting: 디스크에 파일 시스템을 설정하는 과정(논리적 구조)
마지막으로, 리눅스에서 파일 시스템을 관리하는 명령어를 정리해보면 다음과 같다.
- file -s [파티션 명]: 파티션의 파일 시스템이 무엇인지 확인할 수 있다
$ sudo file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=abcd-1234-5678-efgh (needs journal recovery) (extents) (large files) (huge files)
- df -T: 마운트된 파티션의 파일 시스템과 디스크 사용량을 보여준다(-T: 파일 시스템의 종류를 보여주는 역할)
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 123456789 4567890 123456789 10% /
/dev/sdb1 xfs 987654321 1234567 876543210 5% /data
tmpfs tmpfs 1024000 0 1024000 0% /run
- mkfs.[사용할 파일 시스템] [포맷할 파티션 명]
ex)
mkfs.xfs /dev/sdb1
mkfs.ext4 /dev/sdb2
2. 디렉토리에 파티션을 연결하라: 마운트(mount)
마운트(mount)는 파티션을 실제 저장 공간으로 사용하기 위해서 디렉토리에 연결하는 작업이다. Windows의 경우 드라이브와 파티션을 연결하는 것과 동일하다. '파티션을 디렉토리에 마운트한다'라고 하는데, 이때 파티션과 연결되는 디렉토리를 마운트 포인트(mount point)라고 한다.
위 예시의 경우 /sdbdir 디렉토리가 /dev/sdb1 파티션의 마운트 포인트라고 할 수 있다. 마운트/언마운트에 사용되는 명령어는 다음과 같다.
- mount [마운트할 파티션] [마운트 포인트]
mount /dev/sdb1 /sdbdir/
=> /dev/sdb1 파티션을 /sdbdir/ 디렉토리에 마운트한다
- umount
umount [장치명]
umount [마운트 포인트]
- 마운트 상태 확인
mount
df
=> 현재 마운트된 파일 시스템 목록을 확인
여기서 한 가지 문제가 생긴다. 우리가 mount 명령어를 통해 열심히 마운트를 했지만, 재부팅하고 나면 마운트가 해제되어 있다. 매번 직접할 수도 있지만, 이런 상황을 편하게 해결해주는 것이 /etc/fstab 를 이용한 자동 마운트이다. 방법은 단순하다 /etc/fstab 파일에 마운트할 정보를 기록하면 된다.
<마운트할 파티션> <마운트 포인트> <파일 시스템 타입> <마운트 옵션> <dump> <fsck>
- 마운트 옵션: 파티션이 디렉토리에 마운트될 때의 접근 권한을 설정 (default(r/w), r, w..)
- 덤프: 덤프 백업 여부(일반적으로 0)
- fsck: 무결성 검사 설정
*파일 시스템 무결성 검사(File System Check)
: 파일시스템이 손상되면 데이터를 읽고 쓸 수 없게 된다. 따라서 손상 여부를 검사하고, 필요 시 수리해야하는데, 이것을 수행해주는 것이 파일 시스템 무결성 검사(fsck)이다. 간단한 문제인 경우 수리가 가능하지만, 복잡하거나 심각한 문제는 수리가 불가하다.
힘들지만 오늘도 해낸 나를 위한 한 마디,
"If you have good thoughts, they will shine out of your face like sunbeams and you will always look lovely", Roald Dahl
"부정적인 생각이 들 때, 5초만 멈춰서 발상을 전환하보면 긍정적으로 생각해볼 여지는 충분하다. 긍정의 힘을 믿어보자"
'System > Linux' 카테고리의 다른 글
[Linux] DNS part 1 (0) | 2024.10.01 |
---|---|
[Linux] 원격 관리 서비스(Telnet, SSH) (1) | 2024.09.26 |
[Linux] 저장소(Storage)관리 (5) | 2024.09.24 |
[Linux] init? runlevel? target? (0) | 2024.09.23 |
[Linux] 작업 예약 명령어: cron (2) | 2024.09.21 |