본문 바로가기
OS/Linux Server

[Linux] Disk 추가

by Haengsin 2022. 2. 17.
파티션 생성

 

# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk
└─vda1 253:1    0  100G  0 part
vdb    253:2    0  50G   0 disk
vdc    253:16   0  200G  0 disk

디스크 장치의 이름은 vda, vdb, vdc...와 같이 인스턴스에 블록 스토리지를 연결한 순서대로 알파벳 문자가 하나씩 올라가게 됩니다.

 

(1) $ fdisk [장치]

- 추가한 dev/sdb 와 /dev/sdc 에 대하여 진행.

( /dev/sdc 에 대해서만 작성함. )

 

# sudo fdisk /dev/vdc
Welcome to fdisk (util-linux 2.23.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
Building a new DOS disklabel with disk identifier 0x6c636fa0.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-419430399, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): 20000                                           0000
Partition 1 of type Linux and of size 95.4 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (200000001-419430399, default 200001536):
Using default value 200001536
Last sector, +sectors or +size{K,M,G} (200001536-419430399, default 419430399):
Using default value 419430399
Partition 2 of type Linux and of size 104.6 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

(2) 파티션 생성된 것 확인 : $ lsblk

파티션 포맷

일반적으로 Linux에서 파티션의 이름은 '장치이름 + 숫자' 형태입니다.

(1) mkfs -t [파일시스템 타입] [파티션 명]

# mkfs -t ext4 /dev/vdb1
# mkfs -t ext4 /dev/vdc1
# mkfs -t ext4 /dev/vdc2

 

디스크 마운트

파일 시스템까지 만든 디스크에는 마운트 과정을 거쳐야 접근할 수 있습니다. 간편하게 mount 명령어로 디스크를 마운트할 수도 있으나 인스턴스가 재부팅되면 마운트 해제(unmount)됩니다. 이 예제에서는 /etc/fstab 파일에 마운트할 디스크를 추가하여 인스턴스 부팅 과정에서 자동으로 마운트하는 방법을 설명합니다.

아래는 /etc/fstab 파일 내용을 출력한 것입니다.

$ cat /etc/fstab

# Created by anaconda on Wed Apr 22 09:05:25 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6cd50e51-cfc6-40b9-9ec5-f32fa2e4ff02 /                       xfs     defaults        0 0

디스크 하나가 이미 등록된 것을 확인할 수 있습니다. 등록된 디스크는 인스턴스의 기본 디스크 (root disk)입니다.

디스크를 등록하려면 디스크의 장치 고유 ID가 필요합니다. 장치 고유 아이디는 아래와 같이 blkid 명령어로 확인할 수 있습니다.

$ sudo blkid /dev/vdb1
/dev/vdb1: UUID="874f6a1a-39f8-4811-8861-781661a38175" TYPE="ext4"

$ sudo blkid /dev/vdc1
/dev/vdc1: UUID="27af046b-6c00-47c1-9e04-ef28774e3f43" TYPE="ext4"

$ sudo blkid /dev/vdc2
/dev/vdc2: UUID="d83d271c-8bc8-45f3-b7d2-1b854afaee47" TYPE="ext4"

출력 내용 중 UUID에 해당하는 항목이 바로 장치 고유 ID입니다.

마운트 대상 디렉터리를 생성합니다. 마운트 대상 디렉터리는 어떠한 것이라도 상관없습니다. 이 예제에서는 /mnt/vdb로 하겠습니다.

 

 

$ mkdir /disk0
$ mkdir /disk1
$ mkdir /disk2

 

마운트 대상 디렉터리가 준비되었으면 다음과 같이 디스크를 등록합니다.

$ echo "UUID=874f6a1a-39f8-4811-8861-781661a38175 /mnt/vdb1 ext4 defaults,nodev,noatime,nofail 1 2" >> /etc/fstab
$ echo "UUID=27af046b-6c00-47c1-9e04-ef28774e3f43 /mnt/vdc1 ext4 defaults,nodev,noatime,nofail 1 2" >> /etc/fstab
$ echo "UUID=d83d271c-8bc8-45f3-b7d2-1b854afaee47 /mnt/vdc2 ext4 defaults,nodev,noatime,nofail 1 2" >> /etc/fstab

 

[참고] 위 예제에서는 볼륨 마운트에 실패하더라도 부팅이 될 수 있도록 nofail 옵션을 추가하였습니다.

마지막으로 /etc/fstab의 내용을 반영해야 합니다. mount -a 명령어로 /etc/fstab에 등록된 모든 디스크를 마운트합니다.

# mount -a

df 명령어로 정상적으로 마운트됐는지 확인합니다.

$ df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.5M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1       100G  2.3G   98G   3% /
tmpfs           379M     0  379M   0% /run/user/1000
/dev/vdb1        50G   53M   47G   1% /disk0
/dev/vdc1        94G   61M   89G   1% /disk1
/dev/vdc2       103G   61M   98G   1% /disk2

새 파티션이 마운트되어 있는 것을 확인할 수 있습니다.

 

 

[참고] 위의 과정을 한 번에 처리하려면 아래의 스크립트를 참고하시기 바랍니다. 아래의 스크립트는 CentOS 7에서 테스트한 것입니다.

#!/bin/bash

DEVICES=(`lsblk -s -d -o name,type | grep disk | awk '{print $1}'`)

for DEVICE_NAME in ${DEVICES[@]}
do
   MOUNT_DIR=/mnt/$DEVICE_NAME
   FS_TYPE=xfs

   mkdir -p $MOUNT_DIR

   echo -e "n\np\n1\n\n\nw" | fdisk /dev/$DEVICE_NAME
   PART_NAME="/dev/${DEVICE_NAME}1"
   mkfs -t $FS_TYPE $PART_NAME > /dev/null

   UUID=`blkid $PART_NAME -o export | grep "^UUID=" | cut -d'=' -f 2`
   echo "UUID=$UUID $MOUNT_DIR $FS_TYPE defaults,nodev,noatime,nofail 1 2" >> /etc/fstab

   mount -a
done

[참고] CentOS6, Debian, Ubuntu는 기본 파일 시스템이 ext4 입니다. 따라서 아래의 스크립트를 사용해야 합니다.

#!/bin/bash

DEVICES=(`lsblk -s -d -o name,type | grep disk | awk '{print $1}'`)

for DEVICE_NAME in ${DEVICES[@]}
do
   MOUNT_DIR=/mnt/$DEVICE_NAME
   FS_TYPE=ext4

   mkdir -p $MOUNT_DIR

   echo -e "n\np\n1\n\n\nw" | fdisk /dev/$DEVICE_NAME
   PART_NAME="/dev/${DEVICE_NAME}1"
   mkfs -t $FS_TYPE $PART_NAME > /dev/null

   UUID=`blkid $PART_NAME -o export | grep "^UUID=" | cut -d'=' -f 2`
   echo "UUID=$UUID $MOUNT_DIR $FS_TYPE defaults,nodev,noatime,nofail 1 2" >> /etc/fstab

   mount -a
done

 

 

※ 출처 : NHN Cloud 사용 가이드, https://docs.toast.com/ko/Storage/Block%20Storage/ko/overview/