소개
리눅스 파일 시스템 및 디스크 관리 랩에 오신 것을 환영합니다! 이 랩은 리눅스 시스템 관리의 세계에 막 입문한 초보자를 위해 설계되었습니다. 디스크 공간 관리, 가상 디스크 생성, 파일 시스템 유지 관리와 관련된 필수 명령어와 개념을 안내해 드립니다. 이 랩을 마칠 때쯤이면 리눅스의 기본적인 디스크 관리 도구들을 직접 다루어 본 경험을 갖게 될 것입니다.
리눅스 파일 시스템 및 디스크 관리 랩에 오신 것을 환영합니다! 이 랩은 리눅스 시스템 관리의 세계에 막 입문한 초보자를 위해 설계되었습니다. 디스크 공간 관리, 가상 디스크 생성, 파일 시스템 유지 관리와 관련된 필수 명령어와 개념을 안내해 드립니다. 이 랩을 마칠 때쯤이면 리눅스의 기본적인 디스크 관리 도구들을 직접 다루어 본 경험을 갖게 될 것입니다.
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/vdb 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/vdb 100G 56G 45G 56% /etc/hosts
훨씬 보기 좋아졌죠? 이제 크기가 GB 와 MB 단위로 표시되어 이해하기가 훨씬 쉽습니다.
특정 파일 시스템의 공간만 확인하고 싶다면 대상을 지정할 수 있습니다.
df -h /dev/vdb
이렇게 하면 /dev/vdb 파일 시스템에 대한 정보만 표시됩니다.
df 명령어는 남은 디스크 공간을 빠르게 확인하는 데 매우 유용합니다. 시스템에서 공간이 부족하다는 메시지가 뜰 때, df는 문제 조사를 위해 가장 먼저 사용하게 될 명령어입니다.
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): 마운트는 파일 시스템을 운영 체제에서 접근할 수 있도록 연결하는 과정입니다. 파일 시스템을 마운트한다는 것은 리눅스에게 "이 디스크의 내용을 이 특정 디렉토리에서 사용할 수 있게 해달라"고 말하는 것과 같습니다. 이는 다음과 유사합니다.
파티션 (Partitions): 파티션은 디스크를 별도의 단위로 취급하기 위해 나눈 구역입니다. 커다란 하드 드라이브를 더 작고 독립적인 섹션으로 나누는 것과 같습니다. 파티션을 나누는 이유는 다음과 같습니다.
이제 가상 디스크를 직접 만들고 다루어 봅시다.
먼저 dd 명령어를 사용하여 256MB 크기의 가상 디스크를 생성합니다.
dd if=/dev/zero of=virtual.img bs=1M count=256
이 명령어를 분석해 보겠습니다.
dd: 파일을 복사하고 변환하는 유틸리티입니다.if=/dev/zero: "입력 파일 (input file) 이 /dev/zero임"을 의미합니다 (끝없이 0 을 제공하는 특수 파일).of=virtual.img: "출력 파일 (output file) 이 virtual.img 임"을 의미합니다 (우리가 만들 가상 디스크 파일).bs=1M: 블록 크기를 1 메가바이트로 설정합니다 (한 번에 복사할 데이터 양).count=256: 256 개의 블록을 복사합니다 (결과적으로 256MB 파일이 생성됨).이렇게 하면 가상 디스크로 사용할, 0 으로 채워진 빈 파일이 생성됩니다.
파일 크기를 확인합니다.
ls -lh virtual.img
virtual.img가 정확히 256MB 인 것을 확인할 수 있습니다.
이제 이 가상 디스크를 ext4 파일 시스템으로 포맷해 보겠습니다.
sudo mkfs.ext4 virtual.img
여기서 일어나는 일은 다음과 같습니다.
ext4 파일 시스템은 안정적이고 검증되었기 때문에 많은 리눅스 배포판에서 기본으로 사용됩니다.
다음으로 마운트 포인트 (mount point) 를 만들어야 합니다. 이는 가상 디스크의 내용이 나타날 디렉토리입니다.
sudo mkdir /mnt/virtualdisk
마운트 포인트를 가상 디스크를 들여다보는 "창문"이라고 생각하세요. 마운트한 후 이 디렉토리를 열어보면 실제로는 가상 디스크의 내용을 보고 있는 것입니다.
이제 가상 디스크를 마운트할 수 있습니다.
sudo mount -o loop virtual.img /mnt/virtualdisk
무슨 일이 일어나는지 살펴봅시다.
-o loop 옵션은 리눅스에게 이 파일을 실제 디스크 장치처럼 취급하라고 지시합니다.virtual.img는 소스 (우리가 만든 가상 디스크) 입니다./mnt/virtualdisk는 내용이 나타나길 원하는 위치입니다.이는 USB 드라이브를 꽂았을 때 자동으로 일어나는 일과 비슷하지만, 여기서는 가상 디스크 파일을 사용하여 수동으로 수행하고 있습니다.
디스크가 잘 마운트되었는지 확인합니다.
mount | grep virtualdisk
virtual.img가 /mnt/virtualdisk에 마운트되었다는 내용이 표시되어야 합니다.
마운트가 되었으므로 일반 디렉토리처럼 사용할 수 있습니다. 파일을 하나 생성해 봅시다.
sudo touch /mnt/virtualdisk/testfile
ls /mnt/virtualdisk
testfile이 목록에 나타나는 것을 볼 수 있습니다.
가상 디스크 사용을 마쳤으면 마운트를 해제 (unmount) 해야 합니다.
sudo umount /mnt/virtualdisk
마운트 해제는 해당 디렉토리에서 파일 시스템을 분리하여, 연결을 끊기 전에 운영 체제가 보류 중인 모든 읽기 및 쓰기 작업을 완료하도록 보장합니다. 제대로 마운트를 해제하지 않으면 데이터가 손상될 수 있습니다. 명령어 문법은 디렉토리를 해제하는 데 집중되어 있지만, 내부적으로 운영 체제는 이 디렉토리가 마운트된 디스크 이미지와 연결되어 있음을 알고 있습니다.
가상 디스크를 생성, 포맷, 마운트하는 이 과정은 새 하드 드라이브나 USB 스틱을 연결할 때 발생하는 과정과 매우 유사합니다. 주요 차이점은 물리적 장치 대신 파일을 사용한다는 점뿐입니다.
파일 시스템을 마운트한다는 것은 운영 체제가 파일 시스템 내부의 데이터에 접근할 수 있도록 지정된 디렉토리에 연결하는 것을 의미합니다. 이 랩에서 가상 디스크 이미지 파일은 물리적 디스크처럼 취급되며, 마운트를 통해 그 내용이 특정 디렉토리 (예: /mnt/virtualdisk) 에서 사용 가능해집니다.
실제 시스템에서는 파일 시스템을 만들기 전에 파티션을 먼저 생성해야 하는 경우가 많습니다. 이 가상 환경에서는 실제 디스크 파티션을 수정할 수는 없지만, fdisk를 사용하여 파티션 정보를 확인하는 방법을 알아볼 수 있습니다.
먼저 모든 디스크 파티션에 대한 정보를 확인해 봅시다.
sudo fdisk -l
이 명령어는 모든 디스크 장치와 그 파티션에 대한 정보를 표시합니다. 디스크 크기, 섹터 수, 파티션 테이블에 대한 세부 정보를 볼 수 있습니다.
이제 우리가 만든 가상 디스크의 파티션 정보를 확인해 봅시다.
sudo fdisk -l virtual.img
가상 디스크의 파티션 테이블이 표시됩니다. 우리는 파티션을 나누지 않고 디스크 이미지에 직접 파일 시스템을 만들었기 때문에, 유효한 파티션 테이블이 포함되어 있지 않다는 메시지가 나타날 수 있습니다.
실제 시스템에서는 fdisk를 대화형으로 사용하여 파티션을 생성, 삭제 또는 수정합니다. 작동 방식에 대한 간략한 개요는 다음과 같습니다.
sudo fdisk /dev/sdX 명령어로 fdisk를 시작합니다 (X 는 파티션을 나눌 디스크의 문자로 바꿉니다).n 명령어를 사용하여 새 파티션을 생성합니다.d는 파티션을 삭제합니다.t는 파티션의 시스템 ID(파티션의 용도를 나타냄) 를 변경합니다.w는 변경 사항을 저장하고 종료합니다.파티션을 수정하면 데이터 손실이 발생할 수 있으므로, 디스크 파티션을 변경하기 전에는 항상 주의하고 중요한 데이터를 백업해야 한다는 점을 기억하세요.
fdisk는 파티션 정보를 표시하는 것에 국한되지 않습니다. 대화형으로 디스크 파티션을 생성, 삭제 및 수정할 수도 있습니다. 디스크 파티셔닝을 위한 필수 도구이지만, 중요한 데이터가 있는 시스템에서 fdisk를 사용하여 파티션을 변경할 때는 주의해야 합니다. 부적절한 변경은 데이터 손실로 이어질 수 있습니다.
축하합니다! 이 랩을 통해 다음 내용들을 학습하셨습니다.
df를 이용한 디스크 사용량 확인du를 이용한 디렉토리 크기 조사fdisk를 이용한 파티션 정보 확인이러한 기술은 더 고급 리눅스 시스템 관리 작업을 위한 토대가 됩니다. 리눅스 시스템에서 스토리지를 관리하고, 디스크 공간 문제를 해결하며, 파일 시스템의 상태를 유지하는 데 매우 중요합니다.
추가 도전 과제로, 홈 디렉토리에서 가장 큰 파일이나 디렉토리 10 개를 찾아 그 크기를 읽기 쉬운 형식으로 표시하는 쉘 스크립트를 작성해 보세요. 이 랩에서 배운 여러 명령어를 조합해 볼 수 있는 좋은 기회가 될 것입니다.
개념을 익히는 데는 연습이 핵심입니다. 이해를 넓히기 위해 (안전한 환경에서) 이 명령어들을 주저하지 말고 실험해 보세요. 리눅스 시스템 관리 학습 여정에 행운을 빕니다!