파일 시스템 블록(block)은 데이터를 저장하기 위해 할당하는 가장 작은 단위다. 각 파일 시스템 블록은 물리적 디스크에서의 연속 영역이다. 파일 시스템의 블록 크기는 생성 시 지정한다. 파일 시스템의 크기는 블록의 크기와 블록의 전체 개수로 정해진다. 파일은 블록 크기보다 큰 경우가 대부분이기 때문에 파일 시스템의 여러 블록을 사용한다. 새로운 블록을 추가하거나 삭제하면 연속적인 블록이 파편화될 수 있다. 파일이 점점 커지면 파일 시스템이 점점 파편화된다.

 

 다음은 사용자 파일을 LVM을 사용하는 디스크 스토리지 서브 시스템에 매핑하는 과정이다.

 

1. 사용자와 애플리케이션이 파일을 만들고 관리한다.

2. 이 파일은 파일 시스템에 존재한다.

3. 파일 시스템은 파일 시스템 블록에 매핑된다.

4. 파일 시스템 블록은 논리 볼륨의 논리적 익스텐트로 매핑된다.

5. 논리적 익스텐트는 OS나 LVM에 의해 물리적 익스텐트로 매핑된다.

6. 이 물리적 익스텐트는 스토리지 서브 시스템의 디스크 섹터로 매핑된다.

 

 LVM이 없다면 논리적 익스텐트도 없고, 파일 시스템 블록이 직접 디스크 섹터로 매핑된다.

 

 파일 시스템 트리(file system tree)는 루트 디렉토리(root directory)에서 시작한다. 루트 디렉토리는 여러 서브디렉토리를 갖는다. 파일 시스템은 사용하기 전에 마운트해야 한다. 

 

 fsck 시스템 유틸리티는 유닉스와 리눅스 호스트의 파일 시스템 일관성을 체크하는 데 사용한다. 파일 시스템의 일관성이 깨지는 예로는, 파일 시스템에 상당한 변화가 있고 변경 사항이 디스크에 커밋(commit)되기 전에 컴퓨터 시스템이 중단된 경우가 있다. 부팅 시에 fsck 명령어가 성공적인 부팅을 위해 파일 시스템의 일관성을 체크한다. 파일 시스템이 일관적이면 다른 모든 파일 시스템의 일관성을 체크한다. 비일관적인 상태의 파일 시스템이 있으면 마운트하지 않는다. 이런 파일 시스템은 fsck 명령어가 자동으로 복구하거나 사용자 인터페이스를 통해 복구할 수 있다. CHKDSK 명령어는 DOS와 OS/2, 마이크로소프트 윈도우에서 사용한다.

 

 파일 시스템은 크게 저널링 파일 시스템과 비저널닝 파일 시스템으로 나눌 수 있다. 비저널닝 파일 시스템(nonjournaling file system)은 데이터와 메타데이터를 업데이트할 때 별도의 쓰기 연산을 사용하기 때문에 파일을 잃을 수 있는 잠재적인 위험을 갖고 있다. 쓰기 도중 시스템이 중단되면 메타데이터나 데이터가 깨지거나 잃어버릴 수 있다. 시스템을 다시 부팅하면 파일 시스템은 메타데이터를 조사하고 복구해 메타데이터의 구조를 업데이트하려 한다. 이 작업은 큰 파일 시스템에서는 매우 오래 걸린다. 이전 구조를 복구하는 데 필요한 정보가 없는 경우에는 파일의 위치가 잘못되거나 잃게 돼 파일 시스템이 망가진다.

 

 저널링 파일 시스템(journaling file system)은 로그(log) 또는 저널(journal)이라 불리는 별도의 영역을 사용한다. 이 저널에는 모든 쓰기 연산의 데이터를 저장하거나(물리적 저널) 또는 업데이트된 메타데이터(논리적 저널)만 가질 수 있다. 파일 시스템에 변경 사항을 적용하기 전에 먼저 이 영역에 변경 사항을 기록한다. 저널을 업데이트한 후 파일 시스템에 대한 작업을 수행한다. 작업 도중 시스템이 중단돼도 로그 레코드를 재실행해 작업을 완료할 수 있는 충분한 정보가 로그에 있다. 저널링은 파일 시스템 체크 과정을 빠르게 해준다. 이는 체크 시에 가장 최근에 액세스된 부분만을 체크하면 되기 때문이다. 또한 지연된 작업에 대한 정보도 저장되기 때문에 파일을 잃을 위험도 줄어든다.

 

 저널링 파일 시스템의 단점은 여타 파일 시스템보다 느리다는 점이다. 이 속도 저하는 파일 시스템을 변경할 때마다 저널에 대한 부가적인 작업을 수행해야 하기 때문이다. 그러나 파일 시스템 체크 시간이 줄어들고 파일 시스템의 정합성이 보장된다는 장점이 단점보다 훨씬 크다. 오늘날 거의 대부분의 파일 시스템은 저널링을 사용한다.

 

 전용 파일 서버를 설치해 네트워크를 통해 파일을 관리하고 공유할 수 있다. 이런 파일 서버는 여러 파일 시스템을 지원하며, 운영체제에 특화된 파일 공유 프로토콜을 사용한다. 이런 파일 시스템의 예로는 NFS와 CIFS가 있다.

 

 컴퓨트 가상화는 운영체제로부터 물리적 하드웨어를 감추는 기술이다. 단일 또는 클러스터 머신에서 여러 운영체제를 동시에 운영할 수 있다. 이 기술로 가상 머신(VM, virtual machine)이라 불리는 포터블(portable) 가상 컴퓨트 시스템을 만들 수 있다. 각 VM은 고립된 방식으로 운영체제와 애플리케이션을 실행한다. 하드웨어와 가상 머신 사이의 가상화 레이어를 이용해 컴퓨트 가상화를 실현한다. 이 레이어는 하이퍼바이저(hypervisor)라고도 불린다. 하이퍼바이저는 CPU와 메모리, 네트워크 같은 하드웨어 리소스를 가상 머신에 제공한다. 물리적인 서버의 하드웨어 사양에 따라 한 서버 안에 많은 가상 머신을 만들 수 있다.

 

 가상 머신은 논리적인 요소이지만 운영체제에게는 CPU와 메모리, 네트워크 컨트롤러, 디스크를 가진 물리적 호스트로 인식된다. 그러나 모든 VM은 같은 물리적인 하드웨어를 독립적으로 공유한다. 하이퍼바이저의 관점에서 가상 머신은 VM 설정 파일과 데이터 파일 등의 독립적인 파일의 집합이다.

'IT > Storage' 카테고리의 다른 글

인터페이스 프로토콜과 스토리지  (0) 2022.06.29
컴퓨트 가상화와 연결  (0) 2022.06.29
미러링과 패리티  (0) 2022.06.29
RAID  (0) 2022.06.29
볼륨 매니저와 파일 시스템  (0) 2022.06.29

 

 

 예전에는 운영체제가 디스크 드라이브를 여러 개의 연속적인 디스크 블록의 집합으로 봤다. 디스크 드라이브 전체가 파일 시스템에 할당되거나, OS나 애플리케이션에서 사용하는 다른 엔티티에 할당됐다. 이런 방법의 단점은 유연성이 없다는 것이다. 디스크 드라이브의 공간이 부족해도 파일 시스템의 크기를 증가시킬 방법이 없었다. 또한 스토리지 용량이 증가하면서 전체 디스크 드라이브를 파일 시스템에 전부 할당하면 스토리지 용량의 활용도를 낮추는 결과를 초래했다.

 

 논리적 볼륨 매니저(LVM, Logical Volume Manager)로 인해 파일 시스템 용량을 동적으로 확장할 수 있고 효율적으로 스토리지를 관리할 수 있게 됐다. LVM은 컴퓨트 시스템에서 동작하는 소프트웨어로 논리적, 물리적 스토리지를 관리한다. LVM은 파일 시스템과 물리 디스크의 중간에 있는 레이어다. 디스크를 좀 더 작은 가상 볼륨으로 파티션하거나(파티셔닝partitioning이라고 함) 작은 디스크를 합쳐 큰 가상 볼륨(컨캐터네이션concatenation이라고 함)을 만들 수 있다.

 

 디스크 파티셔닝(disk partitioning)은 디스크 드라이브의 유연성과 활용도를 높여준다. 디스크 드라이브는 논리적 볼륨(LV, logical vlume)이라고 하는 논리적 저장소로 나뉜다. 예를 들어 큰 물리 드라이브를 파일 시스템과 애플리케이션의 요구사항에 따라 여러 개의 LV로 파티셔닝할 수 있다. 디스크 드라이브를 호스트에 처음 설치할 때, 여러 실린더를 그룹화해 파티션을 만든다. 호스트 파일 시스템은 파티셔닝과 디스크의 물리적 구조를 모르는 상태에서 논리 볼륨에 액세스한다.

 

 컨캐터네이션은 여러 물리 드라이브를 그룹화해 하나의 논리 볼륨으로 만드는 것이다.

 

 LVM은 최적화된 스토리지 액세스를 제공하며, 스토리지 리소스 관리를 간편히 해준다. 물리적 디스크나 디스크에서의 데이터 위치 같은 세부 사항을 사용자는 몰라도 된다.

 

 기본 LVM은 물리적 볼륨과 볼륨 그룹, 논리적 볼륨으로 구성된다. LVM에서 호스트 시스템에 연결된 각 물리 디스크를 물리적 볼륨(PV, physical volume)이라고 한다. LVM은 물리적 볼륨이 제공하는 물리적 스토리지를 OS나 애플리케이션이 사용하는 논리적인 뷰로 변환한다. 볼륨 그룹(volume group)은 1개 이상의 물리 볼륨은 그룹화해 만든다. 각 볼륨을 초기화할 때 LVM이 사용할 고유 물리적 볼륨 아이디(PVID, physical volume identifier)를 할당한다. 볼륨 그룹에 동적으로 물리적 볼륨을 추가하거나 삭제할 수 있다. 하나의 물리적 볼륨을 여러 볼륨 그룹 간에 공유할 수는 없다. 이는 볼륨 그룹에는 1개의 물리적 볼륨 전체가 포함돼야 함을 의미한다. 각 볼륨 그룹을 만들 대는 물리적 익스텐트(physical extent)라 불리는 같은 크기의 데이터 블록 집합으로 파티셔닝한다.

 

 논리적 볼륨은 주어진 볼륨 그룹에서 만들어진다. 논리적 볼륨은 디스크 파티션으로 생각할 수 있으며, 볼륨 그룹 자체는 디스크로 볼 수 있다. 볼륨 그룹은 여러 개의 논리적 볼륨을 가질 수 있다. 논리적 볼류믜 크기는 물리적 익스텐트 크기의 배수가 된다.

 

 논리적 볼륨은 OS에게 물리적 디바이스로 인식된다. 논리적 볼륨은 비연속적인 물리적 익스텐트로 구성되며, 여러 물리적 볼륨에 걸쳐 있을 수 있다. 파일 시스템은 논리적 볼륨에 대해 만든다. 이 논리적 볼륨이 애플리케이션에 할당된다. 논리적 볼륨은 데이터 가용성을 높이기 위해 복제될 수 있다.

 

 파일(file)은 관련 레코드의 집합 또는, 이름을 가진 단위로 저장된 데이터를 말한다. 파일 시스템(file system)은 파일의 계층 구조다. 파일 시스템은 디스크 드라이브나 디스크 파티션, 논리적 볼륨에 저장된 데이터 파일에 액세스할 수 있게 한다. 파일 시스템은 논리적 구조와 파일 액세스를 조정하는 소프트웨어 루틴으로 구성된다. 파일 시스템을 이용해 사용자는 파일을 만들고 수정, 삭제할 수 있으며 파일에 액세스한다. 디스크의 파일에 대한 앣스는 소유자가 지정한 권한에 따라 제어되며, 이는 파일 시스템이 관리한다.

 

 파일 시스템은 데이터를 디렉토리를 이용해 계층 구조로 관리한다. 디렉토리는 여러 파일에 대한 포인터를 저장하는 컨테이너다. 모든 파일 시스템은 디렉토리와 서브디렉토리, 파일에 대한 포인터 맵을 관리한다. 유명한 파일 시스템의 예는 다음과 같다.

 

- 마이크로소프트 윈도우의 FAT 32(파일 할당 테이블 File Allocation Table)

- 마이크로소프트 윈도우의 NT 파일 시스템(NTFS)

- 유닉스의 UNIX 파일 시스템(UFS)

- 리눅스의 확장 파일 시스템(EXT2/3)

 

 파일과 디렉토리 외에 파일 시스템은 메타데이터(metadata)라는 관련 정보를 관리한다. 예를 들어 유닉스에서는 슈퍼블록(superblock) 아이노드(inode), 사용 가능한 블록의 리스트 및 사용 중인 블록의 리스트를 관리한다. 파일 시스템 메타데이터의 정합성이 맞아야 파일 시스템에 문제가 없다고 간주한다.

 

 슈퍼블록은 파일 시스템 유형과 생성 및 수정 날짜, 크기, 레이아웃 같은 파일 시스템의 주요 정보를 저장한다. 또한 사용 가능한 리소스(프리 블록 개수, 아이노드 등)의 개수와 파일 시스템의 마운트 상황을 알려주는 플래그를 포함한다. 아이노드는 모든 파일과 디렉토리에 대해 만들어지며 파일 길이와 소유권, 액세스 권한, 최근 액세스/수정 시간, 링크 개수, 데이터 주소 등의 정보를 저장한다.

'IT > Storage' 카테고리의 다른 글

미러링과 패리티  (0) 2022.06.29
RAID  (0) 2022.06.29
DBMS와 호스트  (0) 2022.06.29
가상화와 클라우드 컴퓨팅  (0) 2022.06.29
스토리지 아키텍처  (0) 2022.06.12

+ Recent posts