파일 시스템 및 디스크 관리

LinuxBeginner
지금 연습하기

소개

리눅스 파일 시스템 및 디스크 관리 랩에 오신 것을 환영합니다! 이 랩은 리눅스 시스템 관리의 세계에 막 입문한 초보자를 위해 설계되었습니다. 디스크 공간 관리, 가상 디스크 생성, 파일 시스템 유지 관리와 관련된 필수 명령어와 개념을 안내해 드립니다. 이 랩을 마칠 때쯤이면 리눅스의 기본적인 디스크 관리 도구들을 직접 다루어 본 경험을 갖게 될 것입니다.

이 과정은 학습과 실습을 돕기 위해 단계별 지침을 제공하는 가이드 랩 (Guided Lab) 입니다. 각 단계를 주의 깊게 따라가며 실무 경험을 쌓으세요. 통계에 따르면 이 랩은 완료율 94%초급 수준이며, 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

df 를 이용한 디스크 사용량 확인

df (disk free) 명령어는 리눅스 시스템에서 디스크 공간 사용량을 확인하기 위해 가장 먼저 사용하는 도구입니다. 사용 방법을 살펴보겠습니다.

  1. 터미널을 엽니다. 현재 위치가 /home/labex/project 디렉토리여야 합니다. 확실하지 않다면 pwd 명령어로 현재 디렉토리를 확인할 수 있습니다.

  2. 다음 명령어를 실행하여 디스크 사용량을 확인합니다.

    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: 파일 시스템이 디렉토리 구조의 어느 위치에 연결 (마운트) 되어 있는지 보여줍니다.
  3. 이제 이 출력을 사람이 읽기 편한 형식으로 바꿔보겠습니다. 다음을 실행하세요.

    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 단위로 표시되어 이해하기가 훨씬 쉽습니다.

  4. 특정 파일 시스템의 공간만 확인하고 싶다면 대상을 지정할 수 있습니다.

    df -h /dev/vdb

    이렇게 하면 /dev/vdb 파일 시스템에 대한 정보만 표시됩니다.

df 명령어는 남은 디스크 공간을 빠르게 확인하는 데 매우 유용합니다. 시스템에서 공간이 부족하다는 메시지가 뜰 때, df는 문제 조사를 위해 가장 먼저 사용하게 될 명령어입니다.

du 를 이용한 디렉토리 크기 조사

df가 디스크 사용량에 대한 전반적인 개요를 제공한다면, 때로는 더 깊이 파고들 필요가 있습니다. 이때 du (disk usage) 명령어를 사용합니다. 이 도구는 어떤 디렉토리와 파일이 가장 많은 공간을 차지하고 있는지 파악하는 데 도움을 줍니다.

  1. 가장 기본적인 형태의 du를 사용해 봅시다. 다음을 실행하세요.

    du ~

    숫자와 디렉토리 이름이 길게 나열되는 것을 볼 수 있습니다. 각 숫자는 해당 디렉토리의 크기를 킬로바이트 단위로 나타냅니다. 내용이 너무 많으므로 관리하기 쉽게 만들어 보겠습니다.

  2. 더 읽기 쉬운 출력을 위해 -h 옵션을 사용합니다.

    du -h ~

    df와 마찬가지로 -h 옵션은 출력을 사람이 읽기 쉬운 KB, MB, GB 단위로 변환해 줍니다.

  3. 종종 디렉토리의 전체 크기만 알고 싶을 때가 있습니다. 그럴 때는 다음을 사용하세요.

    du -sh ~

    여기서 -s는 "summarize"(요약) 를 의미하며, ~는 홈 디렉토리를 나타냅니다. 이 명령어는 홈 디렉토리에 있는 모든 항목의 합계 크기를 보여줍니다.

  4. 홈 디렉토리 바로 아래에 있는 하위 디렉토리들의 크기를 확인하려면 다음을 사용하세요.

    du -h --max-depth=1 ~

    이 명령어는 한 단계 깊이의 각 하위 디렉토리 크기를 보여줍니다. --max-depth=1 옵션은 du가 하위 디렉토리로 얼마나 깊이 들어갈지를 제한합니다.

  5. 홈 디렉토리 내 개별 항목들의 크기를 확인해 봅시다.

    du -sh ~/*

    이 명령어는 홈 디렉토리 바로 아래에 있는 숨겨지지 않은 모든 파일과 디렉토리의 크기를 보여줍니다.

  6. 홈 디렉토리에서 가장 큰 항목들을 찾는 강력한 명령어 조합은 다음과 같습니다.

    du -h ~ | sort -rh | head -n 10

    이 명령어를 분석해 보겠습니다.

    • du -h ~: 홈 디렉토리의 모든 파일과 디렉토리 크기를 나열합니다.
    • sort -rh: 이 목록을 역순 (큰 것부터) 으로, 사람이 읽기 쉬운 형식에 맞춰 정렬합니다.
    • head -n 10: 출력 결과 중 상위 10 줄만 보여줍니다.
    • |: 파이프 기호로, 한 명령어의 출력을 다음 명령어의 입력으로 전달합니다.

    이 명령어는 간단한 리눅스 명령어들을 조합하여 복잡한 작업을 수행하는 아주 좋은 예시입니다.

du 명령어는 디스크 공간을 확보하려고 할 때 매우 유용합니다. 어떤 디렉토리나 파일이 공간을 가장 많이 차지하는지 식별해 주므로, 어디를 먼저 정리해야 할지 알 수 있게 해줍니다.

가상 디스크 생성 및 관리

본격적으로 시작하기 전에 가상 디스크가 무엇인지 이해해 봅시다. 가상 디스크는 물리적인 디스크 드라이브처럼 작동하는 하나의 파일입니다. 운영 체제가 실제 하드 드라이브인 것처럼 취급할 수 있는 컨테이너 파일을 만드는 것이라고 생각하면 됩니다. 이는 가상 머신이 데이터를 저장하기 위해 가상 디스크 파일을 사용하는 방식과 유사합니다.

왜 이런 작업을 할까요? 가상 디스크는 다음과 같은 경우에 유용합니다.

  • 실제 하드웨어에 위험을 주지 않고 안전하게 디스크 작업을 테스트할 때
  • 격리된 저장 공간을 만들 때
  • 추가적인 물리 하드웨어 없이 디스크 관리를 학습할 때
  • 실제 디스크의 백업 이미지를 만들 때

주요 개념 이해하기

실습을 진행하기 전에 몇 가지 중요한 개념을 알아봅시다.

  1. 파일 시스템 (Filesystem): 파일 시스템은 디스크에 파일과 폴더가 조직되는 방식입니다. 사무실의 서류 정리 시스템과 같아서, 데이터가 어떻게 저장되고 검색되는지를 결정합니다. 일반적인 리눅스 파일 시스템으로는 ext4(이번 실습에서 사용), XFS, btrfs 등이 있습니다.

  2. 마운트 (Mounting): 마운트는 파일 시스템을 운영 체제에서 접근할 수 있도록 연결하는 과정입니다. 파일 시스템을 마운트한다는 것은 리눅스에게 "이 디스크의 내용을 이 특정 디렉토리에서 사용할 수 있게 해달라"고 말하는 것과 같습니다. 이는 다음과 유사합니다.

    • USB 드라이브를 꽂는 행위 (물리적 연결)
    • 컴퓨터에게 그 내용을 어디에 보여줄지 지정하는 행위 (마운트 포인트)
  3. 파티션 (Partitions): 파티션은 디스크를 별도의 단위로 취급하기 위해 나눈 구역입니다. 커다란 하드 드라이브를 더 작고 독립적인 섹션으로 나누는 것과 같습니다. 파티션을 나누는 이유는 다음과 같습니다.

    • 시스템 파일과 사용자 파일을 분리하기 위해
    • 용도에 따라 서로 다른 파일 시스템을 사용하기 위해
    • 백업을 더 쉽게 하기 위해
    • 디스크 장애의 영향을 제한하기 위해

이제 가상 디스크를 직접 만들고 다루어 봅시다.

  1. 먼저 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 으로 채워진 빈 파일이 생성됩니다.

  2. 파일 크기를 확인합니다.

    ls -lh virtual.img

    virtual.img가 정확히 256MB 인 것을 확인할 수 있습니다.

  3. 이제 이 가상 디스크를 ext4 파일 시스템으로 포맷해 보겠습니다.

    sudo mkfs.ext4 virtual.img

    여기서 일어나는 일은 다음과 같습니다.

    • 가상 디스크 파일 내부에 새로운 ext4 파일 시스템을 생성합니다.
    • 파일과 디렉토리를 저장하는 데 필요한 기본 구조를 설정합니다.
    • 새 USB 드라이브를 처음 사용하기 전에 포맷하는 것과 비슷합니다.

    ext4 파일 시스템은 안정적이고 검증되었기 때문에 많은 리눅스 배포판에서 기본으로 사용됩니다.

  4. 다음으로 마운트 포인트 (mount point) 를 만들어야 합니다. 이는 가상 디스크의 내용이 나타날 디렉토리입니다.

    sudo mkdir /mnt/virtualdisk

    마운트 포인트를 가상 디스크를 들여다보는 "창문"이라고 생각하세요. 마운트한 후 이 디렉토리를 열어보면 실제로는 가상 디스크의 내용을 보고 있는 것입니다.

  5. 이제 가상 디스크를 마운트할 수 있습니다.

    sudo mount -o loop virtual.img /mnt/virtualdisk

    무슨 일이 일어나는지 살펴봅시다.

    • -o loop 옵션은 리눅스에게 이 파일을 실제 디스크 장치처럼 취급하라고 지시합니다.
    • virtual.img는 소스 (우리가 만든 가상 디스크) 입니다.
    • /mnt/virtualdisk는 내용이 나타나길 원하는 위치입니다.

    이는 USB 드라이브를 꽂았을 때 자동으로 일어나는 일과 비슷하지만, 여기서는 가상 디스크 파일을 사용하여 수동으로 수행하고 있습니다.

  6. 디스크가 잘 마운트되었는지 확인합니다.

    mount | grep virtualdisk

    virtual.img/mnt/virtualdisk에 마운트되었다는 내용이 표시되어야 합니다.

  7. 마운트가 되었으므로 일반 디렉토리처럼 사용할 수 있습니다. 파일을 하나 생성해 봅시다.

    sudo touch /mnt/virtualdisk/testfile
    ls /mnt/virtualdisk

    testfile이 목록에 나타나는 것을 볼 수 있습니다.

  8. 가상 디스크 사용을 마쳤으면 마운트를 해제 (unmount) 해야 합니다.

    sudo umount /mnt/virtualdisk

    마운트 해제는 해당 디렉토리에서 파일 시스템을 분리하여, 연결을 끊기 전에 운영 체제가 보류 중인 모든 읽기 및 쓰기 작업을 완료하도록 보장합니다. 제대로 마운트를 해제하지 않으면 데이터가 손상될 수 있습니다. 명령어 문법은 디렉토리를 해제하는 데 집중되어 있지만, 내부적으로 운영 체제는 이 디렉토리가 마운트된 디스크 이미지와 연결되어 있음을 알고 있습니다.

가상 디스크를 생성, 포맷, 마운트하는 이 과정은 새 하드 드라이브나 USB 스틱을 연결할 때 발생하는 과정과 매우 유사합니다. 주요 차이점은 물리적 장치 대신 파일을 사용한다는 점뿐입니다.

파일 시스템을 마운트한다는 것은 운영 체제가 파일 시스템 내부의 데이터에 접근할 수 있도록 지정된 디렉토리에 연결하는 것을 의미합니다. 이 랩에서 가상 디스크 이미지 파일은 물리적 디스크처럼 취급되며, 마운트를 통해 그 내용이 특정 디렉토리 (예: /mnt/virtualdisk) 에서 사용 가능해집니다.

fdisk 를 이용한 디스크 파티션 관리

실제 시스템에서는 파일 시스템을 만들기 전에 파티션을 먼저 생성해야 하는 경우가 많습니다. 이 가상 환경에서는 실제 디스크 파티션을 수정할 수는 없지만, fdisk를 사용하여 파티션 정보를 확인하는 방법을 알아볼 수 있습니다.

  1. 먼저 모든 디스크 파티션에 대한 정보를 확인해 봅시다.

    sudo fdisk -l

    이 명령어는 모든 디스크 장치와 그 파티션에 대한 정보를 표시합니다. 디스크 크기, 섹터 수, 파티션 테이블에 대한 세부 정보를 볼 수 있습니다.

  2. 이제 우리가 만든 가상 디스크의 파티션 정보를 확인해 봅시다.

    sudo fdisk -l virtual.img

    가상 디스크의 파티션 테이블이 표시됩니다. 우리는 파티션을 나누지 않고 디스크 이미지에 직접 파일 시스템을 만들었기 때문에, 유효한 파티션 테이블이 포함되어 있지 않다는 메시지가 나타날 수 있습니다.

실제 시스템에서는 fdisk를 대화형으로 사용하여 파티션을 생성, 삭제 또는 수정합니다. 작동 방식에 대한 간략한 개요는 다음과 같습니다.

  • sudo fdisk /dev/sdX 명령어로 fdisk를 시작합니다 (X 는 파티션을 나눌 디스크의 문자로 바꿉니다).
  • n 명령어를 사용하여 새 파티션을 생성합니다.
  • d는 파티션을 삭제합니다.
  • t는 파티션의 시스템 ID(파티션의 용도를 나타냄) 를 변경합니다.
  • w는 변경 사항을 저장하고 종료합니다.

파티션을 수정하면 데이터 손실이 발생할 수 있으므로, 디스크 파티션을 변경하기 전에는 항상 주의하고 중요한 데이터를 백업해야 한다는 점을 기억하세요.

fdisk는 파티션 정보를 표시하는 것에 국한되지 않습니다. 대화형으로 디스크 파티션을 생성, 삭제 및 수정할 수도 있습니다. 디스크 파티셔닝을 위한 필수 도구이지만, 중요한 데이터가 있는 시스템에서 fdisk를 사용하여 파티션을 변경할 때는 주의해야 합니다. 부적절한 변경은 데이터 손실로 이어질 수 있습니다.

요약

축하합니다! 이 랩을 통해 다음 내용들을 학습하셨습니다.

  1. df를 이용한 디스크 사용량 확인
  2. du를 이용한 디렉토리 크기 조사
  3. 가상 디스크 생성, 포맷, 마운트 및 마운트 해제
  4. fdisk를 이용한 파티션 정보 확인

이러한 기술은 더 고급 리눅스 시스템 관리 작업을 위한 토대가 됩니다. 리눅스 시스템에서 스토리지를 관리하고, 디스크 공간 문제를 해결하며, 파일 시스템의 상태를 유지하는 데 매우 중요합니다.

추가 도전 과제로, 홈 디렉토리에서 가장 큰 파일이나 디렉토리 10 개를 찾아 그 크기를 읽기 쉬운 형식으로 표시하는 쉘 스크립트를 작성해 보세요. 이 랩에서 배운 여러 명령어를 조합해 볼 수 있는 좋은 기회가 될 것입니다.

개념을 익히는 데는 연습이 핵심입니다. 이해를 넓히기 위해 (안전한 환경에서) 이 명령어들을 주저하지 말고 실험해 보세요. 리눅스 시스템 관리 학습 여정에 행운을 빕니다!