apt-get: ไม่มีพื้นที่เหลือบนอุปกรณ์ (12.04)


42

ฉันได้อ่านทุกหัวข้อที่ฉันสามารถหาได้ - แม้แต่คนที่บอกว่าได้รับคำตอบจากที่อื่น แต่ไม่มีใครตอบปัญหาเฉพาะที่ฉันมี Update Manager รันและสร้างข้อผิดพลาดที่เกี่ยวข้องกับการพึ่งพา unmet และแนะนำให้ใช้apt-get install -fซึ่งล้มเหลวด้วยข้อความนี้:

Unpacking linux-headers-3.5.0-36 (from .../linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h.dpkg-new' (while processing `./usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h'): No space left on device

ฉันสงสัยว่าคำ 5 คำสุดท้ายไม่มีพื้นที่เหลือบนอุปกรณ์มีความสำคัญ แต่ df และ du ทั้งคู่แสดงพื้นที่เพียงพอ ดังนั้นฉันสงสัยว่าอุปกรณ์ใดต้องการพื้นที่เพิ่มขึ้น?

Ouput จาก df -h

Filesystem 
Size Used Avail Use% 
Mounted on /dev/sda1 5.5G 4.4G 786M 86% 
/ udev 996M 4.0K 996M 1% 
/dev tmpfs 402M 880K 401M 1% 
/run none 5.0M 0 5.0M 0% /run/lock none 1004M 156K 1004M 1% 
/run/shm /dev/sdb1 30G 1.4G 27G 5% 
/home /dev/sdc1 299G 31G 268G 11% /media/HD-PCTU2 

คุณมีที่ว่างบนพาร์ติชั่นรูทหรือไม่?
don.joey

1
โปรดวาง (i) การส่งออกของdf -hและ (ii) mountการส่งออกของ dpkg จะล้างไฟล์หลังจากที่ทำงานเสร็จแล้วดังนั้นจึงอาจปรากฏว่าคุณมีพื้นที่เพียงพอในความเป็นจริงที่คุณไม่ได้ พิจารณาใช้apt-get cleanก่อนที่คุณจะเริ่ม dpkg
มกราคม

1
เพื่อตรวจสอบทำwatch -n 1 df -hใน terminal ในขณะที่ทำapt-get install(มันจะชะลอตัวลงเล็กน้อยคุณ i / o แต่คุณจะรู้ว่าระบบไฟล์ใดที่เล็กเกินไป)
Emmanuel

ปัญหาที่เกิดขึ้นกับ Ubuntu 14.04 และเคอร์เนลรุ่น 3.13.0.108 ในคอมพิวเตอร์หนึ่งเครื่องจากสามเครื่อง ฉันเริ่มด้วยaskubuntu.com/questions/223143/…แต่คำตอบที่แสดงอยู่ที่นี่อยู่ในบรรทัดเดียวกัน
XavierStuvw

คำตอบ:


48

ฉันเพิ่งพบปัญหาเดียวกันนี้ ฉันพบที่อื่นกล่าวถึง inodes และวิ่งเข้าไปใน terminal ของฉันเพื่อตรวจสอบการใช้ inode:

  df -i 

สิ่งนี้แสดงให้เห็นการใช้ inode ที่ 99% ดังนั้นในขณะที่ดิสก์ของฉันมีพื้นที่เหลืออยู่มากฉันไม่สามารถสร้างไฟล์เพิ่มเติมได้เนื่องจากข้อ จำกัด ด้านจำนวนของ inodes การล้างข้อมูลบนดิสก์บางอย่างเป็นการแก้ไขปัญหาของฉัน


6
ฉันมีปัญหาเดียวกันที่เกิดจากการปรับปรุงเคอร์เนลซึ่งไม่ได้ลบเมล็ดเก่าโดยอัตโนมัติ ส่วนหัวลินุกซ์ของการอัพเดทเคอร์เนลทุกครั้งใช้จำนวนไอโหนดจำนวนมาก! --- ของฉัน "ปลอดภัย" เป็นวิธีการแก้ปัญหาที่จะย้ายสองหัวเคอร์เนลไดเรกทอรีระบบแฟ้มที่แตกต่างกันcd /usr/src ; cp -a linux-headers-3.2.0-3{2,3}* /home/tmp-hdr ; rm -r linux-headers-3.2.0-3{2,3}*, apt-get-install -fเอาบางส่วนหัวอื่น ๆ วิธีการที่เหมาะสม: apt-get purge linux-headers-...ย้ายหัวจากด้านหลัง tmp cd /usr/src ; cp -a /home/tmp-hdr/* .นี้: ลบเมล็ดเก่าที่ใช้apt-get purgeมากขึ้น
pabouk

1
โปรดพิจารณาการเข้าร่วมรายงานข้อผิดพลาดที่มีกิจกรรมต่ำ: ข้อผิดพลาด # 1089195 ส่วนหัวของลินุกซ์จะกิน inodes ของคุณบน LTS , Bug # 690911 การติดตั้งที่ไม่มีการจัดรูปแบบล้มเหลวในการลบเมล็ดเก่า
pabouk

@pabouk ฉันสงสัยว่าถ้าคุณสามารถใช้dpkg --purge linux-headers-3.2.0-3{2,3}*; apt-get -f installเพื่อที่ไม่จำเป็นต้องคัดลอก?
jarno

@jarno มันใช้เวลานานมาก แต่ฉันคิดว่าคำสั่งทั้งหมดที่ใช้ฐานข้อมูล dpkg หรือ apt นั้นล้มเหลว ฉันคิดว่าเป็นเพราะการพึ่งพาที่ขาดและความไม่สอดคล้องอื่น ๆ ที่เกิดจากจำนวน inodes ไม่เพียงพอในระหว่างการอัปเกรดอัตโนมัติ
59

การล้างข้อมูลบนดิสก์ที่ต้องการสามารถทำได้โดยsudo linux-purge --fixเมื่อมีการเผยแพร่สคริปต์
jarno

37

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

dpkg -l linux-headers-\* linux-image-\* | grep ^ii

ลงในหน้าต่างเทอร์มินัล เมื่อฉันทำเช่นนี้ฉันจะได้รับ

ii  linux-headers-3.8.0-18                    3.8.0-18.28                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-18-generic            3.8.0-18.28                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-19                    3.8.0-19.30                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-19-generic            3.8.0-19.30                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-21                    3.8.0-21.32                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-21-generic            3.8.0-21.32                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-22                    3.8.0-22.33                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-22-generic            3.8.0-22.33                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-23                    3.8.0-23.34                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-23-generic            3.8.0-23.34                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-25                    3.8.0-25.37                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-25-generic            3.8.0-25.37                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-generic                     3.8.0.25.43                            amd64        Generic Linux kernel headers

เนื่องจากฉันมีจำนวนน้อยฉันจึงสามารถลบเก่าที่สุดด้วย

sudo apt-get remove linux-headers-3.8.0-18

หากapt-getล้มเหลวเนื่องจากพลาดการอ้างอิงแพคเกจบางอย่าง (ซึ่งคุณไม่สามารถติดตั้งได้เนื่องจากไม่มี inodes ฟรี) คุณสามารถเปลี่ยนเป็นdpkgโดยตรงได้:

sudo dpkg --remove linux-headers-3.8.0-18

ทำสองสามครั้งเพื่อที่เก่าแก่ที่สุดของคุณlinux-headers-*และคุณควรมีห้อง


4
นี่นำมาซึ่งปัญหาอื่น ๆ ทุกครั้งที่ฉันพยายามเรียกใช้ dpkg มันจะบอกฉันว่ามันมีการพึ่งพาที่ไม่แน่นอนแพคเกจต่อไปนี้มีการพึ่งพาแบบ unmet: linux-headers-3.5.0-36-generic: ขึ้นอยู่กับ: linux-headers-3.5.0-36 แต่ไม่ใช่ กำลังจะถูกติดตั้งและนั่นคือสิ่งที่จะไม่ติดตั้งเนื่องจากมีพื้นที่ไม่เพียงพอ
Don A

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

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

ไม่ใช่เลย . . . การแบ็คอัพเป็นความคิดที่ดีเสมอและคุณไม่ได้ยุ่งกับพาร์ติชั่นบูตมากนักเพียงแค่ถอนการติดตั้งแพ็กเกจบางอย่างด้วย apt-get มันควรจะเป็นเค้กชิ้นหนึ่ง ฉันเพิ่งแนะนำให้สำรองข้อมูลของคุณเพราะฉันมักจะแนะนำให้สำรองข้อมูลหากคุณมีปัญหา (หรือแม้ว่าคุณจะไม่ได้!) ฉันใช้คำสั่งเหล่านั้นในระบบของตัวเองเพื่อทดสอบพวกเขา linux-headers-3.8.0-18ผมใช้เวลาสามนาทีเพื่อลบ
Marc

1
หากมันล้มเหลวอีกครั้งให้sudo dpkg --remove linux-headers-3.8.0-18ลบsudo dpkg --remove linux-headers-3.8.0-18-genericและมันจะใช้ส่วนหัวอื่น
วิทยานิพนธ์

16

ฉันใช้sudo apt-get autoremoveและมันลบแพ็กเกจเคอร์เนลส่วนหัวเก่าจำนวนมาก ดีที่จะไปหลังจากนั้น


ในกรณีของฉันฉลาด - ปฏิเสธที่จะทำระบบตอบรับอัตโนมัติให้ความสำคัญกับความจริงที่ว่ามีแพคเกจเสียเพื่อสังคายนา แพ็คเกจที่ใช้งานไม่ได้ซึ่งเกิดจากความอิ่มตัวของไอโหนด ดูกระทู้ AskUbuntu นี้ด้วย
XavierStuvw

อย่างนี้ช่วยฉันหน่อย! หลังจากอัปเดตเซสชัน x ของฉันไม่เคยเข้ามาขอให้ลงชื่อเข้าใช้อีกครั้งและฉันไม่ได้รับข้อความใด ๆ เลย ฉันคิดว่าฉันต้องฟอร์แมต hd ของฉัน แต่เคล็ดลับของคุณเพิ่งช่วยฉัน :)
user5193682

1
ฮ่า ๆ ฉันไม่สามารถทำงานนี้เพราะผมมีไฟล์จำนวนมากเกินไป ...
ไบรอัน Leishman

2

เท่าที่ฉันรู้ว่าขีด จำกัด ของ inodes ในระบบไฟล์ส่วนขยาย Linux มีประมาณ 4 พันล้าน แต่ไม่น้อยซึ่งเป็นไฟล์จำนวนมาก ดังนั้นปัญหาของคุณคือสิ่งที่สร้างไฟล์จำนวนมาก ฉันสามารถเสนอให้คุณตรวจสอบสิ่งนี้ก่อน: http://blog.scoutapp.com/articles/2014/10/08/understanding-disk-inodes ดังนั้นคุณจะพบสิ่งที่เติม inodes ของ FS ของคุณ ฉันสามารถเสนอยังทำความสะอาดแคชฉลาด:

sudo apt-get clean

และ

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