3 วิธียอดนิยมในการแก้ไขข้อผิดพลาด “No Space Left on Device” ใน Linux

ข้อผิดพลาดที่ไม่มีสาเหตุที่ชัดเจนเป็นปัญหาที่น่ารำคาญที่สุดที่ต้องจัดการ และ ถึงแม้ ลินุกซ์(Linux)มักจะมีความเฉพาะเจาะจงในข้อความแสดงข้อผิดพลาด แต่นี่เป็นหนึ่งในไม่กี่ครั้งที่มันจะหล่นลงมา

การได้รับ “ไม่มีข้อผิดพลาดอุปกรณ์เหลืออยู่” อธิบายได้น้อยมาก โดยเฉพาะอย่างยิ่งหากไดรฟ์ของคุณยังไม่เพียงพอ เหตุใดข้อความแสดงข้อผิดพลาดนี้จึงปรากฏขึ้น เหตุใดคุณจึงไม่สามารถสร้างไฟล์ใหม่ได้แม้ว่าจะมีเนื้อที่ว่างเพียงพอบนดิสก์ และที่สำคัญแก้ไขอย่างไร?

ลองหา

ฮาร์ดไดรฟ์ ของคุณมีพื้นที่เพียงพอจริง(Hard Drive Actually Have Enough Space)หรือ

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

มี คำสั่งระบบ Linux สอง คำสั่งสำหรับการรับข้อมูลเกี่ยวกับพื้นที่ดิสก์ - du และ df คำสั่ง du ประเมินการใช้พื้นที่ดิสก์ ในขณะที่คำสั่ง df วิเคราะห์พื้นที่ว่างบนดิสก์ การใช้สิ่งเหล่านี้ร่วมกับsudoจะทำให้คุณมีรายงานที่แม่นยำถึงจำนวนเนื้อที่ว่างบนดิสก์จริง

  1. เริ่มต้นด้วยคำสั่ง du เอาต์พุตอาจยาวและยุ่งยากในการดำเนินการ ดังนั้นเราจะใช้แฟล็ก -s และ -h -s สรุปผลลัพธ์ ในขณะที่ -h รับรองว่ามนุษย์สามารถอ่านได้ ดังนั้นให้ป้อนคำสั่ง sudo du -sh / where / ชี้ไปที่ไดเร็กทอรีฐาน

  1. อย่ากังวลกับข้อความที่ถูกปฏิเสธการอนุญาตทั้งหมด นั่นคือวิธีที่ข้อความจะสืบค้นผ่านไดเรกทอรีย่อยทั้งหมดของระบบ ขึ้นอยู่กับขนาดของไดรฟ์ คุณอาจต้องปล่อยให้ไดรฟ์ทำงานชั่วขณะหนึ่ง เนื่องจากต้องดำเนินการทุกอย่างซ้ำๆ

  1. เมื่อ du เสร็จสิ้นการสแกน มันจะแสดงรายการไดเร็กทอรีอย่างง่ายควบคู่ไปกับขนาดของไดเร็กทอรี ตัวอย่างเช่น นี่คือผลลัพธ์ของคำสั่ง du ที่ใช้กับไดเร็กทอรีทั่วไป

ตอนนี้เราจะใช้ df เพื่อดูว่ามีเนื้อที่ว่างเท่าใด คำสั่ง df ใช้งานได้ง่ายกว่ามาก เนื่องจากจะแสดงเฉพาะระบบไฟล์ที่เมาท์และสถิติการใช้งานเท่านั้น อีกครั้ง เราจะใช้แฟล็ก -h เพื่อให้เอาต์พุตที่มนุษย์อ่านได้

sudo df -h

แนวคิดคือการนับผลลัพธ์ของคำสั่ง du และ df ความคลาดเคลื่อนใด ๆ ชี้ไปที่พื้นที่ดิสก์ที่ไม่สามารถใช้งานได้โดยอิสระแม้จะไม่ได้ใช้โดยไฟล์หรือโฟลเดอร์ใด ๆ

เหตุใดLinux จึงแสดง(Does Linux Show) "ไม่มี ที่ ว่างเหลือ(Space Left)บนอุปกรณ์"

หากคุณเห็นข้อความแสดงข้อผิดพลาด "No Space Left on Device" แม้ว่าจะมีเนื้อที่ว่างเพียงพอบนดิสก์ของคุณ แต่ก็ไม่ใช่ฮาร์ดแวร์ที่มีข้อบกพร่อง การหาสาเหตุที่แท้จริงของข้อผิดพลาดอาจต้องใช้เวลาในการแก้ไขปัญหาเล็กน้อย

  • ไฟล์ที่ถูกลบล่าสุด: สาเหตุที่พบบ่อยที่สุดในการเห็นข้อผิดพลาดนี้คือไฟล์ที่ถูกลบล่าสุด บ่อยครั้งที่ไฟล์ถูกลบในขณะที่กระบวนการยังใช้งานอยู่ ทำให้พื้นที่สงวนไว้แม้ว่าไฟล์จะหายไปแล้ว
  • Inodes(Enough Inodes)ไม่ เพียงพอ : อีกสาเหตุที่พบบ่อยคือการมีinodes ไม่ เพียงพอ Inodes คือหน้าดัชนีของ ระบบไฟล์ Unixซึ่งเก็บข้อมูลเมตาของทุกไฟล์ในการจัดเก็บ อย่างไรก็ตาม inodes ไม่ได้จำกัด และ inodes หมดก่อนที่พื้นที่จัดเก็บจะทำให้คุณเกิดข้อผิดพลาด "No space left on device" ได้
  • ฮาร์ด(Hard) ไดรฟ์ ล้มเหลว: แน่นอนว่ามีความเป็นไปได้ที่ฮาร์ดไดรฟ์จะล้มเหลว และพื้นที่ว่างที่เห็นได้ชัดส่วนใหญ่จะถูกใช้โดยเซกเตอร์เสีย เนื่องจากระบบไม่สามารถเขียนไฟล์ใดๆ ไปยังตำแหน่งเหล่านี้ได้ จึงเกิดข้อผิดพลาดขึ้น

แก้ไข 1: เริ่มกระบวนการใหม่โดยใช้ไฟล์ที่ถูกลบ(Using Deleted Files)

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

  1. ในการค้นหากระบวนการที่มีปัญหา คุณต้องใช้คำสั่ง lsof และ grep คำสั่ง lsof จะแสดงรายการไฟล์ที่เปิดอยู่ทั้งหมดที่ใช้โดยกระบวนการที่รันอยู่ และ grep สามารถจำกัดการเลือกให้เหลือเฉพาะไฟล์ที่ถูกลบ ดังนั้นป้อน sudo lsof / | grep ถูกลบโดยที่ / คือไดเร็กทอรีฐานและ | ไพพ์สำหรับเชื่อมโยงเอาต์พุตของ lsof กับ grep

  1. ตอนนี้คุณสามารถรีสตาร์ทกระบวนการที่ได้รับผลกระทบด้วยคำสั่ง sudo systemctl restart service_name โดยที่ชื่อบริการคือชื่อของบริการที่ปรากฏในการค้นหา

  1. หากมีหลายกระบวนการเช่นนี้ หรือคุณไม่อยากยุ่งกับการค้นหาบริการเฉพาะ คุณสามารถรีเซ็ตทั้งหมดได้ด้วยคำสั่ง sudo systemctl daemon-reload สิ่งนี้จะสร้างการพึ่งพาทั้งหมดใหม่ โดยคำนึงถึงการเปลี่ยนแปลงใดๆ ในระบบไฟล์ด้วย

หลังจากนี้ พื้นที่เก็บข้อมูลที่ถูกเก็บไว้โดยกระบวนการควรจะพร้อมใช้งานอีกครั้ง ช่วยให้คุณสามารถเขียนไฟล์ได้โดยไม่เกิดข้อผิดพลาดใดๆ

แก้ไข 2: ตรวจสอบ Inodes

แม้ว่าแต่ละไดรฟ์จะมีไอโหนดจำนวนมาก แต่ก็มีขอบเขตจำกัด และหากระบบของคุณเต็มไปด้วยไฟล์จำนวนมากอย่างไม่น่าเชื่อ ก็เป็นไปได้ที่จะถึงขีดจำกัดนี้ก่อนที่จะหมดความจุของไดรฟ์ นี่คือเหตุผลที่ดีกว่าที่จะมีไฟล์ขนาดใหญ่มากกว่าไฟล์ขนาดเล็กมากเกินไป

คุณสามารถตรวจสอบความพร้อมใช้งานของ inodes ได้อย่างง่ายดายโดยใช้แฟล็ก -i ด้วยคำสั่ง df แบบนี้:

sudo df -i

สิ่งนี้จะบอกจำนวน inodes ทั้งหมดที่มีอยู่ในระบบไฟล์อย่างชัดเจนพร้อมกับจำนวนที่ใช้อยู่ในปัจจุบัน หากไม่มีไอโหนดว่างเหลืออยู่ในระบบของคุณ นี่เป็นสาเหตุของข้อผิดพลาด “No space left on device”

เนื่องจาก inodes ถูกสร้างขึ้นเมื่อทำการฟอร์แมตไดรฟ์ครั้งแรกเท่านั้น ไม่มีทางที่จะสร้าง inodes เพิ่มเติมได้ สิ่งที่คุณทำได้คือลบไฟล์ที่ไม่จำเป็นเพื่อเพิ่มไอโหนดสำหรับไฟล์ในอนาคต

แก้ไข 3: ทำเครื่องหมาย Bad Blocks

(Data)ความเสียหายของข้อมูล เป็นชะตากรรมที่หลีกเลี่ยงไม่ได้ของฮาร์ดไดรฟ์ใดๆ แม้ว่าไดรฟ์ใหม่จะไม่พบปัญหานี้ แต่ฮาร์ดดิสก์รุ่นเก่าจะค่อยๆ เริ่ม "แย่"

ซึ่งหมายความว่าบางส่วนของฮาร์ดไดรฟ์ไม่สามารถใช้งานได้ แม้ว่าระบบไฟล์จะยังถือว่าใช้งานได้ บล็อกที่ไม่ดีเหล่านี้ทำให้พื้นที่ว่างบนไดรฟ์ขยายตัวอย่างไม่ถูกต้อง โดยที่จริงแล้วไม่มีไฟล์ใดที่สามารถเขียนลงไปได้ สิ่งนี้นำไปสู่ข้อผิดพลาด "ไม่มีพื้นที่เหลือบนอุปกรณ์" เนื่องจากระบบปฏิบัติการพยายามและไม่สามารถจัดเก็บข้อมูลใด ๆ ในตำแหน่งเหล่านี้ได้

ไม่มีวิธีแก้ไขปัญหานี้อย่างแท้จริง เนื่องจากเซกเตอร์เสียเป็นผลมาจากการสึกหรอทางกายภาพของฮาร์ดไดรฟ์ สิ่งเดียวที่คุณทำได้คือทำเครื่องหมายเซกเตอร์เสียเพื่อไม่ให้ระบบไฟล์อ้างอิงอีกต่อไป

การทำเช่นนี้จะทำให้คุณต้องบูตจากLive CDเนื่องจากคุณไม่สามารถทำการตรวจสอบระบบไฟล์(File System Check)ภายในไดรฟ์ที่กำลังทำงานอยู่ เมื่อคุณทำเช่นนั้น เพียงใช้คำสั่งต่อไปนี้:

sudo fsck -vcck /dev/sda

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

วิธีที่ดีที่สุดในการแก้ไขข้อผิดพลาด "No Space Left on Device" คืออะไร?

สาเหตุปกติที่จะเห็นข้อผิดพลาด "ไม่มีพื้นที่เหลือบนอุปกรณ์" บนUbuntuหรือLinux distro อื่น ๆ คือไฟล์ที่ถูกลบซึ่งยังคงถูกใช้โดยกระบวนการที่ทำงานอยู่ นี่เป็นการสงวนพื้นที่เก็บข้อมูลที่ถูกครอบครองโดยไฟล์ ทำให้การดำเนินการอื่น ๆ ไม่สามารถเขียนข้อมูลลงในพื้นที่นั้นได้

การแก้ไขปัญหานี้ก็ง่ายเช่นกัน เนื่องจากสิ่งที่คุณต้องทำคือเริ่มกระบวนการที่เป็นปัญหาใหม่ อย่างไรก็ตาม สาเหตุอื่นๆ ของข้อผิดพลาดนั้นแก้ไขได้ไม่ง่ายนัก

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



About the author

ฉันเป็นผู้เชี่ยวชาญด้านคอมพิวเตอร์ที่มีประสบการณ์มากกว่า 10 ปี และฉันเชี่ยวชาญในการช่วยเหลือผู้คนในการจัดการคอมพิวเตอร์ในสำนักงาน ฉันได้เขียนบทความเกี่ยวกับหัวข้อต่างๆ เช่น วิธีเพิ่มประสิทธิภาพการเชื่อมต่ออินเทอร์เน็ต วิธีตั้งค่าคอมพิวเตอร์เพื่อประสบการณ์การเล่นเกมที่ดีที่สุด และอื่นๆ หากคุณกำลังมองหาความช่วยเหลือเกี่ยวกับงานหรือชีวิตส่วนตัวของคุณ เราคือคนสำหรับคุณ!



Related posts