คุณไม่สามารถใช้คู่คีย์กับอินสแตนซ์ที่กำลังทำงานอยู่ได้ คุณสามารถใช้คีย์แพร์ใหม่เพื่อเปิดอินสแตนซ์ใหม่เท่านั้น
สำหรับการกู้คืนหากเป็น EBS boot AMI คุณสามารถหยุดสร้าง snapshot ของวอลลุ่มได้ สร้างโวลุ่มใหม่ตาม และสามารถใช้งานได้เพื่อเริ่มต้นอินสแตนซ์เก่าสร้างภาพใหม่หรือกู้คืนข้อมูล
แม้ว่าข้อมูลที่เก็บชั่วคราวจะสูญหาย
เนื่องจากความนิยมของคำถามและคำตอบนี้ฉันต้องการรวบรวมข้อมูลในลิงก์ที่ Rodney โพสต์ในความคิดเห็นของเขา
เครดิตไปที่Eric Hammondสำหรับข้อมูลนี้
การแก้ไขไฟล์ในปริมาณ EBS รูทของอินสแตนซ์ EC2
คุณสามารถตรวจสอบและแก้ไขไฟล์ในปริมาณ EBS รูทบนอินสแตนซ์ EC2 แม้ว่าคุณจะอยู่ในสถานการณ์ที่น่ารังเกียจเช่น:
- คุณทำคีย์ ssh ของคุณหายหรือลืมรหัสผ่าน
- คุณทำผิดพลาดในการแก้ไขไฟล์ / etc / sudoers และไม่สามารถเข้าถึงรูทด้วย sudo เพื่อแก้ไขได้อีกต่อไป
- อินสแตนซ์ที่ใช้เวลานานของคุณถูกระงับด้วยเหตุผลบางประการไม่สามารถติดต่อได้และไม่สามารถบูตได้อย่างถูกต้อง
- คุณต้องกู้คืนไฟล์จากอินสแตนซ์ แต่ไม่สามารถไปได้
บนคอมพิวเตอร์จริงที่นั่งอยู่ที่โต๊ะทำงานคุณสามารถบูทระบบโดยใช้แผ่นซีดีหรือ USB ติดตั้งฮาร์ดไดรฟ์ตรวจสอบและแก้ไขไฟล์จากนั้นรีบูตคอมพิวเตอร์เพื่อให้ธุรกิจกลับมาทำงานอีกครั้ง
อย่างไรก็ตามอินสแตนซ์ EC2 ระยะไกลดูเหมือนว่าอยู่ไกลและไม่สามารถเข้าถึงได้เมื่อคุณอยู่ในสถานการณ์เหล่านี้ โชคดีที่ AWS ให้พลังและความยืดหยุ่นแก่เราในการกู้คืนระบบเช่นนี้โดยมีเงื่อนไขว่าเรากำลังใช้งาน EBS สำหรับการบู๊ตอินสแตนซ์
วิธีการใน EC2 นั้นค่อนข้างคล้ายกับโซลูชันทางกายภาพ แต่เรากำลังจะย้ายและติดตั้ง "ฮาร์ดไดรฟ์" ที่ผิดปกติ (โวลุ่ม EBS ระดับราก) ไปยังอินสแตนซ์อื่นแก้ไขจากนั้นย้ายกลับมา
ในบางสถานการณ์อาจเป็นการง่ายกว่าที่จะเริ่มต้นอินสแตนซ์ EC2 ใหม่และทิ้งสิ่งที่ไม่ดี แต่ถ้าคุณต้องการแก้ไขไฟล์ของคุณจริงๆนี่เป็นวิธีที่ใช้ได้ผลกับหลาย ๆ คน:
ติดตั้ง
ระบุอินสแตนซ์ดั้งเดิม (A) และโวลุ่มที่มีโวลุ่ม EBS รูทที่แตกหักพร้อมไฟล์ที่คุณต้องการดูและแก้ไข
instance_a=i-XXXXXXXX
volume=$(ec2-describe-instances $instance_a |
egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)
ระบุอินสแตนซ์ EC2 ที่สอง (B) ที่คุณจะใช้เพื่อแก้ไขไฟล์ในโวลุ่ม EBS ดั้งเดิม อินสแตนซ์นี้จะต้องทำงานในโซนความพร้อมใช้งานเดียวกันกับอินสแตนซ์ A เพื่อให้สามารถเชื่อมต่อกับไดรฟ์ข้อมูล EBS ได้ หากคุณยังไม่มีอินสแตนซ์ที่ทำงานอยู่ให้เริ่มการทำงานชั่วคราว
instance_b=i-YYYYYYYY
หยุดการทำงานของอินสแตนซ์ที่ใช้งานไม่ได้ A (รอให้การหยุดทำงานเสร็จสมบูรณ์) ถอดโวลุ่ม EBS หลักออกจากอินสแตนซ์ (รอให้ถอดออก) จากนั้นแนบโวลุ่มไปที่อินสแตนซ์ B บนอุปกรณ์ที่ไม่ได้ใช้
ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume
ssh กับอินสแตนซ์ B และเมานต์โวลุ่มเพื่อให้คุณสามารถเข้าถึงระบบไฟล์ได้
ssh ...instance b...
sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a
ซ่อมมัน
ณ จุดนี้ระบบไฟล์รูททั้งหมดของคุณจากอินสแตนซ์ A พร้อมใช้งานสำหรับการดูและแก้ไขภายใต้ / vol-a บนอินสแตนซ์ B ตัวอย่างเช่นคุณอาจต้องการ:
- วางคีย์ ssh ที่ถูกต้องใน /vol-a/home/ubuntu/.ssh/authorized_keys
- แก้ไขและแก้ไข / vol-a / etc / sudoers
- ค้นหาข้อความแสดงข้อผิดพลาดใน / vol-a / var / log / syslog
- คัดลอกไฟล์สำคัญออกจาก / vol-a / ...
หมายเหตุ: uids ของทั้งสองอินสแตนซ์อาจไม่เหมือนกันดังนั้นโปรดระวังหากคุณกำลังสร้างแก้ไขหรือคัดลอกไฟล์ที่เป็นของผู้ใช้ที่ไม่ใช่รูท ตัวอย่างเช่นผู้ใช้ mysql ของคุณบนอินสแตนซ์ A อาจมี UID เหมือนกับผู้ใช้ postfix ของคุณบนอินสแตนซ์ B ซึ่งอาจทำให้เกิดปัญหาหากคุณ chown ไฟล์ด้วยชื่อเดียวแล้วย้ายระดับเสียงกลับไปที่ A
สรุป
หลังจากเสร็จสิ้นและคุณพอใจกับไฟล์ภายใต้ / vol-a แล้วให้ unmount ระบบไฟล์ (ยังอยู่ใน instance-B):
sudo umount /vol-a
sudo rmdir /vol-a
ตอนนี้กลับมาที่ระบบของคุณด้วย ec2-api-tools แล้วย้ายวอลุ่ม EBS กลับไปที่เดิมบนอินสแตนซ์ดั้งเดิม A และเริ่มต้นอินสแตนซ์อีกครั้ง:
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a
หวังว่าคุณจะแก้ไขปัญหาอินสแตนซ์ A เกิดขึ้นได้ดีและคุณสามารถทำสิ่งที่คุณตั้งใจไว้ให้สำเร็จได้ หากไม่เป็นเช่นนั้นคุณอาจต้องทำขั้นตอนเหล่านี้ซ้ำจนกว่าคุณจะใช้งานได้
หมายเหตุ: หากคุณมีที่อยู่ IP แบบยืดหยุ่นให้กับอินสแตนซ์ A เมื่อคุณหยุดมันคุณจะต้องเชื่อมโยงใหม่อีกครั้งหลังจากเริ่มต้นขึ้นอีกครั้ง
จำไว้! หากอินสแตนซ์ B ของคุณเริ่มต้นชั่วคราวสำหรับกระบวนการนี้อย่าลืมยกเลิกตอนนี้
ssh-add
ควรทำสิ่งที่คุณต้องการ