วิธีตรวจสอบปัญหาภายใน EC2 instance ที่ไม่สามารถ Launch ได้

ข้างใน EC2 มีปัญหา ต้องการหาสาเหตุ แต่เปิดไม่ได้ ต้องทำยังไงดี
2023.06.23

ปัญหาที่เกิดขึ้น

EC2 instance เปิดไม่ติดครับ พอตรวจสอบก็พบว่า Status checks ของ instance แสดงขึ้นว่า "instance status check fails"
ปัญหาอาจจะเกิดภายใน Instance ซึ่งต้องตรวจสอบ OS หรือ File System ว่าเกิดปัญหาที่จุดใด แต่เราไม่สามารถล็อกอินเข้าไปใน EC2 instance ได้ เนื่องจากไม่สามารถ Launch ได้
มีวิธีตรวจสอบปัญหาภายใน EC2 instance ที่ไม่สามารถ Launch ได้ไหมครับ

วิธีแก้ปัญหา

ในกรณีที่เกิดปัญหาไม่สามารถ Lanuch หรือ ล็อกอินเข้าไปใน EC2 instance ได้ เราสามารถนำ EBS ที่ Attach ติดกับ EC2 instance ที่เกิดปัญหา ไป Attach กับ EC2 instance อื่นๆเพื่อทำการตรวจสอบปัญหาที่เกิดขึ้นได้

ขั้นตอนการดำเนินการ

สิ่งที่ต้องเตรียมก่อนการดำเนินการ

  • Instance ที่ Status checks ของ instance แสดงขึ้นว่า "instance status check fails"
  • Instance อีกตัวนึง ที่ทำการ Launched ไว้แล้ว สามารถ Login และ เข้าไปตรวจสอบได้
  • OS คือ Amazon Linux 2 ※ถ้าเป็น OS อื่นนอกจากนี้จำเป็นต้องอ่าน Command ตามแต่ละ OS

ทำการ Stopped instance ที่ Status checks ของ instance แสดงขึ้นว่า "instance status check fails"

พอตรวจสอบ Status ของ EC2 instance จะแสดงข้อความแจ้งเตื่อนขึ้นมาว่า [1/2 checks passed]

เพราะว่าการ Detach Volume ที่ติดอยู่กับ EC2 instance จำเป็นหยุด EC2 instance นั้นๆก่อน ในหน้าต่างของ Management Console ให้เราทำการหยุด instance โดยกดไปที่ [Instance state]-[Stop instance]

ทำการ Detach EBS
เมื่อสถานะของ EC2 instance เป็น [Stopped] แล้ว ให้ทำการ Detach EBS ครับ
เลือกไปที่ EC2 instance ของเรา แล้วกดไปที่ [Storage]
แล้วเราสามารถตรวจสอบ path ของ Root Ddevice ได้ (โดยในที่นี้คือ /dev/xvda)
ดูที่ Volume ID ให้เราทำการจด ID(vol-xxxxxxxxxxxxxxxxx) นี้ไว้ เพราะจำเป็นต้องใช้เมื่อใช้นำ EBS ไปติดกับ EC2 instance ที่ใช้ในการตรวจสอบ
คลิกที่ [vol-xxxxxxxxxxxxxxxxx] จะเข้าไปยังหน้า [Volume]
เลือก Volume ที่แสดงอยู่แล้ว แล้วกด [Actions]-[Detach volume]
เมื่อสถานะเปลี่ยนจาก [in-use] เป็น [available] แล้ว [Attached Instances] จะไม่มี instance ID แสดงอยู่

Attach EBS ไปยัง EC2 instance อีกตัวที่ทำการ launched แล้ว
ให้เราทำการจด ID instance ของ EC2 instance อีกตัว ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหา
จากนั้น ทำการ Attach EBS ตัวที่เราพึ่ง Detach ไปเมื่อกี้ไปยัง instance ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหาโดยการกด [Actions]-[Attach volume]
โดยการกด [Actions]-[Attach volume]
ในแถว [Instance]、เลือก ID ของ EC2 instance ที่เตรียมไว้สำหรับการตรวจสอบปัญหาที่ได้มีจดบันทึกไว้
ในแถว [Device name] ครั้งนี้เราไม่ต้องตั้งค่าอะไร ปล่อยให้เป็นค่า Default
กด [Attach volume]
รอจนสถานะจาก [available] เปลี่ยนเป็น [in-use]

ทำการ mount volume ของ EC2 instance ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหา
ใช้การควบคุม OS ทำการ mount volume เพื่อให้ EBS ที่ attach เข้าไปสามารถใช้งานได้
จากนั้นทำการ link กับ device ที่เราตั้งค่าไปทางด้านบน

$ ll /dev/ | grep sdf
lrwxrwxrwx. 1 root root           4 Jun 15 04:39 sdf -> xvdf
lrwxrwxrwx. 1 root root           5 Jun 15 04:39 sdf1 -> xvdf1
lrwxrwxrwx. 1 root root           7 Jun 15 04:39 sdf127 -> xvdf127
lrwxrwxrwx. 1 root root           7 Jun 15 04:39 sdf128 -> xvdf128


ทำการตรวจสอบ disk partitions

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0   8G  0 disk 
├─xvda1   202:1    0   8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part 
xvdf      202:80   0   8G  0 disk 
├─xvdf1   202:81   0   8G  0 part 
├─xvdf127 259:2    0   1M  0 part 
└─xvdf128 259:3    0  10M  0 part 


จะเห็นได้ว่า「xvdf1」เป็น disk partitions ของ「xvdf」
ทำการสร้าง mount point แล้ว mount Volume นั้น

$ sudo mkdir /mnt/ebs
$ sudo mount /dev/xvdf1 /mnt/ebs


หากเกิน Error ทำให้ไม่สามารถ mount ไม่ได้
อาจจะมีบางกรณีที่ UUID ซ้ำซ้อนกันทำให้เกิด error จนไม่สามารถใช้คำสั่ง mount ได้

$ sudo mount /dev/xvdf1 /mnt/ebs
mount: /mnt/ebs: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.

ในกรณีนี้เราสามารถ mount ได้โดยไม่สนว่า UUID จะซ้ำซ้อนกันหรือไม่
โดยทางเราขอแนะนำให้ใช้คำสั่งนี้เพื่อใช้ในการแก้ปัญหาชั่วคราวในการ mount EBS

$ sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/ebs

บทความอ้างอิง

Status checks for your instances - Amazon Elastic Compute Cloud (English)

ログインできないec2インスタンスを調査する | DevelopersIO (Japanese)

Amazon EBSマウント時の「wrong fs type, bad option, bad superblock on…」というエラーを解決する方法を教えてください | DevelopersIO (Japanese)

บทความต้นฉบับ

起動できないEC2インスタンス内部の問題を調査する方法 | DevelopersIO (Japanese)