예전에는 운영체제가 디스크 드라이브를 여러 개의 연속적인 디스크 블록의 집합으로 봤다. 디스크 드라이브 전체가 파일 시스템에 할당되거나, 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), 사용 가능한 블록의 리스트 및 사용 중인 블록의 리스트를 관리한다. 파일 시스템 메타데이터의 정합성이 맞아야 파일 시스템에 문제가 없다고 간주한다.
슈퍼블록은 파일 시스템 유형과 생성 및 수정 날짜, 크기, 레이아웃 같은 파일 시스템의 주요 정보를 저장한다. 또한 사용 가능한 리소스(프리 블록 개수, 아이노드 등)의 개수와 파일 시스템의 마운트 상황을 알려주는 플래그를 포함한다. 아이노드는 모든 파일과 디렉토리에 대해 만들어지며 파일 길이와 소유권, 액세스 권한, 최근 액세스/수정 시간, 링크 개수, 데이터 주소 등의 정보를 저장한다.