소개
리눅스 파일 시스템 및 디스크 관리 실습에 오신 것을 환영합니다! 이 실습은 리눅스 시스템 관리의 세계에 첫발을 내딛는 초보자를 위해 설계되었습니다. 디스크 공간 관리, 가상 디스크 생성, 파일 시스템 유지 관리와 관련된 필수 명령어와 개념을 단계별로 안내합니다. 실습을 마칠 때쯤이면 리눅스 디스크 관리의 기본 도구들을 직접 다룰 수 있게 될 것입니다.
df를 이용한 디스크 사용량 확인
df (disk free) 명령어는 리눅스 시스템에서 디스크 공간 사용량을 확인하는 가장 기본적인 도구입니다. 사용 방법을 살펴보겠습니다.
터미널을 엽니다. 현재
/home/labex/project디렉토리에 있어야 합니다. 확실하지 않다면pwd명령어로 현재 디렉토리를 확인할 수 있습니다.다음 명령어를 실행하여 디스크 사용량을 확인합니다.
df다음과 유사한 출력이 나타납니다.
Filesystem 1K-blocks Used Available Use% Mounted on overlay 20971520 128744 20842776 1% / tmpfs 65536 0 65536 0% /dev tmpfs 3995004 0 3995004 0% /sys/fs/cgroup shm 65536 0 65536 0% /dev/shm /dev/nvme1n1 104806400 57754052 47052348 56% /etc/hosts처음에는 복잡해 보일 수 있지만, 각 항목의 의미는 다음과 같습니다.
Filesystem: 디스크 또는 파티션의 이름입니다.1K-blocks: 파일 시스템의 전체 크기를 1킬로바이트 단위로 표시합니다.Used: 현재 사용 중인 공간입니다.Available: 남은 여유 공간입니다.Use%: 파일 시스템의 사용률(백분율)입니다.Mounted on: 파일 시스템이 디렉토리 트리의 어느 위치에 마운트되어 있는지 보여줍니다.
이제 출력을 사람이 읽기 쉽게 바꿔보겠습니다. 다음을 실행하세요.
df -h-h옵션은 "human-readable"(사람이 읽기 쉬운 형식)을 의미합니다. 다음과 같은 출력을 볼 수 있습니다.Filesystem Size Used Avail Use% Mounted on overlay 20G 126M 20G 1% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm /dev/nvme1n1 100G 56G 45G 56% /etc/hosts훨씬 보기 좋죠? 이제 크기가 GB와 MB 단위로 표시되어 이해하기 쉽습니다.
특정 파일이나 디렉토리가 포함된 파일 시스템의 공간을 확인하려면 해당 경로를
df에 전달하면 됩니다.df -h /etc/hosts이 명령어는
/etc/hosts가 포함된 파일 시스템에 대한 정보만 보여줍니다. 이 환경에서는 일반적으로/dev/nvme1n1파일 시스템입니다.
df 명령어는 남은 디스크 공간을 빠르게 확인할 때 매우 유용합니다. 시스템에서 공간 부족 오류가 발생할 때 가장 먼저 조사해야 할 명령어입니다.
du를 이용한 디렉토리 크기 조사
df가 디스크 사용량의 전체적인 개요를 제공한다면, 때로는 더 자세한 조사가 필요합니다. 이때 du (disk usage) 명령어를 사용합니다. 이 명령어는 어떤 디렉토리와 파일이 가장 많은 공간을 차지하는지 파악하는 데 도움을 줍니다.
가장 기본적인 형태로
du를 사용해 보겠습니다. 다음을 실행하세요.du ~숫자와 디렉토리 이름이 길게 나열될 것입니다. 각 숫자는 해당 디렉토리의 크기를 킬로바이트 단위로 나타냅니다. 너무 많아서 보기 힘들 수 있으니 더 보기 좋게 바꿔보겠습니다.
읽기 쉬운 출력을 위해
-h옵션을 사용합니다.du -h ~df와 마찬가지로-h옵션을 사용하면 크기가 KB, MB, GB 단위로 적절하게 표시됩니다.종종 디렉토리의 총 크기만 알고 싶을 때가 있습니다. 이럴 때는 다음을 사용하세요.
du -sh ~여기서
-s는 "summarize"(요약)를 의미하며,~는 홈 디렉토리를 나타냅니다. 이 명령어는 홈 디렉토리 내 모든 항목의 총 크기를 보여줍니다.홈 디렉토리 바로 아래에 있는 하위 디렉토리들의 크기를 보려면 다음을 사용합니다.
du -h --max-depth=1 ~이 명령어는 한 단계 깊이의 각 하위 디렉토리 크기를 보여줍니다.
--max-depth=1옵션은du가 하위 디렉토리로 재귀적으로 들어가는 깊이를 제한합니다.홈 디렉토리 내 항목들의 크기를 확인해 봅시다.
du -sh ~/*이 명령어는 홈 디렉토리 바로 아래에 있는 숨겨지지 않은 각 파일과 디렉토리의 크기를 보여줍니다.
홈 디렉토리에서 가장 큰 항목들을 찾는 강력한 명령어는 다음과 같습니다.
du -h ~ | sort -rh | head -n 10각 부분의 의미는 다음과 같습니다.
du -h ~: 홈 디렉토리의 모든 파일과 디렉토리를 크기와 함께 나열합니다.sort -rh: 이 목록을 역순(가장 큰 것부터)으로 정렬하고 사람이 읽기 쉬운 형식으로 처리합니다.head -n 10: 출력의 상위 10개 줄만 보여줍니다.|는 파이프이며, 앞 명령어의 출력을 다음 명령어의 입력으로 전달합니다.
이 명령어는 간단한 리눅스 명령어들을 조합하여 복잡한 작업을 수행하는 좋은 예시입니다.
du 명령어는 디스크 공간을 확보하려 할 때 매우 유용합니다. 가장 많은 공간을 차지하는 디렉토리나 파일을 식별하여 정리 작업을 어디에 집중해야 할지 알려줍니다.
가상 디스크 생성 및 관리
시작하기 전에 가상 디스크가 무엇인지 이해해 봅시다. 가상 디스크는 물리적 디스크 드라이브처럼 작동하는 파일일 뿐입니다. 운영 체제가 실제 하드 드라이브처럼 취급할 수 있는 컨테이너 파일을 만드는 것과 같습니다. 이는 가상 머신이 데이터를 저장하기 위해 가상 디스크 파일을 사용하는 방식과 유사합니다.
왜 이런 작업을 할까요? 가상 디스크는 다음과 같은 경우에 유용합니다.
- 실제 하드웨어 위험 없이 디스크 작업을 안전하게 테스트할 때
- 격리된 저장 공간을 만들 때
- 추가 물리적 하드웨어 없이 디스크 관리를 학습할 때
- 실제 디스크의 백업 이미지를 만들 때
핵심 개념 이해
실습을 진행하기 전에 중요한 개념 몇 가지를 짚고 넘어갑시다.
파일 시스템(Filesystem): 파일 시스템은 디스크에 파일과 폴더가 구성되는 방식입니다. 사무실의 서류 정리 시스템처럼 데이터가 어떻게 저장되고 검색되는지를 결정합니다. 일반적인 리눅스 파일 시스템으로는 ext4(이번 실습에서 사용), XFS, btrfs 등이 있습니다.
마운트(Mounting): 마운트는 파일 시스템을 운영 체제에서 접근할 수 있도록 만드는 과정입니다. 파일 시스템을 마운트한다는 것은 리눅스에게 "이 디스크의 내용을 이 특정 디렉토리에서 사용할 수 있게 해줘"라고 말하는 것과 같습니다. 이는 다음과 유사합니다.
- USB 드라이브를 꽂는 것(물리적 연결)
- 컴퓨터에게 그 내용을 어디에 표시할지 알려주는 것(마운트 지점)
파티션(Partitions): 파티션은 별도의 단위로 취급되는 디스크의 섹션입니다. 큰 하드 드라이브를 더 작고 독립적인 섹션으로 나누는 것과 같습니다. 파티셔닝을 하는 이유는 다음과 같습니다.
- 시스템 파일과 사용자 파일을 분리하기 위해
- 목적에 따라 다른 파일 시스템을 사용하기 위해
- 백업을 더 쉽게 만들기 위해
- 디스크 장애의 영향을 제한하기 위해
이제 가상 디스크를 생성하고 다뤄보겠습니다.
먼저
dd명령어를 사용하여 256MB 가상 디스크를 생성합니다.dd if=/dev/zero of=virtual.img bs=1M count=256명령어의 의미는 다음과 같습니다.
dd: 파일을 복사하고 변환하는 유틸리티입니다.if=/dev/zero: "입력 파일은 /dev/zero"(끝없는 0을 제공하는 특수 파일)를 의미합니다.of=virtual.img: "출력 파일은 virtual.img"(새로운 가상 디스크 파일)를 의미합니다.bs=1M: 블록 크기를 1메가바이트로 설정합니다(한 번에 복사할 데이터 양).count=256: 256개의 블록을 복사합니다(결과적으로 256MB 파일이 생성됨).
이 작업은 가상 디스크로 사용할 0으로 채워진 빈 파일을 생성합니다.
파일 크기를 확인합니다.
ls -lh virtual.imgvirtual.img가 정확히 256MB임을 확인할 수 있습니다.이제 이 가상 디스크를 ext4 파일 시스템으로 포맷합니다.
sudo mkfs.ext4 virtual.img이 명령어는 다음을 수행합니다.
- 가상 디스크 파일 내부에 새로운 ext4 파일 시스템을 생성합니다.
- 파일과 디렉토리를 저장하는 데 필요한 기본 구조를 설정합니다.
- 처음 사용하기 전에 새 USB 드라이브를 포맷하는 것과 유사합니다.
ext4 파일 시스템은 안정적이고 검증되었기 때문에 많은 리눅스 배포판의 기본값으로 사용됩니다.
다음으로 마운트 지점을 생성해야 합니다. 이는 가상 디스크의 내용이 나타날 디렉토리입니다.
sudo mkdir /mnt/virtualdisk마운트 지점을 가상 디스크를 들여다보는 "창"이라고 생각하세요. 마운트 후 이 디렉토리를 보면 실제로는 가상 디스크의 내용을 보고 있는 것입니다.
이제 가상 디스크를 마운트할 수 있습니다.
sudo mount -o loop virtual.img /mnt/virtualdisk수행되는 작업은 다음과 같습니다.
-o loop옵션은 리눅스에게 파일을 실제 디스크 장치처럼 취급하도록 지시합니다.virtual.img는 소스(생성한 가상 디스크)입니다./mnt/virtualdisk는 내용이 나타나길 원하는 위치입니다.
이는 USB 드라이브를 꽂았을 때 자동으로 일어나는 일과 비슷하지만, 가상 디스크 파일로 수동으로 수행하는 것입니다.
디스크가 마운트되었는지 확인합니다.
mount | grep virtualdiskvirtual.img가/mnt/virtualdisk에 마운트되었다는 줄이 보일 것입니다.마운트되었으므로 다른 디렉토리처럼 사용할 수 있습니다. 파일을 생성해 봅시다.
sudo touch /mnt/virtualdisk/testfile ls /mnt/virtualdisktestfile이 목록에 나타날 것입니다.가상 디스크 사용을 마치면 마운트를 해제해야 합니다.
sudo umount /mnt/virtualdisk마운트 해제는 해당 디렉토리에서 파일 시스템을 분리하며, 운영 체제가 분리하기 전에 모든 보류 중인 읽기/쓰기 작업을 완료하도록 합니다. 제대로 마운트 해제하지 않으면 데이터 손상이 발생할 수 있습니다. 명령어 구문은 디렉토리를 마운트 해제하는 것에 초점을 맞추지만, 내부적으로 운영 체제는 이 디렉토리가 마운트된 디스크 이미지에 해당한다는 것을 알고 있습니다.
가상 디스크를 생성, 포맷, 마운트하는 이 과정은 새 하드 드라이브나 USB 스틱을 꽂을 때 일어나는 일과 매우 유사합니다. 주된 차이점은 물리적 장치 대신 파일로 모든 작업을 수행한다는 것입니다.
파일 시스템을 마운트한다는 것은 운영 체제가 파일 시스템 내부의 데이터에 접근할 수 있도록 지정된 디렉토리에 연결하는 것을 의미합니다. 이 실습에서 가상 디스크 이미지 파일은 물리적 디스크처럼 취급되며, 마운트를 통해 특정 디렉토리(예: /mnt/virtualdisk)에서 그 내용을 사용할 수 있게 됩니다.
fdisk를 이용한 디스크 파티션 관리
실제 시스템에서는 파일 시스템을 생성하기 전에 파티션을 생성해야 하는 경우가 많습니다. 이 가상 환경에서는 실제 디스크 파티션을 수정할 수는 없지만, fdisk를 사용하여 파티션 정보를 확인하는 방법을 알아볼 수 있습니다.
먼저 모든 디스크 파티션에 대한 정보를 확인합니다.
sudo fdisk -l모든 디스크 장치와 해당 파티션에 대한 정보가 표시됩니다. 디스크 크기, 섹터 수, 파티션 테이블에 대한 세부 정보를 볼 수 있습니다.
이제 가상 디스크에 대한 파티션 정보를 확인해 봅시다.
sudo fdisk -l virtual.img가상 디스크의 파티션 테이블이 표시됩니다. 파티셔닝 없이 디스크 이미지에 직접 파일 시스템을 생성했기 때문에, 유효한 파티션 테이블이 포함되어 있지 않다는 메시지가 나타날 수 있습니다.
실제 시스템에서는 fdisk를 대화형으로 사용하여 파티션을 생성, 삭제 또는 수정합니다. 작동 방식에 대한 간략한 개요는 다음과 같습니다.
sudo fdisk /dev/sdX로fdisk를 시작합니다(X는 파티션을 나눌 디스크의 적절한 문자로 대체).- 'n' 명령어를 사용하여 새 파티션을 생성합니다.
- 'd'는 파티션을 삭제합니다.
- 't'는 파티션의 시스템 ID를 변경합니다(파티션의 의도된 용도를 나타냄).
- 'w'는 변경 사항을 저장하고 종료합니다.
파티션을 수정하면 데이터 손실이 발생할 수 있으므로, 디스크 파티션을 변경하기 전에 항상 주의하고 중요한 데이터를 백업하십시오.
Fdisk는 파티션 정보를 표시하는 데 국한되지 않습니다. 대화형으로 디스크 파티션을 생성, 삭제 및 수정할 수도 있습니다. 디스크 파티셔닝을 위한 필수 도구이지만, 중요한 데이터가 있는 시스템에서 파티션을 변경할 때는 주의해야 합니다. 부적절한 변경은 데이터 손실로 이어질 수 있습니다.
요약
축하합니다! 이번 실습을 통해 다음을 배웠습니다.
df를 사용하여 디스크 사용량 확인하기du를 사용하여 디렉토리 크기 조사하기- 가상 디스크 생성, 포맷, 마운트 및 마운트 해제하기
fdisk를 사용하여 파티션 정보 확인하기
이 기술들은 더 고급 리눅스 시스템 관리 작업을 위한 기초가 됩니다. 리눅스 시스템에서 저장 공간을 관리하고, 디스크 공간 문제를 해결하며, 파일 시스템 상태를 유지하는 데 매우 중요합니다.
추가 도전 과제로, 홈 디렉토리에서 가장 큰 파일 또는 디렉토리 10개를 찾아 그 크기를 사람이 읽기 쉬운 형식으로 표시하는 셸 스크립트를 작성해 보세요. 이 작업은 이번 실습에서 배운 여러 명령어를 조합하는 연습이 될 것입니다.
이러한 개념을 마스터하려면 연습이 핵심입니다. 이해를 깊게 하기 위해 (안전한 환경에서) 이 명령어들을 자유롭게 실험해 보십시오. 리눅스 시스템 관리 학습 여정에 행운을 빕니다!



