리눅스 환경에서 저장 장치를 활용하기 위해서는 우선 파일 시스템을 구성해야 합니다. 여기서는 mkfs 명령어와 기타 유틸리티를 사용하여 다양한 파일 시스템을 구축하는 방법을 상세히 알아보겠습니다.
mkfs 명령어를 이용한 파일 시스템 생성
mkfs
명령어는 저장 장치에 파일 시스템을 설정하는 핵심 도구입니다. 이는 마치 디스크를 ‘포맷’하는 과정과 유사하며, 데이터 저장을 위한 파티션을 준비하는 과정입니다. 파티션은 단순한 데이터 저장 공간이 아니라, 파일 이름, 위치, 생성 및 수정 시간, 크기 등 파일의 메타데이터를 관리하는 체계도 필요합니다. mkfs
는 이러한 메타데이터를 처리하고 저장하는 데 필요한 기반을 구축하여 파티션에 파일을 저장할 수 있도록 합니다.
mkfs
명령어의 기본 문법은 매우 직관적입니다. 파일 시스템을 만들고자 하는 저장 장치 파티션과 사용할 파일 시스템의 유형을 지정하기만 하면 됩니다. 하지만 내부적으로는 좀 더 복잡한 과정을 거칩니다. 대부분의 리눅스 배포판에서 mkfs
는 사실 mke2fs
의 래퍼(wrapper) 역할을 합니다. 즉, mkfs
명령어는 사용자가 지정한 옵션을 받아 mke2fs
명령어를 실행하는 구조입니다. 실제 파일 시스템 생성 작업은 mke2fs
가 담당하지만, 사용자에게는 mkfs
가 더 편리한 인터페이스를 제공합니다.
최근에는 mkfs
명령어의 사용법이 현대적인 방식으로 업데이트되어 기존 방식과 함께 두 가지 스타일 모두 사용할 수 있지만, 이 글에서는 현대적인 사용법을 중심으로 설명합니다.
원하는 파일 시스템 선택하기
mkfs
명령어를 현대적으로 사용하는 방법은 다음과 같습니다. 먼저 mkfs
를 입력하고 스페이스바를 누른 후, 생성하려는 파일 시스템의 이름을 지정합니다. 예를 들어, Ext4 파일 시스템을 만들고 싶다면 mkfs.ext4
와 같이 입력하면 됩니다.
mkfs
명령어로 생성 가능한 파일 시스템 목록을 확인하려면 mkfs
를 입력한 후, 스페이스바 없이 Tab 키를 두 번 누릅니다. 터미널 창에 사용 가능한 파일 시스템 목록이 표시됩니다. 배포판에 따라 옵션의 종류가 다를 수 있으며, 여기서는 주요 파일 시스템에 대해 간략히 살펴보겠습니다.
파일 시스템 선택에 있어 중요한 개념 중 하나는 ‘저널링’입니다. 저널링 파일 시스템은 데이터 쓰기 작업을 저널에 기록하고, 시스템 충돌이나 전원 차단 등으로 인한 데이터 손실을 방지합니다. 저널을 통해 파일 시스템은 손상된 파일을 복구할 수 있습니다. 일부 이전 파일 시스템은 저널링 기능을 지원하지 않아 데이터 손실 위험에 노출될 수 있지만, 디스크 쓰기 빈도를 줄여 성능을 향상시킬 수도 있습니다.
주요 파일 시스템은 다음과 같습니다.
- Ext2: 리눅스 초창기에 사용된 파일 시스템으로, 저널링 기능을 제공하지 않습니다.
- Ext3: Ext2의 후속 버전으로, 저널링 기능을 추가하여 안정성을 높였습니다.
- Ext4: 현재 리눅스 배포판의 표준 파일 시스템이며, Ext3에 비해 더 큰 드라이브와 파티션을 지원하고 파일 단편화를 줄이는 기능이 있습니다.
- BFS: 부팅 파티션 전용 파일 시스템으로, 일반적으로 리눅스 설치 과정에서 자동으로 생성됩니다.
- FAT: 플로피 디스크용으로 개발된 파일 시스템으로, 리눅스 외 다른 운영체제와의 호환성이 필요할 때 사용됩니다.
- NTFS: 윈도우 NT 운영체제에서 사용되는 저널링 파일 시스템으로, 리눅스가 아닌 운영체제와의 호환성을 위해 사용됩니다.
- MINIX: ‘미니 유닉스’ 운영체제에서 사용되는 파일 시스템으로, 유닉스 파일 시스템을 단순화한 버전입니다.
- VFAT: 윈도우 95에서 도입된 파일 시스템으로, 파일 이름 길이 제한을 255자까지 확장했습니다.
- CRAMFS: 임베디드 시스템과 같이 읽기 전용으로 사용되는 압축된 파일 시스템입니다.
- MSDOS: 초기 마이크로소프트 디스크 운영체제에서 사용된 가장 기본적인 파일 시스템입니다.
안전하게 파일 시스템 실험하기
파티션에 파일 시스템을 생성하면 해당 파티션의 기존 데이터는 모두 손실됩니다. 따라서 다양한 파일 시스템을 실험하려면 예비 하드 드라이브나 가상 머신을 사용하는 것이 좋습니다. 하지만 예비 하드웨어가 없는 경우, 이미지 파일을 생성하여 그 안에 파일 시스템을 만들고 마운트하여 실험할 수 있습니다.
dd
명령어를 사용하면 이미지 파일을 쉽게 만들 수 있습니다. dd
명령어는 입력 데이터를 지정된 출력 파일로 복사하는 역할을 합니다. 여기서는 입력 데이터로 /dev/zero
를 사용하여 0으로 채워진 이미지 파일을 만들 것입니다.
다음 명령을 실행하여 250MB 크기의 이미지 파일 “wdzwdz.img”를 생성합니다.
dd if=/dev/zero of=~/wdzwdz.img bs=1M count=250
dd
명령어는 요청한 대로 250개의 블록을 생성했음을 알려줍니다.
ls
명령어로 이미지 파일의 크기를 확인합니다.
ls -hl
250MB 크기의 이미지 파일이 생성되었음을 확인할 수 있습니다.
파일 시스템 생성하기
이제 이미지 파일 안에 파일 시스템을 생성해 보겠습니다. 여기서는 가장 초기 버전의 Ext 파일 시스템인 Ext2를 사용하여 비저널링 파일 시스템을 생성할 것입니다. mkfs.ext2
명령어를 사용하여 이미지 파일에 Ext2 파일 시스템을 만듭니다.
mkfs.ext2 ~/wdzwdz.img
파일 시스템이 성공적으로 생성되었으며, 파일 시스템 관련 세부 정보가 출력됩니다.
출력 결과에서 mke2fs
가 실제로 작업을 수행했음을 확인할 수 있습니다. 이제 이미지 파일은 하드 드라이브를 대신하는 파일 시스템 컨테이너가 되었으며, 이 컨테이너 내부에 파일 시스템이 생성되었습니다. 다음으로 파일 시스템을 마운트하여 사용할 수 있도록 해야 합니다.
임시로 사용하기 위해 `/mnt` 디렉토리 안에 “geek”이라는 마운트 포인트를 만듭니다.
sudo mkdir /mnt/geek
이미지 파일을 마운트합니다.
sudo mount ~/wdzwdz.img /mnt/geek
마운트 지점에 대한 읽기 및 쓰기 권한을 부여하기 위해 소유권을 변경합니다.
sudo chown dave:users /mnt/geek/
이제 새로운 파일 시스템을 사용할 수 있습니다. 파일 시스템으로 이동하고 파일을 복사해 보겠습니다.
cd /mnt/geek
cp ~/Documents/Code/*.? .
`~/Documents/Code` 디렉토리에서 확장자가 단일 문자인 모든 파일을 새 파일 시스템으로 복사합니다. 복사되었는지 확인해 봅시다.
ls
파일이 복사되었고, 파일 시스템이 성공적으로 생성, 마운트되어 사용 가능하게 되었습니다. 마운트 해제하고 제대로 동작하는지 다시 한번 확인해 보겠습니다.
sudo umount /mnt/geek
마운트가 해제되었으므로 `/mnt/geek` 디렉토리로 이동하여 파일을 확인하면, 해당 파일들은 이미지 파일 내부에 존재하므로 찾을 수 없게 됩니다.
cd /mnt/geek
ls
다양한 파일 시스템 탐색
이제 파일 시스템 생성 과정을 익혔으니, 다른 파일 시스템도 쉽게 시도해 볼 수 있습니다. 이번에는 MINIX 파일 시스템을 사용해 보겠습니다. 홈 디렉토리에서 기존 이미지 파일 내부에 새 파일 시스템을 생성합니다.
주의! 이미지 파일 내부에 중요한 파일이 있다면 새 파일 시스템을 만들기 전에 반드시 백업해야 합니다.
mkfs.minix ~/wdzwdz.image
경고 메시지 없이 이전 파일 시스템 위에 새 파일 시스템이 생성됩니다. 이전과 동일한 명령으로 이미지 파일을 마운트합니다.
sudo mount ~/wdzwdz.img /mnt/geek
`/mnt/geek`에서 새 파일 시스템으로 변경하고 파일을 생성할 수 있는지 확인합니다.
touch geek.txt
ls -ahl geek.txt
새 파일 시스템이 성공적으로 생성되고 마운트되어 사용 가능하게 되었습니다.
마운트 포인트 제거하기
작업이 완료되면 “geek” 마운트 포인트를 제거할 수 있습니다. rmdir
명령어를 사용합니다.
cd /mnt
sudo rmdir geek
직접 실습해 보기
리눅스는 실제로 사용해 보면서 배우는 것이 가장 효과적입니다. mkfs
명령어는 잠재적으로 파괴적일 수 있지만, 이미지 파일을 사용하여 시스템이나 데이터에 영향을 주지 않고도 파일 시스템을 실험해 볼 수 있는 안전한 방법을 제공합니다.
이제 컴퓨터에 직접 영향을 주지 않으면서도 안전하게 다양한 파일 시스템을 생성하고 실험해 볼 수 있습니다.