ฉันจะหยุดการสูญเสียพื้นที่ว่างคงที่นี้ได้อย่างไร


15

ฉันใช้งาน Ubuntu ตามปกติเมื่อฉันได้รับกล่องโต้ตอบที่บอกว่าฉันเหลือพื้นที่ว่างเพียง 1.2 GB เท่านั้น หนึ่งชั่วโมงก่อนหน้านี้ฉันมีพื้นที่ว่าง 30 GB

ฉันลบบางสิ่งและนำพื้นที่ว่างสูงสุด 25 GB แต่มันยังคงลดลง ฉันพยายามลบไฟล์บันทึกเก่าและตัดทอนไฟล์บันทึกและมันลดลงเรื่อย ๆ !

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

ผมไม่ทราบว่าจะทำอย่างไร. ฉันจะหาสาเหตุและหยุดพื้นที่ว่างของฉันจากการลดลงได้อย่างไร

นี่คือผลลัพธ์จากsudo du -sh /var/* ~/.xsession-errors:

13M /var/backups
204M    /var/cache
112M    /var/crash
4.0K    /var/games
503M    /var/lib
4.0K    /var/local
0       /var/lock
9.5G    /var/log
85M     /var/mail
4.0K    /var/metrics
24K     /var/opt
0       /var/run
1.7M    /var/spool
391M    /var/tmp
11G     /var/tvmobili
20K     /var/www
224K    /home/school/.xsession-errors

2
คุณสามารถแก้ไขโพสต์เพื่อเพิ่มผลลัพธ์ของsudo du -sh /var/* ~/.xsession-errorsโปรดได้หรือไม่ (ทั้งสองที่ที่ฉันคาดว่าจะระเบิดขึ้นถ้ามีอะไรบางอย่างโง่) มิฉะนั้นฉันอยู่กับเอไลยาห์ - นี่คือสิ่งที่บ่งบอกถึงปัญหาของดิสก์ ทำสิ่งนี้อย่างจริงจัง
Oli

คำตอบ:


26

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

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

# fuser /var/log/syslog
/var/log/syslog:      602

มีเพียงกระบวนการเดียวเท่านั้นที่/var/log/syslogเปิด มันคือกระบวนการ 602 นั่นคืออะไร? อย่าให้เรารำคาญกับpsและgrepแต่ดูที่/procระบบไฟล์โดยตรง:

# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd

Aha rsyslogdมันเป็น เราไม่ได้ประหลาดใจที่rsyslogdมี/var/log/syslog/เปิด

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

# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file:   1234 23459

อ๊ะ! มีสองกระบวนการที่เปิดอยู่: 1234 และ 23459 ลองดูสิ่งที่พวกเขากำลังทำอยู่:

# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}

มันไม่ได้ทำอะไรเลยเพียงแค่บล็อกในการselectโทร Ctrl-C เพื่อแยกการติดตาม:

select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>

ตรวจสอบรายการถัดไป:

# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C

โอ๊ะโอผู้เขียนอย่างต่อเนื่อง มันจะต้องเป็นสิ่งที่ไม่ดี เราสามารถตรวจสอบว่าไฟล์ descriptor 5 ซึ่งกระบวนการกำลังเขียนอยู่นั้นจริง ๆ แล้วเป็นไฟล์ขนาดใหญ่:

# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr  3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file

ฉันไม่สงสัยว่าคุณมีระบบไฟล์ที่เสียหาย แต่หากต้องการตรวจสอบแบบเต็มคุณไม่จำเป็นต้องบูต DVD

ก่อนอื่นให้ตรวจสอบการตั้งค่าการนับจำนวนสูงสุดของระบบไฟล์ ระบุพาร์ติชันของคุณโดยใช้คำสั่ง df ตัวอย่างในระบบ Ubuntu ฉันมีที่นี่:

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       18062108 5499320  11645284  33% /
udev              392152       4    392148   1% /dev
tmpfs             159768     768    159000   1% /run
none                5120       0      5120   0% /run/lock
none              399416     200    399216   1% /run/shm
/dev/sr0           43668   43668         0 100% /media/VBOXADDITIONS_4.1.4_74291

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

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

$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
[ ... SNIP ... ]
Last mount time:          Fri Mar 29 17:45:18 2013
Last write time:          Tue Mar  5 09:08:03 2013
Mount count:              22
Maximum mount count:      22
[ ... SNIP ... ]

เฮ้ดูการนับเมาท์เท่ากับจำนวนการเมาท์สูงสุด ครั้งต่อไปที่ฉันรีบูตจะมีการตรวจสอบระบบไฟล์ สิ่งสำคัญคือการนับภูเขาเป็นค่าบวก ถ้าคุณเป็นศูนย์เปลี่ยนไปบางส่วนเช่นค่าบวก 22 tune2fs -c 22 /dev/whateverโดยใช้ ศูนย์หมายความว่าการตรวจสอบจะไม่ถูกบังคับไม่ว่าจะติดตั้งพาร์ติชั่นกี่ครั้งก็ตาม ระบบที่รีบูตแทบจะไม่ควรมีค่าต่ำที่นี่ เซิร์ฟเวอร์ที่ล้มลงปีละครั้งอาจใช้ fsck ทุกครั้งที่รีบูต คุณสามารถกำหนดช่วงเวลาการตรวจสอบตามวันที่ได้เช่นกัน

ตอนนี้เพื่อบังคับให้ตรวจสอบคุณสามารถแทนที่จำนวนจริงที่มากกว่าหรือเท่ากับจำนวนสูงสุดแล้วรีบูต ทำด้วยทุนC: tune2fs -C 1234 /dev/whatever. ตอนนี้พาร์ติชันดูเหมือนว่าจะถูกเมาท์ 1234 ครั้งโดยไม่มีการตรวจสอบซึ่งมากกว่าหนึ่งหรือสองหลักสูงสุด


ข้อมูลมาก แต่ปัญหาจะแก้ไขก็คือไฟร์วอลล์เขียนล็อกไฟล์ขนาดใหญ่
askcompu

2
ดูอย่างที่ฉันสงสัย ไม่มีความเสียหายดิสก์ลึกลับเฆี่ยนตีพื้นที่ขึ้นและลง ฉันหมายความว่าสามารถอธิบายเหตุการณ์ที่เกิดขึ้นได้ แต่เมื่อมีการซ่อมแซมแล้วควรได้รับการซ่อมแซม และไดรฟ์ล้มเหลวคุณคาดว่าจะมีข้อผิดพลาดบางอย่างในบันทึกเคอร์เนลและความตื่นตระหนก
Kaz

ใช่ฉันคิดว่ามันไม่ใช่ไดรฟ์การทดสอบสมาร์ทบอกว่ามันเป็นไดรฟ์เก่า แต่ก็ยังใช้งานได้และทำงานได้
askcompu

วิธีที่ง่ายกว่าในการ fsck ระบบไฟล์ทั้งหมดของคุณคือการเรียกใช้ 'sudo touch / forcefsck; sudo / sbin / shutdown -r ตอนนี้ '
Blair Zajac

3

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

ในการตรวจสอบและซ่อมแซมดิสก์ไม่สามารถติดตั้งได้ (อย่างน้อยไม่สามารถอ่าน - เขียนได้) ดังนั้นคุณควรเรียกใช้ยูทิลิตี้การซ่อมแซมจากสภาพแวดล้อมจริง (สด CD / DVD หรือ USB) ก่อนอื่นคุณจะต้องค้นหาชื่ออุปกรณ์ของพาร์ติชันที่มีไฟล์ของคุณ

ดังนั้นในระบบที่ติดตั้งให้รัน:

mount | grep ' on / '

(ตรวจสอบให้แน่ใจว่าได้รวมช่องว่างระหว่าง/และ'.)

คุณจะได้รับสิ่งที่ชอบ:

/dev/sda8 on / type ext4 (rw,errors=remount-ro)

ข้อความก่อนหน้าon- ในตัวอย่างจากเครื่องของฉัน/dev/sda8- เป็นชื่ออุปกรณ์แบบเต็มสำหรับพาร์ติชันรากของคุณ ( /) เขียนสิ่งนี้ลง - คุณจะต้องใช้

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

เลือกลอง Ubuntu โดยไม่ต้องติดตั้ง (ไม่ใช่ติดตั้ง Ubuntu ) เมื่อคุณได้เดสก์ท็อปที่ใช้งานได้ให้กดCtrl+ Alt+ Tเพื่อเปิดหน้าต่างเทอร์มินัล จากนั้นเรียกใช้คำสั่งนี้:

sudo e2fsck -fkccp /dev/sda8

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

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

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

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

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


จะทำอย่างไรถ้าฉันไม่มีข้อมูลสำรอง
askcompu

1
@ user2045360 ขโมยปล้นยืมหรือซื้อบางอย่าง หรือผลักดันออนไลน์ (Ubuntu One, Dropbox, Google เอกสาร, S3 และอื่น ๆ )
Oli

@ user2045360 ขึ้นอยู่กับจำนวนไฟล์สำคัญที่คุณมี หากเอกสารเหล่านี้ประกอบด้วยเอกสารออฟฟิศ 20 ฉบับ (หรือ 100 เอกสารถ้าคุณอดทน) คุณสามารถส่งอีเมลถึงตัวเองได้ คุณยังสามารถใช้บริการที่เก็บข้อมูลบนคลาวด์เช่น Ubuntu One หรือ DropBox (โปรดระวัง - หากคุณตั้งค่าบางอย่างที่จะซิงค์และไฟล์ถูกลบหรือเปลี่ยนแปลงในคอมพิวเตอร์ของคุณการเปลี่ยนแปลงเดียวกันจะเกิดขึ้นในระบบคลาวด์) ในทางกลับกันถ้าคุณเป็นผู้สร้างภาพยนตร์และคุณมีวิดีโอ 300 กิกะไบต์แล้วตัวเลือกเดียวของคุณอาจจะซื้อ (หรืออย่างที่ Oli แนะนำให้ยืม) สื่อเก็บข้อมูลบางอย่างเช่นฮาร์ดไดรฟ์ภายนอก
Eliah Kagan

ฉันไม่มีเงินและไม่มีใครขอยืมจากความเป็นไปได้ของการสูญเสียข้อมูลด้วยคำสั่งนี้?
askcompu

@ user2045360 โอกาสในการสูญเสียข้อมูลจากe2fsckcommandd นั้นค่อนข้างต่ำโดยเฉพาะถ้าคุณไม่กดปุ่มyใด ๆ ที่เตือนคุณว่าคุณอาจสูญเสียข้อมูล แต่การรันคำสั่งนั้นไม่ใช่สาเหตุที่คุณต้องสำรองข้อมูล คุณจำเป็นต้องสำรองข้อมูลของคุณเพราะธรรมชาติได้อย่างรวดเร็วและต่อเนื่องของการลดลงของคุณในพื้นที่ว่างอย่างยิ่งแสดงให้เห็นว่าฮาร์ดไดรฟ์ของคุณอาจจะเกี่ยวกับการทั้งหมดล้มเหลวทางร่างกาย หากเกิดขึ้นคุณจะสูญเสียข้อมูลใด ๆ และเกือบจะไม่สามารถกู้คืนได้ วิธีอื่น ๆ ในการสำรองข้อมูลรวมถึงผ่านเครือข่ายไปยังเครื่องอื่นหรือ CD / DVD
Eliah Kagan

0

ปัญหานี้ได้รับการแก้ไขมันเป็นไฟร์วอลล์ที่เขียนบันทึกจำนวนมากและไฟล์เข้ารหัส tvmobili

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