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¶
- 09_Virtual_Private_Cloud.md - VPC Networking
- 11_Managed_Relational_DB.md - Database Storage