Ngôn ngữ hiển thị:
Lần đầu tôi deploy production lên EC2, tự tin lắm. Đến tuần thứ 3, server báo "No space left on device" lúc 2 giờ sáng. Hóa ra 8GB root volume đã bị log Nginx nuốt sạch. Tôi terminate instance để tạo lại với ổ lớn hơn - và mất luôn toàn bộ data đã upload. Đó là khi tôi học được bài học đắt giá về AWS EBS.
EBS (Elastic Block Store) là dịch vụ ổ cứng ảo của AWS - giống như bạn mua thêm SSD rời cắm vào laptop, nhưng đây là SSD trên đám mây, cắm vào EC2 instance qua mạng nội bộ AWS.
Điểm khác biệt cốt lõi so với ổ cứng vật lý: EBS tồn tại độc lập với EC2. Bạn có thể stop/terminate instance mà dữ liệu trên EBS vẫn còn nguyên. Gắn volume này sang instance khác trong cùng AZ chỉ mất vài giây. Snapshot (backup) lên S3 bất cứ lúc nào.
Theo AWS, EBS phục vụ hàng triệu instance mỗi ngày với độ trễ dưới 1ms cho loại io2 Block Express. Đây là lý do mọi database production trên AWS đều chạy trên EBS thay vì instance store.
AWS có 5 loại EBS chính, mỗi loại tối ưu cho một use case khác nhau:
Dưới đây là quy trình đầy đủ, từ tạo volume đến mount vào thư mục Linux.
Bước 1: Tạo EBS Volume trên AWS Console
Vào EC2 → Elastic Block Store → Volumes → Create volume. Chọn loại gp3, nhập dung lượng (ví dụ 50 GB), quan trọng nhất: chọn đúng Availability Zone khớp với EC2 instance (ví dụ ap-southeast-1a). EBS chỉ gắn được vào instance cùng AZ.
Bước 2: Attach volume vào EC2
Chuột phải vào volume → Attach volume → chọn instance → chọn device name (ví dụ /dev/xvdf) → Attach.
Bước 3: SSH vào EC2, kiểm tra volume mới
lsblkBạn sẽ thấy device mới, ví dụ xvdf, nhưng chưa có mount point.
Bước 4: Format volume (chỉ làm lần đầu tiên!)
sudo mkfs -t ext4 /dev/xvdf⚠️ KHÔNG format nếu volume đã có data - sẽ mất hết.
Bước 5: Mount vào thư mục
sudo mkdir /data
sudo mount /dev/xvdf /data
df -h /dataBước 6: Auto-mount khi reboot (quan trọng!)
Mount thủ công sẽ mất sau khi reboot. Phải thêm vào /etc/fstab:
# Lấy UUID của volume
sudo blkid /dev/xvdf
# Thêm dòng này vào /etc/fstab (thay UUID thực tế)
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,nofail 0 2Dùng nofail option để EC2 vẫn boot được nếu volume bị detach.
Mẹo: Luôn dùng UUID thay vì device name (
/dev/xvdf) trong fstab. Device name có thể thay đổi sau reboot trên một số AMI, UUID thì không.
Tôi đã tư vấn cho nhiều team và thấy 3 lỗi này lặp đi lặp lại:
resize2fs đều có rủi ro. Một lệnh snapshot mất 30 giây nhưng có thể cứu cả ngày làm việc.ap-southeast-1a không gắn được vào instance ở ap-southeast-1b. Giải pháp: snapshot → tạo volume mới từ snapshot ở AZ đúng.Q: Nếu terminate EC2 thì EBS có mất không?A: Phụ thuộc setting "Delete on Termination". Root volume mặc định là Yes (xóa khi terminate). Data volume gắn thêm mặc định là No (giữ lại). Kiểm tra và đổi setting này trước khi terminate nếu muốn giữ root volume.
Q: EBS có thể gắn vào nhiều EC2 cùng lúc không?A: Có, với tính năng EBS Multi-Attach - nhưng chỉ dành cho loại
io1/io2, tối đa 16 instance trong cùng AZ, và cần file system hỗ trợ concurrent write (như GFS2, OCFS2). Đừng dùng ext4 hay xfs với Multi-Attach - sẽ corrupt data.
Q: Chi phí EBS tính như thế nào?A: Tính theo GB/tháng và IOPS/tháng (với io1/io2). gp3 tại region Singapore: ~$0.096/GB/tháng. 100GB = $9.6/tháng. Snapshot tính riêng: ~$0.05/GB/tháng chỉ cho phần thay đổi (incremental). Volume không dùng vẫn bị tính tiền - xóa những volume orphan để tiết kiệm.
EBS không phải chỉ là "ổ cứng thêm vào" - nó là nền tảng lưu trữ của mọi workload stateful trên AWS. Hiểu rõ từng loại volume, biết khi nào dùng gp3 vs io2, và quan trọng nhất là thiết lập snapshot tự động ngay từ đầu. AWS Backup có thể tự động snapshot hàng ngày với retention policy chỉ cần vài click.
Bài tiếp theo sẽ so sánh S3, EBS và EFS - ba dịch vụ lưu trữ chính của AWS, khi nào dùng cái nào để không bị "over-engineer" hay "under-provision".