스토리지 장치 구성

LinuxBeginner
지금 연습하기

소개

리눅스 스토리지 장치 구성 실습에 오신 것을 환영합니다. 스토리지 관리는 모든 리눅스 시스템 관리자에게 필수적인 기술입니다. 시스템에 새로운 하드 드라이브나 SSD(Solid-State Drive)를 추가하면 즉시 사용할 수 있는 상태가 아닙니다. 먼저 파일 시스템을 생성하여 준비하고, 디렉터리 트리에 연결하여 접근 가능하도록 만들어야 합니다.

이 실습에서는 새로운 스토리지 장치를 추가하는 전체 수명 주기를 살펴봅니다. 다음 과정을 학습하게 됩니다:

  • 새로 연결된 디스크 식별하기
  • 디스크에 표준 리눅스 파일 시스템(ext4) 생성하기
  • 디스크를 디렉터리에 마운트하여 접근 가능하게 만들기
  • 사용량을 확인하고 데이터 기록하기
  • 디스크를 안전하게 마운트 해제 및 분리하기

lsblk, mkfs.ext4, mount, df, umount와 같은 명령어를 사용합니다. 이 실습을 마치면 리눅스 환경에서 기본적인 스토리지 장치를 관리하는 방법을 확실히 이해하게 될 것입니다.

가상 디스크 연결

이 실습 환경에서는 자동화된 설정 과정을 통해 가상 디스크가 생성되어 있습니다. 이는 시스템에 새로운 스토리지 장치를 추가하는 상황을 시뮬레이션합니다. 설정 스크립트는 100MB 가상 디스크 파일을 생성하여 루프 장치(loop device)와 연결하고, 일관성을 위해 /dev/sdb 심볼릭 링크를 생성합니다.

첫 번째 작업은 운영 체제가 이 새로운 디스크를 인식하는지 확인하는 것입니다. lsblk(list block devices) 명령어가 이 작업에 적합합니다. 이 명령어는 사용 가능한 모든 블록 장치 정보를 트리 형태로 표시합니다.

터미널에서 다음 명령어를 실행하여 블록 장치를 나열하세요:

lsblk

다음과 유사한 출력이 나타나야 합니다. 마운트되지 않았고 마운트 지점이 나열되지 않은 100MB 루프 장치(loop4, loop14 등 사용 가능한 루프 장치 번호일 수 있음)를 찾으세요.

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

이로써 디스크가 시스템에 인식되었으며 다음 단계인 포맷을 진행할 준비가 되었음을 확인했습니다.

만약 루프 장치가 보이지 않는다면, 다음 명령어를 실행하여 생성할 수 있습니다:

## 가상 디스크 역할을 할 100MB 파일 생성
dd if=/dev/zero of=/tmp/disk.img bs=1M count=100 &> /dev/null
## 다음 사용 가능한 루프 장치 찾기
LOOP_DEVICE=$(sudo losetup -f)
## 파일을 루프 장치와 연결하여 물리적 디스크 시뮬레이션
sudo losetup $LOOP_DEVICE /tmp/disk.img
## 실습의 일관성을 위해 심볼릭 링크 생성
sudo ln -sf $LOOP_DEVICE /dev/sdb

그런 다음 lsblk 명령어를 다시 실행하여 루프 장치가 생성되었는지 확인하세요.

mkfs.ext4 /dev/sdb 명령어로 디스크 포맷

이 단계에서는 새 디스크를 포맷합니다. 포맷되지 않은 디스크는 빈 도화지와 같아서 운영 체제가 파일을 저장하는 방법을 알지 못합니다. 파일 시스템 생성이라고도 하는 포맷 작업은 디스크에 데이터 구조를 기록하여 파일을 구성하고 저장할 수 있게 합니다.

리눅스 시스템에서 신뢰할 수 있고 널리 사용되는 표준인 ext4 파일 시스템을 사용하겠습니다. ext4 파일 시스템을 생성하는 명령어는 mkfs.ext4입니다.

경고: 이 명령어는 파괴적입니다. 지정된 장치의 모든 데이터를 삭제합니다. 실행하기 전에 항상 장치 이름을 다시 확인하세요.

이제 /dev/sdb 디스크를 포맷합니다. 장치를 수정하는 권한이 필요한 작업이므로 sudo를 사용해야 합니다.

sudo mkfs.ext4 /dev/sdb

명령어는 아이노드(inode) 및 블록 수를 포함하여 생성 중인 파일 시스템에 대한 정보를 출력합니다. 출력 결과는 다음과 같습니다:

mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 25600 4k blocks and 25600 inodes

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

이제 /dev/sdb 디스크가 ext4 파일 시스템으로 포맷되었으며 마운트할 준비가 되었습니다.

/mnt/data 디렉터리에 디스크 마운트

이 단계에서는 포맷된 디스크를 파일 시스템에서 접근할 수 있도록 만듭니다. 이 과정을 "마운트(mounting)"라고 합니다. 마운트는 장치의 파일 시스템을 "마운트 지점(mount point)"이라고 하는 특정 디렉터리에 연결합니다. 마운트가 완료되면 마운트 지점 디렉터리에 접근하여 장치를 읽고 쓸 수 있습니다.

먼저 마운트 지점으로 사용할 디렉터리를 생성해야 합니다. 임시 마운트를 위해 /mnt 내부에 하위 디렉터리를 사용하는 것이 일반적인 관례입니다. /mnt/data라는 디렉터리를 생성하겠습니다.

sudo mkdir /mnt/data

이제 mount 명령어를 사용하여 /dev/sdb 장치를 /mnt/data 디렉터리에 연결합니다. 구문은 sudo mount [장치] [마운트_지점]입니다.

sudo mount /dev/sdb /mnt/data

성공하면 아무런 출력 없이 명령어가 실행됩니다. 디스크가 마운트되었는지 확인하려면 lsblk 명령어를 다시 사용하세요.

lsblk

아래 출력에서 루프 장치(/dev/sdb가 가리키는 장치)의 MOUNTPOINT/mnt/data로 표시되는 것을 확인할 수 있습니다.

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop /mnt/data
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

이제 디스크를 사용할 준비가 되었습니다.

df -h 명령어로 디스크 사용량 확인

이 단계에서는 마운트된 디스크가 사용 가능한지 확인하고 여유 공간을 체크합니다. df(disk free) 명령어는 파일 시스템의 디스크 공간 사용량을 보고하는 데 사용됩니다. -h(--human-readable) 플래그를 사용하면 크기를 1024 단위(예: K, M, G)로 출력하여 읽기 쉽게 만들어 줍니다.

df -h 명령어를 실행하여 새로 마운트된 파일 시스템을 포함한 모든 마운트된 파일 시스템을 확인하세요:

df -h

출력에서 /dev/sdb에 해당하는 줄을 찾으세요. 총 크기, 사용된 공간, 사용 가능한 공간, 마운트 지점이 표시됩니다.

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sdb         98M  2.5M   89M   3% /mnt/data
...

디스크가 마운트되었으므로 /mnt/data 디렉터리는 새 디스크의 루트 역할을 합니다. 작동 여부를 확인하기 위해 파일을 하나 작성해 보겠습니다. 마운트 지점의 소유자가 root이므로 sudo와 함께 tee를 사용합니다.

echo "Hello LabEx" | sudo tee /mnt/data/test.txt

디렉터리 내용을 나열하여 파일이 생성되었는지 확인할 수 있습니다:

ls /mnt/data

출력 결과에 새 파일이 표시되어야 합니다:

test.txt

이제 새 스토리지 장치를 성공적으로 포맷하고, 마운트하고, 데이터를 기록했습니다.

디스크 마운트 해제 및 분리

마지막 단계에서는 스토리지 장치를 안전하게 마운트 해제하고 분리하는 방법을 배웁니다. 시스템에서 장치를 제거하기 전에 파일 시스템을 마운트 해제하는 것은 매우 중요합니다. 이렇게 하면 보류 중인 모든 데이터가 디스크에 기록되어 데이터 손실이나 손상을 방지할 수 있습니다.

파일 시스템을 마운트 해제하는 명령어는 umount입니다. 장치 이름이나 마운트 지점 중 하나를 지정할 수 있습니다. 여기서는 마운트 지점을 사용하겠습니다.

sudo umount /mnt/data

디스크가 마운트 해제되었는지 확인하려면 lsblk를 한 번 더 실행하세요. 루프 장치에 더 이상 마운트 지점이 연결되어 있지 않은 것을 볼 수 있습니다.

lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

파일 시스템이 마운트 해제되었으므로 가상 디스크를 "분리"할 수 있습니다. 시뮬레이션 환경에서는 루프 장치와의 연결을 끊는 것을 의미합니다. /dev/sdb는 실제 루프 장치에 대한 심볼릭 링크이므로, 올바르게 분리하려면 실제 장치 경로를 확인해야 합니다.

## 심볼릭 링크를 확인하여 루프 장치 분리
sudo losetup -d $(readlink -f /dev/sdb)
## 심볼릭 링크 제거
sudo rm /dev/sdb

마지막으로 생성했던 마운트 지점 디렉터리를 제거하여 정리합니다.

sudo rmdir /mnt/data

이제 스토리지 장치를 추가하고, 사용하고, 제거하는 전체 과정을 성공적으로 완료했습니다.

요약

실습을 완료하신 것을 축하합니다! 리눅스 환경에서 새로운 스토리지 장치를 구성하는 필수 워크플로우를 성공적으로 학습했습니다.

이 실습에서 다음 핵심 기술을 연습했습니다:

  • lsblk 명령어를 사용하여 새 블록 장치 식별하기
  • mkfs.ext4를 사용하여 원시 디스크에 파일 시스템 생성하기
  • mkdir을 사용하여 마운트 지점 생성하기
  • mount 명령어를 사용하여 접근 가능하도록 파일 시스템 마운트하기
  • df -h를 사용하여 디스크 사용량 확인하기
  • umount 명령어를 사용하여 파일 시스템을 안전하게 마운트 해제하기
  • 디스크 제거를 시뮬레이션하기 위해 losetup -d루프 장치 분리하기

이 작업들은 모든 리눅스 서버나 워크스테이션에서 스토리지를 관리하기 위한 기본 작업입니다. 이제 이 지식을 실제 하드 드라이브, SSD 또는 USB 드라이브를 관리하는 데 적용할 수 있습니다. LVM(Logical Volume Management), RAID 및 다양한 파일 시스템 유형과 같은 더 고급 스토리지 주제를 계속 탐구해 보시기 바랍니다.