Làm thế nào để tôi ngăn chặn mất không gian trống liên tục này?


15

Tôi đang chạy Ubuntu, như bình thường, đột nhiên tôi nhận được một hộp thoại cho biết tôi chỉ còn lại 1,2 GB dung lượng trống. Một giờ trước, tôi có 30 GB dung lượng trống.

Tôi đã xóa một số nội dung và mang dung lượng trống lên tới 25 GB. Nhưng nó vẫn tiếp tục giảm. Tôi đã thử loại bỏ các tệp nhật ký cũ và cắt bớt các tệp nhật ký, và nó tiếp tục giảm!

Tôi đã thử sử dụng Trình phân tích đĩa để tìm xem tất cả sự mất không gian miễn phí này đến từ đâu và điều đó không hiệu quả, vì nó cho thấy mọi thứ cần phải có. Tôi đã khởi động lại và cuối cùng Ubuntu đã kiểm tra đĩa bằng cách nào đó đã mang lại dung lượng trống lên tới 40 GB nhưng nó vẫn tiếp tục giảm khoảng 10 GB mỗi ngày. Tôi tiếp tục thử và tìm những cách mới để giải phóng không gian, nhưng nó giống như một quá trình tự động giảm dung lượng đĩa mà tôi không thể dừng lại.

Tôi không biết phải làm gì. Làm thế nào tôi có thể tìm ra nguyên nhân và ngăn không gian trống của tôi giảm?

Đây là đầu ra từ 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
Bạn có thể chỉnh sửa bài viết để nối thêm đầu ra sudo du -sh /var/* ~/.xsession-errorskhông? (hai nơi đó tôi dự kiến ​​sẽ nổ tung nếu có gì đó ngớ ngẩn). Mặt khác, tôi với Eliah - đây là dấu hiệu của các vấn đề về đĩa. Hãy nghiêm túc với điều này.
Oli

Câu trả lời:


26

Bạn đã có một số nhật ký ngoài tầm kiểm soát. Thay vì xóa như điên hàng ngày, hãy tìm tệp hoặc tệp đang phát triển nhanh và nhìn vào bên trong để điều tra những gì có thể gây ra điều này. Có thể một số chương trình đang quay trong một vòng lặp đăng nhập một số điều kiện. Hoặc vô hiệu hóa chương trình đó, vô hiệu hóa ghi nhật ký của nó hoặc cố gắng khắc phục tình trạng mà nó phàn nàn.

Nếu một tập tin đang phát triển trước mắt bạn và bạn không biết chương trình nào đang viết cho nó, bạn có thể dễ dàng tìm ra nó. Đây là một ví dụ. Ai đã /var/log/syslogmở? Chúng tôi sử dụng fuserlệnh:

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

Chỉ có một quá trình đã /var/log/syslogmở. Đó là quá trình 602. Đó là gì? Chúng ta đừng bận tâm với psgrep, nhưng nhìn vào /prochệ thống tập tin trực tiếp:

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

Aha, nó là vậy rsyslogd. Chúng tôi không ngạc nhiên rằng rsyslogdđã /var/log/syslog/mở.

Phương pháp này không được đảm bảo để làm việc. Lý do là các chương trình không phải giữ các tệp mở ino rder để ghi cho chúng. Giả sử bạn có một quy trình mở tệp, nối vào tệp đó và sau đó đóng tệp. Bạn sẽ có một cuộc điều tra có phần khó khăn hơn. Bạn có thể chạy fusernhiều lần cho đến khi tình cờ bạn bắt được quá trình "bàn giao". Quá trình đó tự nó có thể đi vào và ra khỏi sự tồn tại một cách nhanh chóng. Một vấn đề khác là nhiều quy trình có thể mở tệp, nhưng chỉ có một quy trình làm cho nó lớn hơn. Trong trường hợp đó, bạn có thể theo dõi các cuộc gọi hệ thống của họ.

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

Giáo sư! Hai quy trình đã mở: 1234 và 23459. Hãy xem họ đang làm gì:

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

Nó không làm gì cả, chỉ chặn trong một selectcuộc gọi. Ctrl-C để phá vỡ dấu vết:

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

Kiểm tra cái tiếp theo:

# 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

Rất tiếc, người ta đang viết liên tục. Nó phải là một trong những xấu. Chúng tôi thậm chí có thể kiểm tra xem bộ mô tả tệp 5 mà quá trình đang ghi có thực sự là tệp lớn không:

# 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

Tôi không nghi ngờ bạn có một hệ thống tập tin bị hỏng, nhưng để buộc kiểm tra đầy đủ, bạn không phải khởi động DVD.

Đầu tiên, xem lại cài đặt số lượng gắn kết tối đa của hệ thống tệp của bạn. Xác định phân vùng của bạn bằng lệnh df. Ví dụ về một hệ thống Ubuntu tôi có ở đây:

# 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

Bạn có thể thấy rằng /hệ thống tập tin được gắn kết trên /dev/sda1. Vì thế/dev/sda1 là thiết bị lưu trữ của phân vùng root (và các phân vùng duy nhất trong hệ thống đặc biệt này).

Hãy xem xét một số thuộc tính của hệ thống tập tin đó. Điều này là an toàn để làm mặc dù nó được gắn kết. Lệnh phun ra rất nhiều đầu ra. Đây là một đoạn trích:

$ 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 ... ]

Nhìn này, số lần gắn kết bằng với số lần gắn kết tối đa. Lần sau tôi khởi động lại, sẽ có một kiểm tra hệ thống tập tin. Điều quan trọng là số lượng gắn kết là một giá trị dương. Nếu giá trị của bạn bằng 0, hãy thay đổi nó thành một số giá trị dương như 22 bằng cách sử dụngtune2fs -c 22 /dev/whatever . Không có nghĩa là kiểm tra không bao giờ bị ép buộc bất kể bao nhiêu lần phân vùng được gắn kết. Hiếm khi hệ thống khởi động lại nên có giá trị thấp ở đây. Một máy chủ ngừng hoạt động mỗi năm một lần có thể có thể sử dụng fsck mỗi lần khởi động lại. Bạn cũng có thể đặt khoảng thời gian kiểm tra dựa trên ngày.

Bây giờ để buộc kiểm tra, bạn có thể ghi đè số lượng thực tế lớn hơn hoặc bằng mức tối đa, sau đó khởi động lại. Điều đó được thực hiện bằng vốn C: tune2fs -C 1234 /dev/whatever. Bây giờ phân vùng trông giống như nó đã được gắn 1234 lần mà không cần kiểm tra, lớn hơn mức tối đa một hoặc hai chữ số.


rất nhiều thông tin nhưng vấn đề đã được giải quyết, đó là tường lửa ghi các tệp nhật ký khổng lồ
Askcompu

2
Xem, như tôi nghi ngờ. Không có tham nhũng đĩa bí ẩn trôi nổi không gian lên xuống. Tôi có nghĩa là có thể giải thích một sự cố bị cô lập, nhưng một khi nó đã được sửa chữa, nó sẽ được sửa chữa. Và ổ đĩa bị lỗi, bạn sẽ gặp một số lỗi trong nhật ký kernel và sự hoảng loạn.
Kaz

vâng tôi đã tìm ra nó không phải là ổ đĩa, các thử nghiệm SMART cho biết đó là ổ đĩa cũ nhưng vẫn có thể hoạt động và hoạt động được
hỏi máy tính

Một cách dễ dàng hơn để fsck tất cả các hệ thống tập tin của bạn là chạy 'sudo touch / forcefsck; sudo / sbin / shutdown -r now '.
Blair Zajac

3

Một kiểm tra đĩa giải phóng một số không gian, cho thấy vấn đề này (hoặc một phần của nó) có thể là do tham nhũng hệ thống tập tin. Nếu đó là trường hợp, thì bạn sẽ có thể giải phóng thêm không gian bằng cách quét và sửa chữa hệ thống tập tin. Tuy nhiên, nếu tham nhũng xảy ra liên tục (có thể xảy ra hoặc không xảy ra), điều đó thường có nghĩa là ổ cứng đang chết. Nếu các bản sao lưu của bạn (tài liệu của bạn và bất kỳ tệp quan trọng nào khó thay thế) không hoàn toàn cập nhật, vui lòng sao lưu mọi thứ quan trọng ngay bây giờ!

Để kiểm tra và sửa chữa đĩa, nó không thể được gắn (ít nhất là không đọc-ghi). Vì vậy, bạn nên chạy tiện ích sửa chữa từ môi trường trực tiếp (CD / DVD hoặc USB trực tiếp). Trước tiên, bạn sẽ phải tìm ra tên thiết bị của phân vùng chứa các tệp của bạn.

Do đó, trong hệ thống đã cài đặt , hãy chạy:

mount | grep ' on / '

(Đảm bảo bao gồm khoảng trắng giữa /'.)

Bạn sẽ nhận được một cái gì đó như:

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

Văn bản trước - ontrong ví dụ từ máy của tôi, - /dev/sda8là tên thiết bị đầy đủ cho phân vùng gốc của bạn ( /). Viết nó xuống - bạn sẽ cần nó.

Sau đó khởi động máy tính của bạn từ ổ đĩa CD / DVD hoặc USB trên máy tính để bàn Ubuntu, giống như những gì bạn đã sử dụng để cài đặt Ubuntu ban đầu. (Nếu đây là hệ thống Wubi, được cài đặt với trình cài đặt Windows, vui lòng cho chúng tôi biết. Tôi không mong đợi rằng, với những gì bạn đã báo cáo, nhưng nếu đó là trường hợp, quy trình sẽ khác.)

Chọn Dùng thử Ubuntu mà không cần cài đặt (không Cài đặt Ubuntu ). Khi bạn nhận được một màn hình nền hoạt động, nhấn Ctrl+ Alt+ Tđể mở cửa sổ Terminal. Sau đó chạy lệnh này:

sudo e2fsck -fkccp /dev/sda8

Nhưng hãy đảm bảo thay thế /dev/sda8bằng tên thiết bị đầy đủ cho /phân vùng của bạn , như bạn đã có được thông qua phương pháp chi tiết ở trên.

Việc này có thể mất một lúc. Các ctùy chọn có trong lệnh đó khiến nó quét bề mặt đĩa để tìm lỗi cũng như hệ thống tập tin (và đánh dấu bất kỳ khu vực xấu nào là xấu để chúng không được sử dụng). Bạn có thể rời cckhỏi nếu bạn thích (nếu bạn làm thế, bạn cũng có thể bỏ đi k), nhưng tôi khuyên bạn nên giữ chúng trong đó.

Bạn có thể được nhắc về việc sửa một số vấn đề nhất định, nếu e2fscknghĩ rằng có khả năng đáng kể rằng cố gắng khắc phục chúng có thể gây mất dữ liệu. (Việc này pgiúp nó khắc phục mọi sự cố mà nó tự tin có thể khắc phục mà không gây ra biến chứng.)

Tôi khuyên bạn nên có khuynh hướng cho phép nó khắc phục bất cứ điều gì nó muốn, vì dù sao bạn cũng chỉ nên làm điều này sau khi chắc chắn rằng các bản sao lưu của bạn là hiện tại . Nếu bạn muốn nó thử các bản sửa lỗi nguy hiểm tiềm tàng mà không cần nhắc bạn, hãy thay thế pbằng y.

Sau đó, khởi động lại vào hệ thống Ubuntu của bạn và xem có giải phóng không gian không. Nếu không, hoặc nếu vấn đề vẫn tiếp tục, vui lòng bình luận và chỉnh sửa câu hỏi của bạn để cung cấp chi tiết.


Nếu tôi không có gì để sao lưu?
hỏi máy tính

1
@ user2045360 Ăn cắp, cướp bóc, mượn hoặc mua một số. Hoặc đẩy nó trực tuyến (Ubuntu One, Dropbox, Google Docs, S3, v.v.).
Oli

@ user2045360 Nó phụ thuộc vào số lượng và loại tệp quan trọng mà bạn có. Nếu chúng bao gồm 20 tài liệu văn phòng (hoặc thậm chí 100, nếu bạn kiên nhẫn), bạn có thể gửi email cho chính mình. Bạn cũng có thể sử dụng các dịch vụ lưu trữ đám mây, như Ubuntu One hoặc DropBox (hãy cẩn thận - nếu bạn thiết lập một cái gì đó để đồng bộ hóa và một tệp bị xóa hoặc thay đổi trên máy tính của bạn, sự thay đổi tương tự sẽ xảy ra trong đám mây). Mặt khác, nếu bạn là nhà làm phim và bạn có 300 gigabyte cảnh quay, thì lựa chọn duy nhất của bạn có lẽ là mua (hoặc, như Oli gợi ý, mượn) một số phương tiện lưu trữ, như ổ cứng gắn ngoài.
Eliah Kagan

Tôi không có tiền và không có ai để vay, mất khả năng mất dữ liệu với lệnh này là bao nhiêu?
hỏi máy tính

@ user2045360 Khả năng mất dữ liệu từ lệnh đó e2fscklà khá thấp, đặc biệt nếu bạn không nhấn ybất cứ điều gì cảnh báo bạn rằng bạn có thể mất dữ liệu. Nhưng chạy lệnh đó không phải là lý do tại sao bạn cần sao lưu dữ liệu của mình. Bạn cần sao lưu dữ liệu của mình vì tính chất nhanh chóng và liên tục của việc bạn rơi vào không gian trống cho thấy mạnh mẽ rằng ổ cứng của bạn có thể sắp hỏng hoàn toàn về mặt vật lý . Nếu điều đó xảy ra, bạn sẽ mất bất kỳ dữ liệu nào trên đó và gần như chắc chắn không thể khôi phục bất kỳ dữ liệu nào. Các cách khác để sao lưu bao gồm qua mạng sang máy khác hoặc CD / DVD.
Eliah Kagan

0

vấn đề này đã được giải quyết, đó là tường lửa ghi hàng tấn nhật ký và tập tin mã hóa tvmobili

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.