Linux 파티션 및 파일 시스템 관리

CompTIABeginner
지금 연습하기

소개

이 실습에서는 Linux 환경에서 디스크 파티션과 파일 시스템을 관리하는 데 필요한 기본 기술을 배웁니다. fdisk와 같은 명령줄 유틸리티를 사용하여 사용 가능한 디스크를 검사하고, 새 파티션을 생성하며, 표준 파일 시스템으로 포맷하는 방법을 실습합니다. 안전한 학습 환경을 위해 모든 작업은 전용 보조 가상 디스크인 /dev/sdb에서 수행되며, 기본 운영 체제 디스크는 건드리지 않습니다.

참고: 이 실습 환경에서 /dev/sdb는 루프 장치(디스크처럼 작동하는 파일)로 구현되어 있습니다. 파티션을 생성하면 loop13p1과 같은 이름으로 나타나지만, 실제 하드웨어에서와 같이 /dev/sdb1, /dev/sdb2 등으로 액세스할 수 있도록 심볼릭 링크를 생성하게 됩니다.

실습 전반에 걸쳐 표준 Linux 파티션을 생성하고 ext4 파일 시스템으로 포맷한 뒤, 즉시 사용할 수 있도록 마운트하는 방법을 배웁니다. 그런 다음 /etc/fstab 파일을 편집하여 부팅 시 이 파일 시스템이 자동으로 마운트되도록 시스템을 구성합니다. 마지막으로, 시스템 성능의 핵심 요소인 전용 Linux 스왑 파티션을 생성하고 관리하는 기술을 익힙니다.

디스크 검사 및 fdisk를 이용한 새 Linux 파티션 생성

이 단계에서는 사용 가능한 디스크와 파티션 테이블을 검사하는 방법을 배웁니다. 그런 다음 강력한 명령줄 도구인 fdisk 유틸리티를 사용하여 보조 디스크에 새 파티션을 생성합니다. 실제 환경에서 파티션을 수정할 때는 실수로 데이터가 손실될 수 있으므로 매우 주의해야 합니다. 이 실습에서는 기본 운영 체제 디스크(/dev/sda)가 영향을 받지 않도록 전용 가상 디스크인 /dev/sdb에서 작업합니다.

먼저 시스템에 연결된 모든 블록 장치(디스크 및 파티션)의 개요를 확인해 보겠습니다. lsblk 명령은 트리 구조로 명확한 보기를 제공합니다.

lsblk

출력 결과에는 기본 시스템 디스크(vda)와 이 실습을 위한 가상 디스크를 나타내는 루프 장치(loop13)를 포함하여 사용 가능한 디스크가 표시됩니다.

NAME       MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
...
loop13       7:13   0     2G  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로 액세스 가능)는 파티션이 없는 2GB 가상 디스크임을 알 수 있습니다. 이제 fdisk를 사용하여 /dev/sdb의 파티션 테이블을 더 자세히 살펴보겠습니다. -l 플래그는 지정된 장치의 파티션 테이블을 나열한 후 종료합니다. fdisk는 디스크 수준 정보를 검사하기 위해 루트 권한이 필요하므로 sudo를 사용해야 합니다.

sudo fdisk -l /dev/sdb

출력 결과에는 디스크 크기, 섹터, 식별자 등 디스크에 대한 세부 정보가 표시됩니다. 아직 파티션이 없으므로 하단의 장치 목록은 비어 있습니다.

Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

참고: 디스크를 처음 사용하는 경우 새 DOS 디스크 레이블 생성에 대한 메시지가 나타날 수 있습니다.

다음으로, 대화형 모드에서 fdisk를 시작하여 새 파티션을 생성합니다. 이 과정은 일련의 단일 문자 명령으로 이루어집니다. 다음 명령을 실행하여 /dev/sdb 관리를 시작하세요.

sudo fdisk /dev/sdb

이제 fdisk 유틸리티 내부로 들어왔으며, Command (m for help): 프롬프트가 표시됩니다. 다음 단계를 주의 깊게 따르세요.

  1. 새 파티션 생성: n을 입력하고 Enter를 누릅니다.
  2. 파티션 유형 선택: 파티션 유형(기본 또는 확장)을 선택하라는 메시지가 표시됩니다. 기본값은 기본(p)이며, 이를 사용합니다. Enter를 눌러 기본값을 수락합니다.
  3. 파티션 번호 선택: 첫 번째 파티션이므로 기본값은 1입니다. Enter를 눌러 수락합니다.
  4. 첫 번째 섹터 지정: 기본값은 디스크에서 사용 가능한 첫 번째 섹터입니다. 거의 항상 올바른 선택입니다. Enter를 눌러 기본값을 수락합니다.
  5. 마지막 섹터 또는 크기 지정: 섹터를 계산하는 대신 사람이 읽을 수 있는 크기를 지정할 수 있습니다. 500MB 파티션을 생성해 보겠습니다. +500M을 입력하고 Enter를 누릅니다.
  6. 메모리 내 파티션 테이블 출력: 저장하기 전에 변경 사항을 검토하는 것이 좋습니다. p를 입력하고 Enter를 눌러 새 파티션 레이아웃을 확인합니다. 새 장치인 /dev/sdb1이 보여야 합니다.
  7. 디스크에 변경 사항 쓰기: 지금까지의 변경 사항은 메모리에만 있습니다. 디스크의 파티션 테이블에 저장하려면 w를 입력하고 Enter를 누릅니다. 이렇게 하면 변경 사항이 기록되고 fdisk가 종료됩니다.

대화형 세션 요약은 다음과 같습니다.

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x54041549.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, default 4194303): +500M

Created a new partition 1 of type 'Linux' and of size 500 MiB.

Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54041549

Device     Boot Start     End Sectors  Size Id Type
/dev/sdb1        2048 1026047 1024000  500M 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).

파티션 테이블을 쓴 후 커널이 즉시 파티션 테이블을 다시 읽지 못했다는 메시지가 나타날 수 있습니다. 이는 루프 장치 작업 시 정상적인 현상입니다. partprobe 명령은 운영 체제 커널에 파티션 테이블을 다시 읽도록 요청합니다.

sudo partprobe

이제 lsblk를 다시 실행하여 시스템이 새 파티션을 인식하는지 확인합니다.

lsblk /dev/sdb

출력 결과에 루프 장치와 새 파티션이 표시되어야 합니다. 루프 장치 설정으로 인해 파티션은 loop13p1로 나타납니다.

NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop13       7:13   0    2G  0 loop
└─loop13p1 259:0    0  500M  0 part

파티션이 loop13p1로 나타나지만 실습을 위해서는 /dev/sdb1이 필요하므로 파티션에 대한 심볼릭 링크를 생성해야 합니다. 먼저 실제 파티션 장치를 식별합니다. p1$ 패턴은 상위 루프 장치가 아닌 파티션 이름만 일치하도록 합니다.

PARTITION_DEVICE=$(lsblk -lno NAME /dev/sdb | grep -E "p1$" | head -1)
echo "Partition device: /dev/$PARTITION_DEVICE"

이제 파티션에 대한 심볼릭 링크를 생성합니다.

sudo ln -s /dev/$PARTITION_DEVICE /dev/sdb1

/dev/sdb1이 작동하는지 확인합니다.

lsblk /dev/sdb1

출력 결과에 /dev/sdb1로 액세스 가능한 파티션이 표시되어야 합니다.

NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop13p1   259:0    0  500M  0 part

이제 /dev/sdb에 500MB Linux 파티션을 성공적으로 생성하고 /dev/sdb1로 액세스할 수 있게 되었습니다.

mkfs.ext4를 사용하여 ext4 파일 시스템 생성 및 포맷

이 단계에서는 생성한 새 파티션인 /dev/sdb1을 파일 시스템으로 포맷합니다. 파일 시스템은 파일과 디렉토리를 저장하고 구성하는 데 필요한 구조를 제공합니다. 파일 시스템이 없으면 운영 체제는 파티션에서 읽거나 쓸 수 없습니다. 성능, 안정성 및 기능으로 인해 현대 Linux 배포판에서 기본적으로 가장 널리 사용되는 ext4를 사용합니다.

파일 시스템을 생성하는 명령은 mkfs이며, 이는 "make filesystem"의 약자입니다. 이는 mkfs.ext4, mkfs.xfs 등 다양한 파일 시스템별 빌더의 프런트엔드입니다. 여기서는 mkfs.ext4를 직접 사용합니다. 이 작업은 파괴적이며 파티션의 기존 데이터를 모두 지우므로 sudo 권한이 필요합니다.

/dev/sdb1 파티션을 ext4 파일 시스템으로 포맷하려면 다음 명령을 실행하세요.

sudo mkfs.ext4 /dev/sdb1

이 명령은 파일 시스템을 생성하고 파일 시스템 UUID, 블록 크기, 아이노드(inode) 수 등 프로세스에 대한 정보를 표시합니다.

mke2fs x.xx.x (xx-xxx-xxxx)
Creating filesystem with 128000 4k blocks and 32000 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Superblock backups stored on blocks:
 32768, 98304

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

포맷 후 파일 시스템이 성공적으로 생성되었는지 확인할 수 있습니다. blkid 명령은 파일 시스템 유형을 포함하여 블록 장치의 속성을 출력하므로 이 작업에 매우 유용합니다.

sudo blkid /dev/sdb1

출력 결과에서 /dev/sdb1TYPEext4임을 명확히 확인할 수 있습니다.

/dev/sdb1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1a2b3c4d-01"

더 자세한 내용을 보려면 -h 플래그와 함께 dumpe2fs 명령을 사용하여 슈퍼블록 정보를 표시할 수 있습니다. 슈퍼블록에는 파일 시스템에 대한 중요한 메타데이터가 포함되어 있습니다.

sudo dumpe2fs -h /dev/sdb1

이 명령은 많은 출력을 생성합니다. 파일 시스템의 무결성을 확인하려면 Filesystem magic numberFilesystem state와 같은 주요 항목을 찾으세요.

dumpe2fs x.xx.x (xx-xxx-xxxx)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
...

이제 파티션 포맷이 완료되었으며, 마운트하여 데이터를 저장할 준비가 되었습니다.

파일 시스템 마운트, 테스트 및 언마운트

이 단계에서는 새로 포맷된 파일 시스템을 운영 체제에서 액세스할 수 있도록 만드는 방법을 배웁니다. 이 과정을 "마운트(mounting)"라고 합니다. 마운트는 장치(예: /dev/sdb1)의 파일 시스템을 파일 시스템 트리의 특정 디렉토리(마운트 지점)에 연결합니다. 마운트되면 다른 디렉토리와 마찬가지로 파티션과 상호 작용할 수 있습니다.

먼저 마운트 지점을 생성해야 합니다. 이는 단순히 빈 디렉토리입니다. /mnt 디렉토리 아래에 임시 마운트 지점을 만드는 것이 관례입니다. /mnt/data라는 디렉토리를 생성해 보겠습니다. /mnt는 시스템 디렉토리이므로 sudo가 필요합니다.

sudo mkdir /mnt/data

이제 mount 명령을 사용하여 /dev/sdb1 파티션을 /mnt/data 디렉토리에 연결합니다.

sudo mount /dev/sdb1 /mnt/data

파일 시스템이 마운트되었는지 확인하기 위해 먼저 마운트 상태를 확인하여 mount 명령이 성공했는지 확인합니다. 여러 명령을 사용하여 마운트를 확인합니다.

## 마운트 지점에 파일 시스템이 마운트되어 있는지 확인
mountpoint /mnt/data

마운트가 성공했다면 다음과 같이 표시됩니다.

/mnt/data is a mountpoint

이제 df 명령으로 디스크 사용량을 확인합니다. 루프 장치 설정으로 인해 파티션은 심볼릭 링크 이름이 아닌 실제 장치 이름으로 나타날 수 있습니다.

df -h /mnt/data

마운트된 파일 시스템을 보여주는 항목이 표시되어야 합니다.

Filesystem      Size  Used Avail Use% Mounted on
/dev/loop13p1   488M  2.6M  459M   1% /mnt/data

mount 명령으로도 확인할 수 있습니다.

mount | grep /mnt/data

결과는 다음과 같습니다.

/dev/loop13p1 on /mnt/data type ext4 (rw,relatime)

이제 새 파일 시스템에 데이터를 쓸 수 있는지 테스트해 보겠습니다. 먼저 마운트 지점의 현재 소유권과 권한을 확인합니다.

ls -ld /mnt/data

결과는 다음과 비슷할 것입니다.

drwxr-xr-x 3 root root 4096 Dec 12 10:00 /mnt/data

이제 마운트 지점에 파일을 생성해 봅니다.

touch /mnt/data/testfile

이 명령은 "Permission denied(권한 거부)" 오류와 함께 실패할 가능성이 높습니다. 마운트된 파일 시스템의 루트 디렉토리는 root 사용자가 소유하고 있기 때문입니다. 이를 해결하려면 마운트 지점의 소유권을 현재 사용자(labex)로 변경합니다.

sudo chown labex:labex /mnt/data

이제 파일을 다시 생성해 봅니다.

touch /mnt/data/testfile

이번에는 명령이 성공해야 합니다. 파일이 생성되었는지 확인합니다.

ls -l /mnt/data

결과는 다음과 같습니다.

total 16
drwx------ 2 root  root  16384 Dec 12 10:00 lost+found
-rw-r--r-- 1 labex labex     0 Dec 12 10:05 testfile

lost+found 디렉토리는 ext4 파일 시스템의 표준 기능으로, 파일 시스템 손상 시 파일을 복구하는 데 사용됩니다.

파일 시스템 사용을 마치면 umount 명령을 사용하여 언마운트해야 합니다. 현재 작업 디렉토리가 마운트 지점 내부인 경우와 같이 파일 시스템이 사용 중일 때는 언마운트할 수 없다는 점에 유의하세요. 실제로 확인해 보겠습니다.

먼저 디렉토리를 /mnt/data로 변경합니다.

cd /mnt/data

이제 언마운트해 봅니다. 장치 이름이나 마운트 지점으로 파일 시스템을 참조할 수 있습니다.

sudo umount /mnt/data

대상이 사용 중이라는 오류 메시지가 나타납니다.

umount: /mnt/data: target is busy.

성공적으로 언마운트하려면 먼저 디렉토리에서 나와야 합니다. 홈 디렉토리로 돌아갑니다.

cd ~

이제 umount 명령을 다시 실행합니다.

sudo umount /mnt/data

명령은 아무런 출력 없이 실행되어야 합니다. mountpoint 명령을 실행하여 더 이상 마운트되지 않았는지 확인할 수 있습니다.

mountpoint /mnt/data

결과는 다음과 같습니다.

/mnt/data is not a mountpoint

마지막으로 마운트 지점 디렉토리를 제거하여 정리할 수 있습니다.

sudo rmdir /mnt/data

문제 해결 참고: mount 명령이 작동하지 않는 문제가 발생하면 심볼릭 링크 대신 실제 루프 장치 이름을 사용하여 마운트해 보세요.

## 실제 장치 이름 찾기
ACTUAL_DEVICE=$(readlink -f /dev/sdb1)
echo "Actual device: $ACTUAL_DEVICE"

## 실제 장치 이름을 사용하여 마운트
sudo mkdir /mnt/data
sudo mount $ACTUAL_DEVICE /mnt/data

/etc/fstab에서 영구 마운트 구성

이 단계에서는 시스템이 부팅될 때마다 파일 시스템이 자동으로 마운트되도록 만드는 방법을 배웁니다. 이전 단계에서 사용한 mount 명령은 일시적이며, 재부팅 후에는 마운트가 해제됩니다. 영구 마운트를 생성하려면 /etc/fstab(파일 시스템 테이블)이라는 특수 구성 파일에 항목을 추가해야 합니다.

시스템은 부팅 과정에서 /etc/fstab을 읽어 마운트할 파일 시스템을 결정합니다. 중요한 파일이므로 편집하기 전에 백업을 생성하는 것이 좋습니다.

먼저 현재 fstab 파일의 백업을 생성합니다.

sudo cp /etc/fstab /etc/fstab.bak

다음으로 영구 마운트 지점이 필요합니다. 이전 단계에서는 /mnt/data를 사용하고 제거했습니다. 영구 마운트의 경우 루트 파일 시스템에 디렉토리를 만드는 것이 일반적입니다. /data라는 디렉토리를 생성해 보겠습니다.

sudo mkdir /data

/etc/fstab에서 장치 이름(/dev/sdb1)을 사용할 수 있지만 권장되지는 않습니다. 특히 하드웨어를 추가하거나 제거할 때 재부팅 시 장치 이름이 변경될 수 있기 때문입니다. 훨씬 더 안정적인 방법은 파티션의 UUID(Universally Unique Identifier)를 사용하는 것입니다. 이는 파일 시스템 생성 시 할당되는 고유 문자열이며 변경되지 않습니다.

/dev/sdb1의 UUID를 찾으려면 blkid 명령을 다시 사용합니다.

sudo blkid /dev/sdb1

출력 결과에 UUID가 표시됩니다. 이 값을 복사하세요(따옴표 제외).

/dev/sdb1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1a2b3c4d-01"

이제 nano 편집기를 사용하여 /etc/fstab을 편집합니다. 시스템 파일이므로 sudo를 사용해야 합니다.

sudo nano /etc/fstab

파일 끝으로 이동하여 파티션에 대한 새 줄을 추가합니다. fstab 항목의 형식은 다음과 같습니다. <device_identifier> <mount_point> <filesystem_type> <options> <dump> <pass>

blkid 명령에서 복사한 실제 UUID로 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx를 대체하여 다음 줄을 추가합니다.

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2
  • UUID=...: 고유 ID로 파티션을 식별합니다.
  • /data: 파일 시스템이 마운트될 디렉토리입니다.
  • ext4: 파일 시스템 유형입니다.
  • defaults: 대부분의 경우에 적합한 표준 마운트 옵션 세트입니다.
  • 0: dump 필드입니다. 이는 오래된 백업 유틸리티 플래그이며 0이어야 합니다.
  • 2: pass 필드입니다. 부팅 시 파일 시스템을 검사할 순서를 fsck 유틸리티에 알려줍니다. 1은 루트 파일 시스템용, 2는 기타 영구 파일 시스템용이며, 0은 검사를 비활성화합니다.

줄을 추가한 후 Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

이제 재부팅하여 테스트하는 대신 mount -a 명령을 사용할 수 있습니다. 이 명령은 /etc/fstab에 나열된 파일 시스템 중 아직 마운트되지 않은 모든 파일 시스템을 마운트합니다.

sudo mount -a

오류가 없으면 명령이 조용히 완료됩니다. 이제 df 명령을 사용하여 파일 시스템이 올바르게 마운트되었는지 확인할 수 있습니다.

df -h | grep /data

출력 결과에서 /dev/sdb1/data에 마운트되었음을 확인해야 합니다.

/dev/sdb1       488M  2.6M  459M   1% /data

이제 시스템이 시작될 때마다 파티션이 자동으로 마운트됩니다.

Linux 스왑 파티션 생성 및 관리

이 단계에서는 또 다른 특수 파티션 유형인 Linux 스왑에 대해 배웁니다. 스왑 공간은 물리적 RAM이 가득 찼을 때 운영 체제에서 가상 메모리로 사용합니다. 비활성 메모리 페이지를 디스크로 이동시켜 활성 프로세스를 위한 RAM을 확보할 수 있게 합니다. 충분한 RAM을 대체할 수는 없지만, 스왑 파티션을 사용하면 메모리 부족 오류로 인한 시스템 충돌을 방지할 수 있습니다.

중요 참고: 새 파티션을 생성하기 전에 /dev/sdb의 기존 파일 시스템이 언마운트되었는지 확인하세요. 장치가 현재 마운트되어 있으면(이전 단계에서 수행한 경우) 파티션 테이블을 수정할 때 "Device or resource busy" 오류가 발생할 수 있습니다.

/dev/sdb에 새 파티션을 생성하고 스왑 공간으로 구성합니다. 먼저 장치가 마운트되지 않았는지 확인한 다음 fdisk를 사용하여 파티션을 생성합니다. 이미 /dev/sdb1을 생성했으므로 이 새 파티션은 /dev/sdb2가 됩니다.

## 먼저 장치가 마운트되어 있는지 확인하고 필요한 경우 언마운트
lsblk /dev/sdb
sudo umount /data /mnt/data 2> /dev/null || true

## 이제 파티션 생성
sudo fdisk /dev/sdb

fdisk 대화형 프롬프트에서 다음 명령을 따릅니다.

  1. 새 파티션 생성: n을 입력하고 Enter를 누릅니다.
  2. 파티션 유형 및 번호 선택: 기본 파티션(p)과 파티션 번호 2에 대한 기본값을 수락하려면 Enter를 두 번 누릅니다.
  3. 섹터 지정: 첫 번째 섹터 기본값을 수락합니다. 크기는 256MB 파티션을 생성해 보겠습니다. +256M을 입력하고 Enter를 누릅니다.
  4. 파티션 유형 변경: 이 단계가 중요합니다. t를 입력하여 파티션 유형을 변경합니다. 파티션 번호를 묻는 메시지가 나오면 2를 입력합니다. 16진수 코드를 묻는 메시지가 나오면 "Linux swap / Solaris"에 해당하는 82를 입력합니다.
  5. 출력 및 확인: p를 입력하여 변경 사항을 검토합니다. /dev/sdb2의 유형이 "Linux swap / Solaris"로 표시되어야 합니다.
  6. 변경 사항 쓰기: w를 입력하여 새 파티션 테이블을 저장하고 종료합니다.
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (1026048-4194303, default 1026048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1026048-4194303, default 4194303): +256M

Created a new partition 2 of type 'Linux' and of size 256 MiB.

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
...
Device     Boot   Start     End   Sectors   Size Id Type
/dev/sdb1          2048 1026047   1024000   500M 83 Linux
/dev/sdb2       1026048 1550335    524288   256M 82 Linux swap / Solaris

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

파티션을 생성한 후 /dev/sdb1과 마찬가지로 /dev/sdb2에 대한 심볼릭 링크를 생성해야 합니다. 먼저 partprobe를 실행하여 커널이 새 파티션을 인식하도록 합니다.

sudo partprobe

이제 두 번째 파티션에 대한 심볼릭 링크를 식별하고 생성합니다.

PARTITION2_DEVICE=$(lsblk -lno NAME /dev/sdb | grep p2 | head -1)
sudo ln -s /dev/$PARTITION2_DEVICE /dev/sdb2

파티션에 액세스할 수 있는지 확인합니다.

lsblk /dev/sdb2

파티션을 스왑 공간으로 포맷하기 전에 장치가 사용 중이 아닌지 확인해야 합니다. "Device or resource busy" 오류가 발생하면 장치가 마운트되었을 수 있습니다. 먼저 기존 마운트를 확인하고 언마운트합니다.

## 현재 마운트 상태 확인
lsblk /dev/sdb

## 장치가 마운트된 경우 언마운트
sudo umount /data /mnt/data 2> /dev/null || true

이제 파티션이 생성되고 액세스 가능하므로 mkswap 명령을 사용하여 스왑 공간으로 사용할 수 있도록 포맷해야 합니다.

sudo mkswap /dev/sdb2

포맷 후 스왑 공간을 활성화할 수 있습니다. 먼저 free -h 명령으로 현재 스왑 사용량을 확인합니다.

free -h

출력 결과에서 Swap이 0B로 표시될 가능성이 높습니다.

              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       151Mi       1.6Gi       0.0Ki       202Mi       1.7Gi
Swap:            0B          0B          0B

이제 swapon 명령을 사용하여 새 스왑 파티션을 활성화합니다.

sudo swapon /dev/sdb2

free -hswapon -s(요약) 명령으로 스왑 사용량을 다시 확인합니다.

free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       152Mi       1.4Gi       0.0Ki       202Mi       1.6Gi
Swap:         256Mi          0B       256Mi
swapon -s
Filename    Type  Size Used Priority
/dev/sdb2                               partition 262140 0 -2

총 스왑 공간이 증가한 것을 볼 수 있습니다. 스왑 파티션을 비활성화하려면 swapoff 명령을 사용합니다.

sudo swapoff /dev/sdb2

free -h를 다시 실행하여 비활성화되었는지 확인합니다. 스왑 공간이 0으로 돌아갑니다. 이는 실행 중인 시스템에서 스왑 공간을 동적으로 관리하는 방법을 보여줍니다.

문제 해결 참고: 이 단계에서 "Device or resource busy" 오류가 발생하면 일반적으로 다음을 의미합니다.

  1. 장치 또는 해당 파티션 중 하나가 현재 마운트되어 있음
  2. 프로세스가 장치에 액세스 중임

이를 해결하려면 파티션 작업을 진행하기 전에 sudo umount /data /mnt/data를 사용하여 모든 마운트 지점이 언마운트되었는지 확인하세요.

요약

이 실습에서는 Linux 시스템에서 디스크 파티션과 파일 시스템을 관리하는 데 필요한 필수 기술을 배웠습니다. lsblk를 사용하여 사용 가능한 블록 장치를 검사하고 fdisk 유틸리티를 사용하여 보조 디스크에 새 기본 파티션을 생성하는 것으로 시작했습니다. 파티션 생성 후 mkfs.ext4를 사용하여 ext4 파일 시스템으로 포맷했습니다. 또한 새 파일 시스템을 디렉토리에 마운트하고, 상태를 확인하고, 언마운트하는 연습을 했습니다. 마지막으로 파티션의 UUID를 사용하여 /etc/fstab 파일을 편집함으로써 시스템 부팅 시 자동으로 마운트되도록 영구 마운트를 구성했습니다.

또한 이 실습에서는 전용 스왑 공간을 생성하고 관리하는 과정을 다루었습니다. 여기에는 fdisk를 다시 사용하여 파티션을 생성하고 유형을 "Linux swap"으로 변경하는 작업이 포함되었습니다. 그런 다음 mkswap 명령으로 이 파티션을 스왑 영역으로 준비하고 swapon을 사용하여 활성화했습니다. 재부팅 후에도 스왑 공간이 유지되도록 /etc/fstab 파일에 해당 항목을 추가했습니다.