소개
이 실습에서는 Linux 환경에서 디스크 파티션과 파일 시스템을 관리하는 데 필요한 핵심 기술을 배웁니다. fdisk와 같은 명령줄 유틸리티를 사용하여 사용 가능한 디스크를 검사하고, 새 파티션을 생성하며, 표준 파일 시스템으로 포맷하는 방법을 실습합니다. 안전한 학습 환경을 위해 모든 작업은 전용 보조 가상 디스크인 /dev/sdb에서 수행되며, 기본 운영 체제 디스크는 건드리지 않습니다.
참고: 이 실습 환경에서 /dev/sdb는 루프 장치(디스크처럼 작동하는 파일)로 구현되어 있습니다. 파티션을 생성하면 loop13p1 또는 loop14p1과 같은 이름으로 나타납니다. 정확한 루프 번호는 세션에서 사용 가능한 루프 장치에 따라 다르므로 여기에 표시된 예시와 다를 수 있습니다. 실제 하드웨어에서와 마찬가지로 /dev/sdb1, /dev/sdb2 등으로 해당 파티션에 액세스할 수 있도록 심볼릭 링크를 생성하게 됩니다.
실습 전반에 걸쳐 표준 Linux 파티션을 생성하고, ext4 파일 시스템으로 포맷하며, 즉시 사용할 수 있도록 마운트하는 방법을 배웁니다. 그런 다음 /etc/fstab 파일을 편집하여 부팅 시 이 파일 시스템이 자동으로 마운트되도록 시스템을 구성합니다. 마지막으로, 시스템 성능의 핵심 요소인 전용 Linux 스왑 파티션을 생성하고 관리하는 기술을 익힙니다.
디스크 검사 및 fdisk를 이용한 새 Linux 파티션 생성
이 단계에서는 사용 가능한 디스크와 파티션 테이블을 검사하는 방법을 배웁니다. 그런 다음 강력한 명령줄 도구인 fdisk 유틸리티를 사용하여 보조 디스크에 새 파티션을 생성합니다. 실제 환경에서 파티션을 수정할 때는 실수로 데이터가 손실될 수 있으므로 매우 주의해야 합니다. 이번 실습에서는 기본 운영 체제 디스크(/dev/sda)가 안전하게 유지되도록 전용 가상 디스크인 /dev/sdb에서 작업합니다.
먼저 시스템에 연결된 모든 블록 장치(디스크 및 파티션)를 개괄적으로 살펴봅시다. lsblk 명령은 트리 구조로 명확한 보기를 제공합니다.
lsblk
출력 결과에는 기본 시스템 디스크(vda)와 이 실습을 위한 가상 디스크를 나타내는 loop13 또는 loop14와 같은 루프 장치가 포함된 사용 가능한 디스크가 표시됩니다. 정확한 루프 장치 번호는 환경에 따라 다를 수 있습니다.
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): 프롬프트가 표시됩니다. 다음 단계를 주의 깊게 따르세요:
- 새 파티션 생성:
n을 입력하고 Enter를 누릅니다. - 파티션 유형 선택: 파티션 유형(기본 또는 확장)을 선택하라는 메시지가 표시됩니다. 기본값은 기본(
p)이며, 우리가 원하는 설정입니다. Enter를 눌러 기본값을 수락합니다. - 파티션 번호 선택: 첫 번째 파티션이므로 기본값은
1입니다. Enter를 눌러 수락합니다. - 첫 번째 섹터 지정: 기본값은 디스크에서 사용 가능한 첫 번째 섹터입니다. 거의 항상 올바른 선택입니다. Enter를 눌러 기본값을 수락합니다.
- 마지막 섹터 또는 크기 지정: 섹터를 계산하는 대신 사람이 읽을 수 있는 크기를 지정할 수 있습니다. 500MB 파티션을 생성해 보겠습니다.
+500M을 입력하고 Enter를 누릅니다. - 메모리 내 파티션 테이블 출력: 저장하기 전에 변경 사항을 검토하는 것이 좋습니다.
p를 입력하고 Enter를 눌러 새 파티션 레이아웃을 확인합니다./dev/sdb1이라는 새 장치가 보여야 합니다. - 디스크에 변경 사항 쓰기: 지금까지의 변경 사항은 메모리에만 있습니다. 디스크의 파티션 테이블에 저장하려면
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 또는 loop14p1과 같이 나타납니다:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13 7:13 0 2G 0 loop
└─loop13p1 259:0 0 500M 0 part
파티션이 /dev/sdb1 대신 loop13p1, loop14p1 또는 이와 유사한 루프 기반 이름으로 나타나므로 파티션에 대한 심볼릭 링크를 생성해야 합니다. 먼저 실제 파티션 장치를 식별합니다. 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로 액세스 가능한 파티션이 표시되어야 합니다. 기본 장치 이름은 여전히 loop13p1, loop14p1 또는 다른 루프 기반 파티션 이름일 수 있습니다:
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를 사용합니다.
파일 시스템을 생성하는 명령은 "make filesystem"의 약자인 mkfs입니다. 이는 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/sdb1의 TYPE이 ext4임을 명확히 확인할 수 있습니다.
/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 number 및 Filesystem 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
파일 시스템이 마운트되었는지 확인하기 위해 먼저 마운트 상태를 확인하여 명령이 성공했는지 확인합니다. 여러 명령을 사용하여 마운트를 확인합니다:
## 마운트 지점에 파일 시스템이 마운트되어 있는지 확인
mountpoint /mnt/data
마운트가 성공했다면 다음과 같이 표시됩니다:
/mnt/data is a mountpoint
이제 df 명령으로 디스크 사용량을 확인합니다. 루프 장치 설정으로 인해 파티션은 심볼릭 링크 이름이 아닌 실제 장치 이름으로 나타날 수 있습니다. 출력 결과에는 loop13p1, loop14p1 또는 다른 루프 기반 파티션 이름이 표시될 수 있습니다:
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
문제 해결 참고: 마운트 명령이 작동하지 않는 문제가 발생하면 심볼릭 링크 대신 실제 루프 장치 이름을 사용하여 마운트해 보세요:
## 실제 장치 이름 찾기
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 대화형 프롬프트에서 다음 명령을 따르세요:
- 새 파티션 생성:
n을 입력하고 Enter를 누릅니다. - 파티션 유형 및 번호 선택: 기본 파티션(
p)과 파티션 번호2에 대해 Enter를 두 번 눌러 기본값을 수락합니다. - 섹터 지정: 첫 번째 섹터는 기본값을 수락합니다. 크기는 256MB 파티션을 생성하겠습니다.
+256M을 입력하고 Enter를 누릅니다. - 파티션 유형 변경: 이 단계가 중요합니다.
t를 입력하여 파티션 유형을 변경합니다. 파티션 번호를 묻는 메시지가 나오면2를 입력합니다. 16진수 코드를 묻는 메시지가 나오면 "Linux swap / Solaris"에 해당하는82를 입력합니다. - 출력 및 확인:
p를 입력하여 변경 사항을 검토합니다./dev/sdb2의 유형이 "Linux swap / Solaris"로 표시되어야 합니다. - 변경 사항 쓰기:
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
출력 결과에서 스왑이 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 -h 및 swapon -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" 오류가 발생하면 일반적으로 다음을 의미합니다:
- 장치 또는 파티션 중 하나가 현재 마운트되어 있음
- 프로세스가 장치에 액세스 중임
이 문제를 해결하려면 파티션 작업을 진행하기 전에 sudo umount /data /mnt/data를 사용하여 모든 마운트 지점이 언마운트되었는지 확인하세요.
요약
이 실습에서는 Linux 시스템에서 디스크 파티션과 파일 시스템을 관리하는 데 필요한 필수 기술을 배웠습니다. lsblk를 사용하여 사용 가능한 블록 장치를 검사하고 fdisk 유틸리티를 사용하여 보조 디스크에 새 기본 파티션을 생성하는 것으로 시작했습니다. 파티션 생성 후 mkfs.ext4를 사용하여 ext4 파일 시스템으로 포맷했습니다. 또한 새 파일 시스템을 디렉토리에 마운트하고, 상태를 확인하며, 언마운트하는 연습을 했습니다. 마지막으로 파티션의 UUID를 사용하여 /etc/fstab 파일을 편집함으로써 시스템 부팅 시 자동으로 마운트되도록 영구 마운트를 구성했습니다.
또한 전용 스왑 공간을 생성하고 관리하는 과정도 다루었습니다. 여기에는 fdisk를 다시 사용하여 파티션을 생성하고 유형을 "Linux swap"으로 변경하는 작업이 포함되었습니다. 그런 다음 mkswap 명령으로 이 파티션을 스왑 영역으로 준비하고 swapon을 사용하여 활성화했습니다. 재부팅 후에도 스왑 공간이 유지되도록 /etc/fstab 파일에 해당 항목을 추가하는 방법도 배웠습니다.



