Linux 파일 시스템에는 디스크나 디렉토리에 있는 다른 블록 스토리지 장치에 배열된 파일이 들어 있다. 다른 많은 시스템과 마찬가지로, Linux 시스템 상의 디렉토리에는 서브디렉토리라는 다른 디렉토리가 포함될 수 있다. 다른 드라이브 문자(A:, C: 등)에 별개의 파일 시스템이 있는 개념으로 구성되는 Microsoft&(R) Windows&(R) 같은 시스템과는 달리, Linux 파일 시스템은 / 디렉토리를 루트 디렉토리로 가진 단일 트리이다.
파일 시스템이 단지 하나의 큰 트리라면 디스크 레이아웃이 뭐가 그리 중요한지 의아할 것이다. 실제로는 하드 드라이브 파티션, CD-ROM 또는 플로피 디스크와 같은 각각의 블록 장치에 파일 시스템이 있다. 마운트 지점이라는 트리 내의 한 지점에 있는 다른 장치들에 파일 시스템을 마운트하여 파일 시스템에 대한 단일 트리 뷰를 만든다.
일반적으로, 커널은 어떤 하드 드라이브 파티션에 파일 시스템을 /로 마운트함으로써 이 마운트 프로세스를 시작한다. 다른 하드 드라이브 파티션을 /boot, /tmp 또는 /home으로 마운트할 수도 있다. 예를 들어, 파일 시스템을 플로피 드라이브에는 /mnt/floppy로, CD-ROM에는 /media/cdrom1로 마운트할 수 있다. NFS와 같은 네트워크 파일 시스템을 사용하여 다른 시스템에서 파일을 마운트할 수도 있다. 다른 유형의 파일 마운트도 있지만, 이 유형으로 프로세스에 대한 개념은 파악할 수 있다. 마운트 프로세스에서는 실제로 어떤 장치에 파일 시스템을 마운트하지만 간단히 "장치를 마운트한다"고 말하는 것이 일반적이며, 이 말은 곧 "장치에 파일 시스템을 마운트한다"는 의미로 통한다.
이제, 방금 루트 파일 시스템(/)을 마운트했는데 마운트 지점 /media/cdrom에 CD-ROM인 /dev/sr0을 마운트하려는 경우를 생각해보자. 마운트 지점에 CD-ROM을 마운트하기에 앞서 우선 해당 마운트 지점이 존재해야 한다. CD-ROM을 마운트하면 CD-ROM 상의 파일과 서브디렉토리가 /media/cdrom과 그 이하의 경로에 있는 파일과 서브디렉토리가 된다. 이미 /media/cdrom에 있었던 모든 파일이나 서브디렉토리는 여전히 마운트 지점 /media/cdrom에 포함된 블록 장치에 있지만 더 이상 볼 수 없다. CD-ROM이 마운트 해제되면 원본 파일과 서브디렉토리를 다시 볼 수 있게 된다. 따라서 마운트 지점으로 사용할 목적으로 만든 디렉토리에 다른 파일을 넣지 않도록 주의하여 이런 문제가 생기지 않게 해야 한다.
첫 번째 SCSI 드라이브는 보통 /dev/sda이다. 이전의 Linux 시스템에서 첫 번째 IDE 하드 드라이브는 /dev/hda이다. 직렬 연결된 (SATA) IDE 드라이브의 등장과 함께, PATA/SATA 혼합 시스템에서는 때때로 첫 번째 PATA 드라이브에 대해서는 /dev/hda, 첫 번째 SATA 드라이브에 대해서는 /devsda를 사용한다. 그 이후에 나온 신형 시스템에서는 모든 IDE 드라이브의 이름이 /dev/sda, /dev/sdb 등으로 지정되었다. IDE 드라이브의 이름 변경은 최초로 USB 드라이브를 지원한 핫플러그 시스템의 결과다. 핫플러그 덕분에 새 장치를 플러그인하는 즉시 사용할 수 있으며, 현재 핫플러그는 장치가 시스템에 내장되어 있든 USB 또는 Firewire(IEEE 1394)를 사용하여 작동 중인 시스템에 나중에 플러그인하든 다른 유형의 연결을 하든 상관없이 모든 장치에 사용된다.
일반적으로, 하드 드라이브는 512바이트 섹터로 포맷된다. 헤드를 움직이지 않고 읽을 수 있는 디스크 플래터 상의 모든 섹터가 트랙을 구성한다. 디스크에는 보통 둘 이상의 플래터가 있다. 헤드를 움직이지 않고 읽을 수 있는 다양한 플래터 상의 트랙 콜렉션을 실린더라고 한다. 하드 드라이브의 구조는 실린더 수, 실린더당 트랙(또는 헤드) 수, 트랙당 섹터 수로 표현된다. 이 기사를 쓰는 현재, 드라이브 제조업체들은 4K 섹터를 가진 디스크를 출시하기 시작하고 있다. 파일 시스템에서 여전히 512바이트 섹터로 받아들이는 경우, 파티션이 4K 경계에 있는 섹터에서 시작하지 않으면 성능이 저하될 수 있다.
PC 시스템에 있는 DOS 운영 체제에서 사용되는 실린더, 헤드 및 섹터에 대해 가능한 크기에 대한 제한으로 BIOS 변환 구조 값이 생겼고, 이로 인해 더 큰 하드 드라이브가 지원될 수 있다. 결국, 이런 방법들도 충분치 못했다. 보다 최근에 이루어진 디스크 드라이브 기술의 발전으로 논리적 블록 주소 지정(LBA)으로 이어졌고, 이에 따라 CHS 구조 측정의 중요성이 떨어지고 현대적 디스크의 구조는 실제의 물리적 섹터 레이아웃과 거의 또는 아무런 관계가 없을 수도 있다. 오늘날 사용 중인 대용량 디스크들은 섹터 번호를 위해 최대 48비트까지 예약해서 LBA48이라고 알려진 LBA로까지 확장되었다.
하드 드라이브 상의 공간은 파티션으로 분리된다(파티션된다). 파티션은 겹칠 수 없다. 파티션에 할당되지 않는 공간을 여유 공간이라고 한다. 파티션에는 /dev/hda1, /dev/hda2, /dev/hda3, /dev/sda1 등의 이름이 있다. IDE 드라이브는 IDE 드라이브를 위한 핫플러그 지원을 이용하지 않는 시스템에서는 파티션 수가 63개로 제한된다. 핫플러그가 지원되는 SCSI 드라이브, USB 드라이브 및 IDE 드라이브는 파티션 수가 15개로 제한된다. 파티션은 종종 실린더의 총 개수로 할당된다(실린더에 대한 부정확한 개념을 바탕으로 함).
서로 다른 두 파티셔닝 프로그램에서 명목 디스크 구조를 다르게 이해하는 경우, 한 파티셔닝 프로그램이 다른 파티셔닝 프로그램에서 만든 파티션에 오류가 있거나 문제 발생 가능성이 있는 것으로 보고할 수 있다. 특히 BIOS 기능이 서로 다른 두 시스템 간에 디스크를 이동하는 경우에도 이런 종류의 문제가 발생할 수 있다.
parted 또는 fdisk 도구를 사용하면 Linux 시스템에서 명목 구조를 볼 수 있다. 이전 버전의 Linux 시스템에서는 /proc 파일 시스템, /proc/ide/hda/geometry와 같은 파일, 최신 버전의 시스템에는 없을 수도 있는 파일에서 구조를 보고하기도 했다. Listing 1은 fdisk 명령을 사용하여 SATA가 연결된 IDE 하드 드라이브의 파티션과 구조를 표시하는 방법을 나타낸 것이다. fdisk의 -v 매개변수로 버전을 확인할 수 있다. 파티션 테이블을 표시하거나 조작하려면 여기에 나타낸 것처럼 루트 사용자이거나 sudo를 통해 루트 권한을 가지고 있어야 한다.
IDE 드라이브에는 기본, 논리 및 확장 파티션이라는 세 가지 유형의 파티션이 있다. 파티션 테이블은 디스크의 MBR(Master Boot Record)에 있다. MBR은 디스크 상의 첫 번째 섹터이므로, 파티션 테이블이 디스크의 매우 큰 부분을 차지하지는 않는다. 따라서 디스크에 있는 기본 파티션의 수는 4개로 제한된다. 그런 일이 자주 있겠지만, 5개 이상의 파티션이 필요할 때는 기본 파티션 중 하나가 대신 확장 파티션이 되어야 한다.
확장 파티션은 단순히 하나 또는 대개의 경우 그 이상의 논리 파티션을 위한 컨테이너일 뿐이다. 이런 파티셔닝 스킴은 원래는 MS DOS와 PC DOS에서 사용되었는데, 이를 통해 DOS, Windows 또는 Linux 시스템에서 PC 디스크를 사용할 수 있다. 한 디스크에는 확장 파티션이 하나만 포함될 수 있다. 데이터는 확장 파티션 내부의 논리 파티션에 저장된다. 우선 확장 파티션 내에 논리 파티션부터 만들어야 확장 파티션에 데이터를 저장할 수 있다.
Linux에서는 기본 또는 확장 파티션을 1에서 4까지 번호를 지정하므로, dev/sda에는 4개의 기본 파티션, 즉 /dev/sda1, /dev/sda2, /dev/sda3 및 /dev/sda4가 있을 수 있다. 또는 기본 파티션 /dev/sda1 하나와 확장 파티션 /dev/sda2가 있을 수도 있다. 논리 파티션이 정의되어 있는 경우 이 파티션은 5부터 시작해서 번호가 지정되므로, 디스크에 기본 파티션이 없고 확장 파티션(/dev/sda1)만 하나 있더라도 /dev/sda에서 첫 번째 논리 파티션은 /dev/sda5가 된다. 따라서 IDE 드라이브에 5개 이상의 파티션을 원하는 경우 파티션 번호 하나는 확장 파티션에 내주게 될 것이다. IDE 드라이브에서 이론적인 최대 파티션 수는 이제 핫플러그를 포함한 커널에 대해 15개로 제한되지만, 마지막 몇 개를 만들거나 만들지 못할 수 있다. 한 드라이브에서 12개를 넘는 파티션을 사용할 계획이라면 모든 것이 올바로 작동할 수 있는지 조심스럽게 확인한다.
앞서 제시한 예제들에 사용되는 디스크에는 3개의 기본 파티션이 있으며, 이들은 전부 Linux용으로 포맷되어 있다. 두 기본 파티션에서 ext3 파일 시스템을 사용하고, 나머지 한 기본 파티션에서는 ext4를 사용한다. Listing 4는 Ubuntu 9.10 시스템에 기본, 확장 및 논리 파티션이 있는 내부 드라이브와 Fedora 12 시스템에 연결된 USB 드라이브에 대해 parted 명령 p를 사용하여 얻은 출력 결과를 나타낸 것이다. 다른 파일 시스템 유형에 유의한다. 또한, 명령행에서 하나 이상의 parted 명령을 지정하면 대화식 모드를 피할 수 있다.
앞서 언급했듯이, Linux 파일 시스템은 /에 루트가 있는 단일 대형 트리이다. 플로피 디스크나 CD-ROM 상의 데이터를 마운트해야 하는 이유는 아주 명백하지만, 하드 드라이브에 저장된 데이터의 분리를 고려해야 하는 이유는 아마 덜 분명할 것이다. 파일 시스템을 분리해야 하는 몇 가지 합당한 이유는 다음과 같다.
&- 부트 파일. 부팅 시 BIOS 또는 부트 로더에서 일부 파일에 액세스할 수 있어야 한다.
&- 다중 하드 드라이브. 일반적으로 각각의 하드 드라이브는 하나 이상의 파티션으로 나뉘며, 각 파티션에는 파일 시스템 트리의 어느 지점에서는 마운트해야 하는 파일 시스템이 있다.
&- 공유 가능한 파일. 여러 시스템 이미지가 실행 가능 프로그램 파일과 같은 정적 파일을 공유할 수 있다. 사용자 홈 디렉토리나 메일 스풀 파일 같은 동적 파일도 공유될 수 있으므로, 사용자는 네트워크 상의 여러 시스템 중 어느 하나에 로그인하고 계속 같은 홈 디렉토리와 메일 시스템을 사용할 수 있다.
&- 오버플로우 가능성. 파일 시스템이 용량의 100%까지 가득 찰 수 있는 경우, 일반적으로 시스템을 실행하는 데 필요한 파일에서 이것을 분리하는 것이 좋은 방법이다.
&- 할당량. 할당량에 따라 사용자나 그룹이 파일 시스템에서 차지할 수 있는 공간의 양이 제한된다.
&- 읽기 전용 마운트. 저널링 파일 시스템이 등장하기 전에는 시스템 충돌 후 파일 시스템 복구에 오랜 시간이 걸렸었다. 따라서 (실행 가능 프로그램의 디렉토리와 같이) 거의 변경되지 않은 파일 시스템은 시스템 충돌 후 이를 확인하느라 시간을 낭비하지 않도록 읽기 전용으로 마운트할 수 있었다.
지금까지 다룬 파일 시스템의 용도 외에, 디스크 상의 할당 스왑 공간도 고려할 필요가 있다. Linux 시스템의 경우, 이 공간은 보통 하나의 전용 파티션이거나 여러 개의 전용 파티션일 수도 있다.