Block and File Storage (EBS/EFS vs Persistent Disk/Filestore)

Block and File Storage (EBS/EFS vs Persistent Disk/Filestore)

1. Storage Type Comparison

1.1 Block vs File vs Object Storage

Type Characteristics Use Cases AWS GCP
Block Low-level disk access Databases, OS boot disk EBS Persistent Disk
File Shared filesystem Shared storage, CMS EFS Filestore
Object HTTP-based, unlimited Backup, media, logs S3 Cloud Storage

1.2 Service Mapping

Feature AWS GCP
Block Storage EBS (Elastic Block Store) Persistent Disk (PD)
Shared File Storage EFS (Elastic File System) Filestore
Local SSD Instance Store Local SSD

2. Block Storage

2.1 AWS EBS (Elastic Block Store)

EBS Volume Types:

Type Use Case IOPS Throughput Cost
gp3 General purpose SSD Up to 16,000 Up to 1,000 MB/s Low
gp2 General purpose SSD (legacy) Up to 16,000 Up to 250 MB/s Medium
io2 Provisioned IOPS Up to 64,000 Up to 1,000 MB/s High
st1 Throughput-optimized HDD Up to 500 Up to 500 MB/s Low
sc1 Cold HDD Up to 250 Up to 250 MB/s Very low
# EBS ๋ณผ๋ฅจ ์ƒ์„ฑ
aws ec2 create-volume \
    --availability-zone ap-northeast-2a \
    --size 100 \
    --volume-type gp3 \
    --iops 3000 \
    --throughput 125 \
    --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=MyVolume}]'

# EC2์— ๋ณผ๋ฅจ ์—ฐ๊ฒฐ
aws ec2 attach-volume \
    --volume-id vol-1234567890abcdef0 \
    --instance-id i-1234567890abcdef0 \
    --device /dev/sdf

# ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋งˆ์šดํŠธ
sudo mkfs -t xfs /dev/xvdf
sudo mkdir /data
sudo mount /dev/xvdf /data

# fstab์— ์ถ”๊ฐ€ (์˜๊ตฌ ๋งˆ์šดํŠธ)
echo '/dev/xvdf /data xfs defaults,nofail 0 2' | sudo tee -a /etc/fstab

2.2 GCP Persistent Disk

Persistent Disk Types:

Type Use Case IOPS (read) Throughput (read) Cost
pd-standard HDD Up to 7,500 Up to 180 MB/s Low
pd-balanced SSD (balanced) Up to 80,000 Up to 1,200 MB/s Medium
pd-ssd SSD (high performance) Up to 100,000 Up to 1,200 MB/s High
pd-extreme High IOPS SSD Up to 120,000 Up to 2,400 MB/s Very high
# Persistent Disk ์ƒ์„ฑ
gcloud compute disks create my-disk \
    --zone=asia-northeast3-a \
    --size=100GB \
    --type=pd-ssd

# VM์— ๋””์Šคํฌ ์—ฐ๊ฒฐ
gcloud compute instances attach-disk my-instance \
    --disk=my-disk \
    --zone=asia-northeast3-a

# ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋งˆ์šดํŠธ
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
sudo mkdir /data
sudo mount -o discard,defaults /dev/sdb /data

# fstab์— ์ถ”๊ฐ€
echo UUID=$(sudo blkid -s UUID -o value /dev/sdb) /data ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab

3. Snapshots

3.1 AWS EBS Snapshots

# ์Šค๋ƒ…์ƒท ์ƒ์„ฑ
aws ec2 create-snapshot \
    --volume-id vol-1234567890abcdef0 \
    --description "My snapshot" \
    --tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=MySnapshot}]'

# ์Šค๋ƒ…์ƒท ๋ชฉ๋ก ์กฐํšŒ
aws ec2 describe-snapshots \
    --owner-ids self \
    --query 'Snapshots[*].[SnapshotId,VolumeId,StartTime,State]'

# ์Šค๋ƒ…์ƒท์—์„œ ๋ณผ๋ฅจ ๋ณต์›
aws ec2 create-volume \
    --availability-zone ap-northeast-2a \
    --snapshot-id snap-1234567890abcdef0 \
    --volume-type gp3

# ์Šค๋ƒ…์ƒท ๋ณต์‚ฌ (๋‹ค๋ฅธ ๋ฆฌ์ „)
aws ec2 copy-snapshot \
    --source-region ap-northeast-2 \
    --source-snapshot-id snap-1234567890abcdef0 \
    --destination-region us-east-1

# ์Šค๋ƒ…์ƒท ์‚ญ์ œ
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0

Automated Snapshots (Data Lifecycle Manager):

# DLM ์ •์ฑ… ์ƒ์„ฑ (๋งค์ผ ์Šค๋ƒ…์ƒท, 7์ผ ๋ณด๊ด€)
aws dlm create-lifecycle-policy \
    --description "Daily snapshots" \
    --state ENABLED \
    --execution-role-arn arn:aws:iam::123456789012:role/AWSDataLifecycleManagerDefaultRole \
    --policy-details '{
        "ResourceTypes": ["VOLUME"],
        "TargetTags": [{"Key": "Backup", "Value": "true"}],
        "Schedules": [{
            "Name": "DailySnapshots",
            "CreateRule": {"Interval": 24, "IntervalUnit": "HOURS", "Times": ["03:00"]},
            "RetainRule": {"Count": 7}
        }]
    }'

3.2 GCP Snapshots

# ์Šค๋ƒ…์ƒท ์ƒ์„ฑ
gcloud compute snapshots create my-snapshot \
    --source-disk=my-disk \
    --source-disk-zone=asia-northeast3-a

# ์Šค๋ƒ…์ƒท ๋ชฉ๋ก ์กฐํšŒ
gcloud compute snapshots list

# ์Šค๋ƒ…์ƒท์—์„œ ๋””์Šคํฌ ๋ณต์›
gcloud compute disks create restored-disk \
    --source-snapshot=my-snapshot \
    --zone=asia-northeast3-a

# ์Šค๋ƒ…์ƒท ์‚ญ์ œ
gcloud compute snapshots delete my-snapshot

Snapshot Schedule:

# ์Šค์ผ€์ค„ ์ •์ฑ… ์ƒ์„ฑ (๋งค์ผ, 7์ผ ๋ณด๊ด€)
gcloud compute resource-policies create snapshot-schedule daily-snapshot \
    --region=asia-northeast3 \
    --max-retention-days=7 \
    --start-time=04:00 \
    --daily-schedule

# ๋””์Šคํฌ์— ์Šค์ผ€์ค„ ์—ฐ๊ฒฐ
gcloud compute disks add-resource-policies my-disk \
    --resource-policies=daily-snapshot \
    --zone=asia-northeast3-a

4. Volume Expansion

4.1 AWS EBS Volume Expansion

# 1. ๋ณผ๋ฅจ ํฌ๊ธฐ ์ˆ˜์ • (์˜จ๋ผ์ธ ๊ฐ€๋Šฅ)
aws ec2 modify-volume \
    --volume-id vol-1234567890abcdef0 \
    --size 200

# 2. ์ˆ˜์ • ์ƒํƒœ ํ™•์ธ
aws ec2 describe-volumes-modifications \
    --volume-id vol-1234567890abcdef0

# 3. ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ํŒŒ์ผ์‹œ์Šคํ…œ ํ™•์žฅ
# XFS
sudo xfs_growfs -d /data

# ext4
sudo resize2fs /dev/xvdf

4.2 GCP Persistent Disk Expansion

# 1. ๋””์Šคํฌ ํฌ๊ธฐ ํ™•์žฅ (์˜จ๋ผ์ธ ๊ฐ€๋Šฅ)
gcloud compute disks resize my-disk \
    --size=200GB \
    --zone=asia-northeast3-a

# 2. ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ํŒŒ์ผ์‹œ์Šคํ…œ ํ™•์žฅ
# ext4
sudo resize2fs /dev/sdb

# XFS
sudo xfs_growfs /data

5. File Storage

5.1 AWS EFS (Elastic File System)

Features: - NFS v4.1 protocol - Auto-scaling (expand/shrink) - Multi-AZ support - Supports thousands of concurrent EC2 connections

# 1. EFS ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์„ฑ
aws efs create-file-system \
    --performance-mode generalPurpose \
    --throughput-mode bursting \
    --encrypted \
    --tags Key=Name,Value=my-efs

# 2. ๋งˆ์šดํŠธ ํƒ€๊ฒŸ ์ƒ์„ฑ (๊ฐ ์„œ๋ธŒ๋„ท)
aws efs create-mount-target \
    --file-system-id fs-12345678 \
    --subnet-id subnet-12345678 \
    --security-groups sg-12345678

# 3. EC2์—์„œ ๋งˆ์šดํŠธ
sudo yum install -y amazon-efs-utils
sudo mkdir /efs
sudo mount -t efs fs-12345678:/ /efs

# ๋˜๋Š” NFS๋กœ ๋งˆ์šดํŠธ
sudo mount -t nfs4 -o nfsvers=4.1 \
    fs-12345678.efs.ap-northeast-2.amazonaws.com:/ /efs

# fstab์— ์ถ”๊ฐ€
echo 'fs-12345678:/ /efs efs defaults,_netdev 0 0' | sudo tee -a /etc/fstab

EFS Storage Classes: | Class | Use Case | Cost | |--------|------|------| | Standard | Frequent access | High | | Infrequent Access (IA) | Infrequent access | Low | | Archive | Long-term retention | Very low |

# ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ •์ฑ… ์„ค์ • (30์ผ ํ›„ IA๋กœ ์ด๋™)
aws efs put-lifecycle-configuration \
    --file-system-id fs-12345678 \
    --lifecycle-policies '[{"TransitionToIA":"AFTER_30_DAYS"}]'

5.2 GCP Filestore

Features: - NFS v3 protocol - Pre-provisioned capacity - High-performance options available

Filestore Tiers: | Tier | Capacity | Performance | Use Case | |------|------|------|------| | Basic HDD | 1TB-63.9TB | 100 MB/s | File sharing | | Basic SSD | 2.5TB-63.9TB | 1,200 MB/s | High performance | | Zonal | 1TB-100TB | Up to 2,560 MB/s | High-performance workloads | | Enterprise | 1TB-10TB | Up to 1,200 MB/s | Mission-critical |

# 1. Filestore ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
gcloud filestore instances create my-filestore \
    --zone=asia-northeast3-a \
    --tier=BASIC_SSD \
    --file-share=name=vol1,capacity=2.5TB \
    --network=name=default

# 2. Filestore ์ •๋ณด ์กฐํšŒ
gcloud filestore instances describe my-filestore \
    --zone=asia-northeast3-a

# 3. VM์—์„œ ๋งˆ์šดํŠธ
sudo apt-get install -y nfs-common
sudo mkdir /filestore
sudo mount 10.0.0.2:/vol1 /filestore

# fstab์— ์ถ”๊ฐ€
echo '10.0.0.2:/vol1 /filestore nfs defaults,_netdev 0 0' | sudo tee -a /etc/fstab

6. Local SSD

6.1 AWS Instance Store

Instance Store is temporary storage physically attached to EC2 instances.

Features: - Data loss on instance stop/termination - Very high IOPS - No additional cost (included in instance price)

# Instance Store๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์œ ํ˜• ํ™•์ธ
aws ec2 describe-instance-types \
    --filters "Name=instance-storage-supported,Values=true" \
    --query 'InstanceTypes[*].[InstanceType,InstanceStorageInfo.TotalSizeInGB]'

# ์˜ˆ: i3.large, d2.xlarge ๋“ฑ

# ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋งˆ์šดํŠธ
sudo mkfs.xfs /dev/nvme1n1
sudo mkdir /local-ssd
sudo mount /dev/nvme1n1 /local-ssd

6.2 GCP Local SSD

# Local SSD๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
gcloud compute instances create my-instance \
    --zone=asia-northeast3-a \
    --machine-type=n2-standard-4 \
    --local-ssd=interface=NVME \
    --local-ssd=interface=NVME

# ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋งˆ์šดํŠธ
sudo mkfs.ext4 /dev/nvme0n1
sudo mkdir /local-ssd
sudo mount /dev/nvme0n1 /local-ssd

Local SSD Features: - Added in 375GB units - Up to 24 units (9TB) - Data loss on instance stop - Live Migration not available (for some)


7. Performance Optimization

7.1 IOPS vs Throughput

IOPS (Input/Output Per Second):
- Number of read/write operations per second
- Important for small random I/O
- Databases, transaction processing

Throughput:
- Amount of data transferred per second (MB/s)
- Important for large sequential I/O
- Video streaming, big data

7.2 Optimization Tips

AWS EBS:

# gp3 IOPS/์ฒ˜๋ฆฌ๋Ÿ‰ ์กฐ์ •
aws ec2 modify-volume \
    --volume-id vol-xxx \
    --iops 10000 \
    --throughput 500

# EBS ์ตœ์ ํ™” ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
aws ec2 run-instances \
    --instance-type m5.large \
    --ebs-optimized \
    ...

GCP Persistent Disk:

# ๋” ํฐ ๋””์Šคํฌ = ๋” ๋†’์€ ์„ฑ๋Šฅ
# pd-ssd 100GB: ์ตœ๋Œ€ 3,000 IOPS
# pd-ssd 500GB: ์ตœ๋Œ€ 15,000 IOPS
# pd-ssd 1TB: ์ตœ๋Œ€ 30,000 IOPS

# ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋””์Šคํฌ ํฌ๊ธฐ ์ฆ๊ฐ€
gcloud compute disks resize my-disk --size=500GB

8. Cost Comparison

8.1 Block Storage Cost (Seoul Region)

Type AWS EBS GCP PD
General Purpose SSD $0.114/GB (gp3) | $0.102/GB (pd-balanced)
High Performance SSD $0.138/GB (io1) | $0.180/GB (pd-ssd)
HDD $0.054/GB (st1) | $0.044/GB (pd-standard)

8.2 File Storage Cost

Service Cost
AWS EFS Standard ~$0.33/GB/month
AWS EFS IA ~$0.025/GB/month
GCP Filestore Basic SSD ~$0.24/GB/month
GCP Filestore Basic HDD ~$0.12/GB/month

9. Hands-on: Setting Up Shared Storage

9.1 AWS EFS Multi-Instance Mount

# 1. ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ๋„ท์— ๋งˆ์šดํŠธ ํƒ€๊ฒŸ ์ƒ์„ฑ
aws efs create-mount-target --file-system-id fs-xxx --subnet-id subnet-1 --security-groups sg-xxx
aws efs create-mount-target --file-system-id fs-xxx --subnet-id subnet-2 --security-groups sg-xxx

# 2. ๋ณด์•ˆ ๊ทธ๋ฃน์— NFS ๊ทœ์น™ ์ถ”๊ฐ€
aws ec2 authorize-security-group-ingress \
    --group-id sg-xxx \
    --protocol tcp \
    --port 2049 \
    --source-group sg-instance

# 3. ๊ฐ ์ธ์Šคํ„ด์Šค์—์„œ ๋งˆ์šดํŠธ
# Instance 1
sudo mkdir /shared && sudo mount -t efs fs-xxx:/ /shared
echo "Hello from Instance 1" | sudo tee /shared/test.txt

# Instance 2
sudo mkdir /shared && sudo mount -t efs fs-xxx:/ /shared
cat /shared/test.txt  # "Hello from Instance 1" ์ถœ๋ ฅ

9.2 GCP Filestore Multi-Instance Mount

# 1. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์ถ”๊ฐ€
gcloud compute firewall-rules create allow-nfs \
    --allow tcp:2049,tcp:111,udp:2049,udp:111 \
    --source-ranges 10.0.0.0/8

# 2. ๊ฐ ์ธ์Šคํ„ด์Šค์—์„œ ๋งˆ์šดํŠธ
# Instance 1
sudo mkdir /shared && sudo mount 10.0.0.2:/vol1 /shared
echo "Hello from Instance 1" | sudo tee /shared/test.txt

# Instance 2
sudo mkdir /shared && sudo mount 10.0.0.2:/vol1 /shared
cat /shared/test.txt  # "Hello from Instance 1" ์ถœ๋ ฅ

10. Next Steps


References

to navigate between lessons