Nói với fs không gian trống từ các tập tin bị xóa NGAY BÂY GIỜ


73

Có cách nào để bảo kernel trả lại dung lượng đĩa trống không? Giống như viết cho một cái gì đó trong / Proc /? Sử dụng Ubuntu 11.10 với ext4.

Đây có lẽ là một chủ đề và rất lặp đi lặp lại. Sau khi nhấn 0 dấu cách chỉ nhận thấy khi trình soạn thảo của tôi không thể lưu các tệp mã nguồn mà tôi đã mở, điều kinh khủng của tôi bây giờ có kích thước 0 byte trong danh sách thư mục, tôi tiếp tục xóa một cuộc thảo luận.

Tôi đã xóa 100 MB tệp lớn cả từ người dùng và từ root và cũng thực hiện một số liên kết cứng.

Ngay trước khi tôi thực hiện apt-get cleancó hơn 900 MB trong / var / cache / apt / lưu trữ, bây giờ chỉ có 108KB:

# du
108 /var/cache/apt/archives

Một giờ sau vẫn không còn dung lượng trống và không thể lưu các tệp quý giá của tôi đã mở trong trình chỉnh sửa, nhưng hãy chú ý sự chênh lệch dưới đây:

# sync; df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4             13915072  13304004         0 100% /

Bất kỳ đề xuất? Tôi tắt một số dịch vụ / quy trình nhưng không biết cách kiểm tra ai có thể chủ động ăn dung lượng đĩa.

Thêm thông tin

# dumpe2fs  /dev/sda4
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              884736
Block count:              3534300
Reserved block count:     176715
Free blocks:              422679
Free inodes:              520239
First block:              0
Block size:               4096
Fragment size:            4096

4
Hệ thống tập tin giải phóng không gian ngay lập tức. Tuy nhiên, tính năng khối dành riêng gốc của ext [234] và cách kernel giữ các tệp mở được bảo lưu có thể làm xuất hiện không gian bị mất.
hhaamu

Nếu bạn có một số hệ thống tập tin (patitions), giải phóng không gian trong một sẽ không làm được điều gì tốt trong cái khác.
vonbrand

Tại sao tôi có thể lấp đầy phân vùng trước khi các khối 5Go "dành riêng" tự lấy lại?
Psddp

Câu trả lời:


117

Kiểm tra lsofxem có tệp nào được mở không. Không gian sẽ không được giải phóng cho đến khi chúng được đóng lại.

sudo /usr/sbin/lsof | grep deleted

sẽ cho bạn biết những tập tin đã xóa vẫn được giữ mở.


Tốt Chỉ cho tôi một số mysqldkhóa trong / tmp, nhưng nhiều cách apport-gtsử dụng các tệp đã tuyệt chủng trong / var / lib / apt / list / part / dường như đã được tích lũy. Vì vậy, tôi có thể killall apport-gtnhưng sẽ điều tra nó đầu tiên.
Marcos

1
Đánh dấu là câu trả lời gần nhất, mặc dù không bao giờ thực sự "trả lại" khoảng trống ngay sau khi đóng xử lý tệp / quy trình sử dụng chúng. Tìm kiếm các cách tiếp cận dựa trên kernel / Proc / fs khác.
Marcos

18
Bạn cũng có thể sử dụng lsof +L1(chọn các tệp đang mở đã được hủy liên kết).
Martin Fido

Thông tin trong câu trả lời này là chính xác, nhưng vấn đề mà OP gặp phải có thể không phải do nguyên nhân này mà là do không gian dành riêng gốc (mà một câu trả lời khác giải quyết).
marcelm

37

Sử dụng lsofđể tìm tệp đã xóa, nhưng mở, vẫn tiêu tốn dung lượng:

lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome     3446       user  128u      REG              253,2              16400       2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)  

Tìm mục trong /proc/<pid>/fd/cooresponds vào filehandle:

ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

Bây giờ, chỉ cần cat /dev/nullvào fd:

cat /dev/null > /proc/3446/fd/128

Lưu ý rằng inode vẫn mở, nhưng bây giờ là 0 chiều dài

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

5
Sử dụng thừa catđể cắt ngắn. Trong vỏ Bourne, chỉ cần > /proc/3446/fd/128làm.
200_success

2
KHÔNG làm điều này nếu chương trình của bạn thực sự được dự kiến ​​sẽ đọc lại bất kỳ phần nào của tệp trong tương lai có thể có hoặc không có sẵn trong bộ đệm của trang.
Michael R. Hines

13

dfsẽ không hiển thị không gian dành riêng cho root(ngay cả khi chạy dưới dạng root):

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

Cách thay đổi "phần trăm khối dành riêng"

  1. Giảm dung lượng dành riêng xuống 4%

    # tune2fs -m4 /dev/sda4

df -h hiện đã hiển thị 45M miễn phí.

  1. Lưu tập tin của tôi một cách nhanh chóng
  2. Đặt nó trở lại 5%

    # tune2fs -m5 /dev/sda4


2
Không gian dành riêng cho root ngày nay hầu như luôn luôn quá lớn. Bạn có thể giảm nó xuống một vài phần trăm. dfhiển thị không gian sử dụng bình thường cho người dùng. Vì apt chạy dưới quyền root, không gian dành riêng chỉ hữu ích để bảo vệ chống lại sự lấp đầy gây ra bởi người dùng không phải root (= người dùng bình thường và dịch vụ có người dùng riêng).
jofel

Tôi đồng ý; một mkfstrong những ngày nên dành riêng ví dụ. 5% hoặc 300MB, cái nào ít hơn . Chỉ cần điều chỉnh lại một số máy chủ của tôi thành 2% và giải phóng GB trở lại!
Marcos

3
@jofel, không, không phải vậy. Bất cứ khi nào bạn sử dụng hơn 90%, bạn bắt đầu nhận được nhiều phân mảnh. Bạn cần giải phóng thêm một số không gian, không chạy gần hơn với việc sử dụng 100%.
psusi

@psusi Bạn nói thật, cảm ơn vì nhận xét của bạn. Nhưng cơ hội sử dụng (tạm thời) gần như tất cả không gian có sẵn như người dùng bình thường có thể thực sự thiết thực và với ext4, mọi thứ không còn tệ nữa, xem unix.stackexchange.com/a/7965/15241
jofel

7

Trong Ubuntu, nếu bạn xóa các tệp bằng thùng rác, các tệp của bạn nhiều khả năng sẽ không bị xóa hoàn toàn.

Ngay cả sau khi dọn sạch thùng rác, các tệp của bạn vẫn tồn tại ~/.local/share/Trash/expungedcho đến sau khi khởi động lại và thậm chí có thể lâu hơn.

Tôi đã không tìm thấy một lý do tốt cho việc này, nhưng nếu tôi hết dung lượng, tôi luôn luôn thủ công rmcác tệp rác đã hết hạn.


1
Điểm tốt. Mặc dù tôi là một trong những người sống và chết bởi dòng lệnh và hiếm khi sử dụng trình quản lý tệp đồ họa. Chưa nhận thấy rằng thư mục đã hết hạn là nơi ẩn nấp - một lần nhấp vào Thùng rác luôn luôn là cuối cùng và trả lại dung lượng đĩa của tôi khi cần.
Marcos

6
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done

Giải thích: Đầu ra
Grep lsofđể giải nén chỉ các tập tin bị xóa. Sed trích xuất id quá trình và id filedescriptor từ mỗi dòng và tạo một chuỗi ở định dạng {pid}/fd/{fid}. Trong khi lặp và xuất không có gì cho mỗi tệp, đặt chúng thành trống.


3
Tôi đã gặp lỗi "cú pháp lỗi gần mã thông báo bất
ngờ`

5

Tôi tự hỏi liệu synccó bất kỳ trợ giúp nào ở đây không - nhưng không nên, vì IIRC trong hầu hết các hệ thống ("nhiều"?), Các hệ thống tệp được đồng bộ hóa mỗi 30 giây.

Tôi sẽ kiểm tra nhật ký kernel (vì vậy dmesg) để tìm xem có bất cứ điều gì khó chịu đang xảy ra hay không và lsofxem liệu có bất kỳ tệp lớn, đã xóa nào vẫn mở không (thực ra, tôi nghĩ rằng các tệp bị xóa sẽ được đánh dấu như vậy trong lsofđầu ra).

Hai lý do (một trong những lý do này được nêu trong câu hỏi bạn liên kết) có thể khiến các tệp bị xóa không giải phóng được dung lượng

  • các tệp không thực sự bị xóa: bạn đã xóa một tệp được liên kết cứng ở một nơi khác (chính xác hơn là bạn đã chỉnh sửa unlink()một tệp có nhiều hơn một liên kết)
  • các tệp vẫn đang mở: các tệp đang mở được sử dụng, tốt, các tệp, tự inodes , không phải các mục nhập thư mục, nếu bạn xóa mục nhập, inode sẽ vẫn ở đó miễn là nó vẫn mở.

Nhưng tôi không biết lý do cụ thể tại sao điều đó có thể xảy ra với rất nhiều tệp ...


synckhông bao giờ giúp đỡ Đối với nhật ký, đó là một hệ thống Ubuntu nên nó khá lỗi, vì vậy, vâng, chúng thường ồn ào. apportđã được triển khai thường xuyên vì mỗi lần cập nhật apt-get hàng đêm, mặc dù / var / crash chỉ có 77MB. Cũng nhận thấy atdđã tràn ngập / var / log / syslog với các dòng lặp lại như atd[8892]: File a0015c0152ab76 is in wrong format - abortingcó thể vì một số tệp trong / var / spool / cron / atspool đều có kích thước 0, tất nhiên làm cho vấn đề trở nên rõ ràng
Marcos

1

CentOS 6.3 cũng không phải là thứ không thực sự-đổ-rác-có thể-khi-bạn-rỗng-thùng-thùng. Tôi không thể tìm cách lấy lại không gian cho đến khi tôi vừa chạy rm -rf ~/.local/share/Trash/expunged/. Gây nhiều đau đầu.

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.