เนื้อที่ดิสก์ไม่เพียงพอ '/' ในอินสแตนซ์ของ AWS


28

ฉันกำลังใช้งานอินสแตนซ์ Ubuntu 11.04 สำหรับเว็บเซิร์ฟเวอร์ของฉันบนคลาวด์ AWS ตอนนี้ฉันได้รับไม่มีพื้นที่ดิสก์ใน/พาร์ติชันของเซิร์ฟเวอร์ของฉัน df -ahพูดอย่างนี้

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  7.8G   97M  99% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
fusectl                  0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  3.7G  112K  3.7G   1% /dev
none                     0     0     0   -  /dev/pts
none                  3.7G     0  3.7G   0% /dev/shm
none                  3.7G   80K  3.7G   1% /var/run
none                  3.7G     0  3.7G   0% /var/lock
/dev/xvdb             414G   16G  377G   4% /mnt

ตอนนี้ผมได้ลองสิ่งเหล่านี้สำหรับการรับบางพื้นที่พิเศษบน/พาร์ทิชัน

  • ทำความสะอาดไฟล์บันทึกทั้งหมดสำหรับ Apache
  • ลบไฟล์ที่ไม่จำเป็นทั้งหมดออกจากเซิร์ฟเวอร์
  • ล้างโฮมไดเรกทอรี

แต่ถึงกระนั้นฉันยังไม่ได้รับพื้นที่เพียงพอ ประเภทอินสแตนซ์นี้คือm1. largeพร้อม 8GB EBS ตอนนี้ฉันได้รับฉันมีพื้นที่ดิสก์เพียงพอใน/ dev / xvdb

มีวิธีที่ฉันสามารถจัดสรรพื้นที่บางส่วนเพื่อ/จาก/ dev / xvdbหรือวิธีอื่น ๆ กรุณาแนะนำให้ฉันแก้ปัญหาที่เป็นไปได้สำหรับมันเป็นไปได้ที่จะใช้พาร์ทิชัน/ dev / xvdb เดียวกันกับอินสแตนซ์อื่น


1
อัปเดตในปี 2560: อเมซอนอนุญาตให้ปรับขนาดไดรฟ์ของคุณ (แม้ในตอนบูต) ในทันที! ดูคำตอบ SO ของฉันที่นี่: stackoverflow.com/a/42791031/7022062
Dmitry Shevkoplyas

คำตอบ:


26

คำตอบคือสองเท่า

วิธีแก้ปัญหา: ใช้ / dev / xvdb (/ mnt) สำหรับข้อมูลชั่วคราว

นี่คือที่เก็บชั่วคราวที่เรียกว่าอินสแตนซ์Amazon EC2ของคุณและลักษณะของมันแตกต่างอย่างมากจากที่เก็บถาวรAmazon EBSถาวรที่ใช้งานที่อื่น โดยเฉพาะอย่างยิ่งนี้การจัดเก็บชั่วคราวจะหายไปเมื่อหยุด / เริ่มต้นรอบและโดยทั่วไปสามารถไปออกไปเพื่อให้คุณแน่นอนไม่ต้องการที่จะนำสิ่งที่มีมูลค่าที่ยั่งยืนนั่นคือใส่เพียงชั่วคราวมีข้อมูลที่คุณสามารถจะสูญเสียหรือสร้างได้อย่างง่ายดาย , เช่นไฟล์ swap หรือข้อมูลชั่วคราวที่ใช้ในระหว่างการคำนวณ แน่นอนคุณอาจเก็บดัชนีขนาดใหญ่ไว้ที่นั่น แต่ต้องเตรียมสร้างใหม่หลังจากที่หน่วยเก็บนั้นถูกล้างด้วยเหตุผลใดก็ตาม (เช่นรีบูตเครื่อง, ความล้มเหลวของฮาร์ดแวร์, ... )

การแก้ไข: ปรับขนาด / dev / xvda1 (/) เพื่อเพิ่มพื้นที่จัดเก็บที่ต้องการ

นี่คือรูทอุปกรณ์จัดเก็บข้อมูลของอินสแตนซ์ EC2 ที่สนับสนุนโดย Amazon EBSของคุณซึ่งอำนวยความสะดวกให้กับAmazon EBSสำหรับความยืดหยุ่นและความทนทานโดยเฉพาะอย่างยิ่งข้อมูลที่มีความปลอดภัยและรอดชีวิตมาได้ คุณสามารถเพิ่มความยืดหยุ่นและความทนทานยิ่งขึ้นด้วยการถ่ายภาพสแนปชอตปกติของปริมาณ EBS ของคุณซึ่งจัดเก็บไว้ในAmazon S3ซึ่งมีความทนทานที่รู้จักกันดี 99.999999999%

คุณสมบัติสแนปชอตนี้ช่วยให้คุณสามารถแก้ปัญหาของคุณได้ในทางกลับกันคุณสามารถแทนที่พื้นที่เก็บข้อมูลราก EBS 8GB ปัจจุบัน (/ dev / xvda1) ด้วยขนาดใหญ่กว่าหรือน้อยกว่าที่คุณต้องการ กระบวนการดังกล่าวระบุไว้ในบทความที่ยอดเยี่ยมของ Eric Hammond การปรับขนาดรูทดิสก์บน EBS Boot EC2 Instance ที่ทำงานอยู่ :

ตราบใดที่คุณสามารถตกลงกับอินสแตนซ์ EC2 เพียงเล็กน้อย (ไม่กี่นาที) ก็เป็นไปได้ที่จะเปลี่ยนวอลุ่ม EBS รูทด้วยสำเนาที่ใหญ่ขึ้นโดยไม่จำเป็นต้องเริ่มต้นอินสแตนซ์ใหม่

หากคุณเตรียมขั้นตอนอย่างถูกต้องเขาอธิบาย (ฉันขอแนะนำให้ทดสอบอินสแตนซ์ EC2 ที่ใช้แล้วทิ้งไปก่อนเพื่อทำความคุ้นเคยกับขั้นตอนหรือทำให้เป็นอัตโนมัติผ่านสคริปต์ที่ปรับให้เหมาะสม) คุณควรจะสามารถทำกระบวนการให้เสร็จ นาทีการหยุดทำงานเท่านั้นแน่นอน

ส่วนใหญ่ทำตามขั้นตอนที่ระบุไว้สามารถดำเนินการผ่านทางคอนโซลการจัดการ AWSเช่นกันซึ่งหลีกเลี่ยงการติดต่อกับเครื่องมือ Amazon EC2 API ; สิ่งนี้ทำให้เดือดลงไปที่:

  • หยุด (ไม่สิ้นสุด!) อินสแตนซ์ของ EC2
  • ถอดโวลุ่ม EBS ออกจากอินสแตนซ์ที่หยุดทำงาน
  • สร้างสแน็ปช็อตของโวลุ่ม EBS ที่ดึงออกมา
  • สร้างไดรฟ์ข้อมูล EBS ใหม่ (ใหญ่กว่า) จากสแน็ปช็อตที่สร้าง
  • แนบวอลุ่ม EBS ใหม่เข้ากับอินสแตนซ์ EC2 ( สำคัญ) ! หากนี่คืออุปกรณ์รูทของคุณต้องแน่ใจว่าตั้งชื่อตรงกับอุปกรณ์รูทของอินสแตนซ์ตามที่กล่าวถึงเช่น (/ dev / sda1) หรือ (/ dev / xdva1) มิฉะนั้นจะถูกแนบเป็นอุปกรณ์บล็อกไม่ใช่อุปกรณ์รูทและคุณจะไม่สามารถเริ่มต้นอินสแตนซ์เนื่องจากจะไม่มีอุปกรณ์รูทแสดงอยู่สำหรับอินสแตนซ์)
  • SSH เป็นอินสแตนซ์ที่กำลังทำงานอยู่และยืนยันว่าทุกอย่างอยู่ในการสั่งซื้อผ่าน df -ah
    • ในกรณีที่ระบบของคุณไม่ได้ปรับขนาดระบบไฟล์โดยอัตโนมัติคุณจะต้องดำเนินการด้วยตนเองตามที่อธิบายไว้ในบทความของ Eric

โชคดี!


ทางเลือก

ด้วยความสามารถรอบด้านและความสะดวกในการใช้งานไดรฟ์ข้อมูล EBS เหล่านี้ตัวเลือกเพิ่มเติมคือการแนบไดรฟ์ข้อมูล EBS เพิ่มเติมเข้ากับอินสแตนซ์ของคุณ

ตัวอย่างเช่นเรากำลังใช้แอพพลิเคชั่น Java รุ่นหนาสองตัวซึ่งแต่ละตัวใช้พื้นที่เก็บข้อมูล 1-2GB ต่อหนึ่งเวอร์ชัน เพื่อความสะดวกในรุ่นอัพเกรดและโดยทั่วไปจะสามารถย้ายแอพพลิเคเหล่านี้ไปยังอินสแตนซ์ที่แตกต่างกันขึ้นอยู่กับดุลยพินิจของฉันฉันวางไว้บนไดรฟ์ EBS เฉพาะแต่ละติดเหล่านี้เพื่อเป็นตัวอย่างและเชื่อมโยงนุ่มพวกเขาไปยังสถานที่ที่ต้องการเช่นมักและ/var/lib/<app>/<version>/usr/local/<app>/<version>

ด้วยวิธีการนี้เรากำลังเรียกใช้อินสแตนซ์ EC2 กับที่เก็บอุปกรณ์รูทที่ขนาดเริ่มต้นที่ 8GB (เหมือนของคุณ) แต่บางครั้งอาจถึง 8 EBS ไดรฟ์ที่มีขนาดแตกต่างกัน (1-15GB)

คุณจำเป็นต้องตระหนักถึงปัญหาประสิทธิภาพเครือข่ายที่อาจเกิดขึ้นแม้ว่าในปริมาณ EBS เหล่านี้ทั้งหมดจะใช้ LAN เดียวกันสำหรับ I / O ของพวกเขาซึ่งอาจให้ประสิทธิภาพที่เพิ่มขึ้นตามลำดับหรือทำให้เครือข่ายของคุณอิ่มตัวในกรณีที่รุนแรง ในกรณีการใช้งานและปริมาณงานที่อยู่ในมือ


ฉันใช้ / dev / xvdb เพื่อเก็บฐานข้อมูลของฉันซึ่งมีขนาดเกือบ 16GB ตอนนี้กระบวนการพื้นหลังหนึ่งทำงานเพื่อให้ทันสมัย ดังนั้นสิ่งที่ควรจะเป็นพื้นที่เก็บข้อมูลถาวรที่ดีที่สุดสำหรับฐานข้อมูลนี้ ฉันควรไปที่ Amazon RDS หรือ Amazon DynamoDB ข้อเสนอแนะของคุณคืออะไร ฉันใช้เซิร์ฟเวอร์ PHP ในอินสแตนซ์นี้
Sumant

2
@Sumant: ไม่ดีดังนั้นคุณทำสิ่งที่อันตรายคือการใส่ข้อมูลที่จะคงอยู่ในดิสก์ที่สามารถหายไปได้ทุกเวลา (โดยปกติจะไม่ใส่ใส่ควรปฏิบัติเช่นนั้น)? ฉันหวังว่าฉันไม่ได้ผึ้งทำให้เข้าใจผิดในเรื่องนี้ - โปรดระมัดระวังเป็นพิเศษเมื่อบรรเทานี้เพื่อที่จะหลีกเลี่ยงการสูญเสียข้อมูลในระหว่างกระบวนการ (คุณทำมีการสำรองฐานข้อมูลโดยไม่คำนึงถึงคุณ?)!
Steffen Opel

@Sumant: เกี่ยวกับคำถามของคุณ - คุณไม่จำเป็นต้องเปลี่ยนสถาปัตยกรรมแอปของคุณ (หรือ DB สำหรับเรื่องนั้น) เพื่อแก้ไขปัญหาการจัดเก็บเพียงแค่ปรับขนาดรูตดิสก์หรือแนบ EBS เพิ่มเติมตามที่แนะนำ อย่างไรก็ตามถ้าคุณต้องการที่จะปรับปรุงและแยกแยะ DB DB ระดับของคุณเช่นกันซึ่งเป็นสิ่งที่ดีในหลักการที่มีการเติบโตในอนาคต (แต่มาพร้อมกับค่าใช้จ่ายที่เกี่ยวข้องตั้งแต่เริ่มต้น) และสมมติว่าคุณกำลังใช้งาน MySQL แล้ว Amazon RDS จะเป็นตัวเลือกที่สมบูรณ์แบบและสะดวกสบาย Amazon DynamoDB ต้องการสถาปัตยกรรมแอพใหม่ที่สมบูรณ์และใช้กับเคสการใช้งานเฉพาะเท่านั้น
Steffen Opel

1
@Sumant: โปรดทราบว่าการย้ายฐานข้อมูลของคุณไปยังอินสแตนซ์ m1.small RDS อาจแสดงผลการทำงานช้ากว่า MySQL ปัจจุบันของคุณบน EC2 ซึ่งกำลังเรียกใช้ m1 ขนาดใหญ่พร้อม CPU และ I / O ที่เกี่ยวข้อง - ไม่ว่าจะเป็นไปตามนี้หรือไม่ ขึ้นอยู่กับภาระงานฐานข้อมูลปัจจุบันของคุณ แน่นอนคุณสามารถใช้อินสแตนซ์ RDS ที่ใหญ่กว่าได้เช่นกันเพื่อแก้ไขปัญหานี้ แต่ค่าใช้จ่ายของคุณจะเพิ่มขึ้นตามไปด้วย
Steffen Opel

1

ใช่วิธีง่ายๆในการ fstab แล้วติดตั้งเพื่อพูด / var / www / html / files2 /

จากนั้น mkdir / var / www / html / files2 / เว็บไซต์จากนั้น ln -s -d / var / www / html / เว็บไซต์ / var / www / html / files2 / เว็บไซต์


ใช้ UUID เพื่อเมาท์พาร์ติชันโดยใช้คำสั่ง blkids และ fdisk พูดว่า '/ dev / vxds /' เพื่อสร้างพาร์ติชัน ใช้ผู้บัญชาการเที่ยงคืนเพื่อย้ายไฟล์ด้วย F6 จากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่งตรวจสอบให้แน่ใจว่าคุณเลือกโฟลเดอร์ที่ถูกต้องภายใต้ตำแหน่งเมานต์และแน่นอนว่าคุณจะต้อง 'mount -a' หลังจากเพิ่มไปยัง fstab
Daniel Chay

0

วันนี้ฉันเกิดปัญหาเดียวกันเมื่อคุณยกเลิกความตั้งใจ ec2 ใหม่โดยค่าเริ่มต้น EBS คือ 8GB คุณสามารถปรับเปลี่ยนขนาดของ EBS ที่แนบมาได้โดยไม่ต้องสร้างอินสแตนซ์ใหม่หรือถ่ายภาพหน้าจอหรือถอด EBS .. ต่อไปนี้เป็นสามขั้นตอนที่คุณสามารถทำตาม

  1. ปรับขนาด EBS
  2. ปรับขนาดพาร์ติชัน
  3. ปรับขนาดพาร์ติชั่นสำหรับขั้นตอนแรกไปที่คอนโซล AWS ของคุณแล้วคลิก EBS และเปลี่ยนขนาดที่ต้องการแล้วคลิกแก้ไข

สำหรับขั้นตอนที่เหลือโปรดปฏิบัติตามบทความนี้ หากคุณมีคำถามใด ๆ

ขอบคุณ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.