2009-03-17 48 views
175

Tôi có một ổ đĩa nơi việc sử dụng inode là 100% (sử dụng df -i lệnh). Tuy nhiên sau khi xóa các tệp đáng kể, mức sử dụng vẫn là 100%.Cách sử dụng Inode miễn phí?

cách chính xác để làm điều đó sau đó là gì?

Làm cách nào để một ổ đĩa có mức sử dụng dung lượng ổ đĩa ít hơn có thể sử dụng mức sử dụng Inode cao hơn ổ đĩa với dung lượng ổ đĩa cao hơn?

+4

Bạn muốn cung cấp cho bạn 50 điểm cho câu hỏi này. Làm thế nào tôi có thể làm được! :) – Sophy

+0

@Sophy Đừng làm vậy. bạn sẽ bị tự động cấm –

+1

@StevenLu Cảm ơn bạn đã thông tin! Tôi muốn tặng anh ấy vì tôi đã dành vài ngày để giải quyết vấn đề của mình. Nhưng vấn đề này có thể giúp tôi. Cảm ơn một lần nữa, – Sophy

Trả lời

122

Đó là khá dễ dàng cho một đĩa có một số lượng lớn các inodes sử dụng ngay cả nếu đĩa không phải là rất đầy đủ.

Một inode được cấp phát cho tệp, vì vậy nếu bạn có nhiều tệp, mỗi byte 1 byte, bạn sẽ hết thời lượng inodes trước khi hết đĩa.

Cũng có thể xóa tệp sẽ không làm giảm số lượng inode nếu các tệp có nhiều liên kết cứng. Như tôi đã nói, inodes thuộc về các tập tin, không entry thư mục. Nếu một tệp có hai mục nhập được liên kết với nó, việc xóa một tệp sẽ không giải phóng inode.

Ngoài ra, bạn có thể xóa mục nhập thư mục nhưng nếu quá trình đang chạy vẫn mở tệp, thì inode sẽ không được giải phóng.

Lời khuyên ban đầu của tôi là xóa tất cả các tệp mà bạn có thể, sau đó khởi động lại hộp để đảm bảo không còn quy trình nào giữ các tệp đang mở.

Nếu bạn làm điều đó và bạn vẫn gặp rắc rối và cho chúng tôi biết.

Bằng cách này, nếu bạn đang tìm kiếm các thư mục có chứa rất nhiều tác phẩm, kịch bản này có thể giúp:

#!/bin/bash 
# count_em - count files in all subdirectories under current directory. 
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$ 
chmod 700 /tmp/count_em_$$ 
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n 
rm -f /tmp/count_em_$$ 
+9

Tất nhiên, '>/tmp/count_em _ $$' sẽ chỉ hoạt động nếu bạn có không gian cho nó ... nếu đúng như vậy, hãy xem câu trả lời của @ simon. – alxndr

+1

@alxndr, đó là lý do tại sao bạn nên giữ riêng các hệ thống tệp của mình - theo cách đó, việc lấp đầy thứ gì đó như '/ tmp' sẽ không ảnh hưởng đến các hệ thống tệp khác của bạn. – paxdiablo

+0

Câu trả lời của bạn hoàn toàn phù hợp cho "hệ thống sẽ không sử dụng tệp sau khi khởi động lại nếu đã bị xóa". Nhưng câu hỏi đã được hỏi là "làm thế nào để đòi lại hoặc tái sử dụng các inode sau khi con trỏ inode bị xóa?". Về cơ bản hạt nhân Linux tạo một inode mới cho một tập tin bất cứ khi nào tạo ra, và cũng tự động không đòi lại inode bất cứ khi nào bạn xóa một tập tin. – Mohanraj

152

Nếu bạn đang rất may mắn bạn đã sử dụng khoảng 100% của tất cả các inodes và có thể không tạo scipt. Bạn có thể kiểm tra điều này với df -ih.

Sau đó lệnh bash này có thể giúp bạn:

sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n 

Và vâng, điều này sẽ mất thời gian, nhưng bạn có thể xác định vị trí thư mục với hầu hết các tập tin.

+0

Cảm ơn bạn rất nhiều! – Eby

+5

vấn đề của tôi là có một số lượng đáng kinh ngạc các phiên trong thư mục/lib/php/sessions.Có lẽ ai đó có cùng vấn đề – SteMa

+0

Parallels plesk sẽ không tải, ftp không thể mở phiên, hạn ngạch đĩa internet exceded (122) là một số vấn đề bạn sẽ nhận được khi bạn đạt đến số lượng inode tối đa (~ Files) nhà cung cấp dịch vụ của bạn đặt tối đa đến 20.000 mã (~ Files) ngay cả khi bạn có không gian UNLIMITED. – normeus

1

eaccelerator có thể gây ra sự cố vì nó biên dịch PHP thành các khối ... Tôi đã gặp sự cố này với máy chủ Amazon AWS trên trang web có tải nặng. Giải phóng các Inodes bằng cách xóa bộ đệm eaccelerator trong/var/cache/eaccelerator nếu bạn tiếp tục gặp sự cố.

rm -rf /var/cache/eaccelerator/* 

(hoặc bất cứ điều gì dir bộ nhớ cache)

1

Chúng tôi có kinh nghiệm này trên một tài khoản HostGator (người đặt giới hạn inode trên tất cả các lưu trữ của họ) sau một cuộc tấn công thư rác. Nó để lại một số lượng lớn các bản ghi xếp hàng trong /root/.cpanel/comet.Nếu điều này xảy ra và bạn thấy bạn không có inodes miễn phí, bạn có thể chạy tiện ích cpanel này thông qua shell:

/usr/local/cpanel/bin/purge_dead_comet_files 
33

Giải pháp của tôi:

Cố gắng tìm nếu điều này là một vấn đề inodes với:

df -ih 

Cố gắng tìm thư mục gốc với inodes lớn đếm:

for i in /*; do echo $i; find $i |wc -l; done 

Cố gắng tìm các thư mục cụ thể:

for i in /src/*; do echo $i; find $i |wc -l; done 

Nếu đây là tiêu đề linux, cố gắng loại bỏ lâu đời nhất với:

sudo apt-get autoremove linux-headers-3.13.0-24 

Cá nhân tôi di chuyển chúng vào một thư mục gắn (vì đối với tôi lệnh cuối cùng thất bại) và cài đặt mới nhất với:

sudo apt-get autoremove -f 

Điều này giải quyết được sự cố của tôi.

+0

Trong trường hợp của tôi là 'SpamAssasin-Temp'. 'find/var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f' đã làm công việc :) Cảm ơn! – joystick

+0

Đối với tôi, điều này đã diễn ra hàng giờ. Tuy nhiên, có một giải pháp đơn giản: Khi lệnh thứ hai treo trên một thư mục cụ thể, hãy hủy lệnh hiện tại và khởi động lại thay đổi/* thành bất kỳ thư mục nào mà nó đang treo trên đó. Tôi đã có thể đi sâu vào thủ phạm

47

Tình huống của tôi là tôi đã không có inode và tôi đã xóa mọi thứ tôi có thể.

$ df -i 
Filesystem  Inodes IUsed IFree IUse% Mounted on 
/dev/sda1  942080 507361  11 100%/

Tôi đang trên ubuntu 12.04LTS và không thể xóa hạt nhân cũ đã chiếm khoảng 400.000 inodes vì ​​apt bị hỏng do gói bị thiếu. Và tôi không thể cài đặt gói mới vì tôi đã không sử dụng inode nên tôi đã bị kẹt.

tôi đã kết thúc xóa một vài hạt nhân Linux cũ bằng tay để giải phóng khoảng 10.000 inodes

$ sudo rm -rf /usr/src/linux-headers-3.2.0-2* 

này là đủ để sau đó hãy để tôi cài đặt gói mất tích và sửa chữa của tôi apt

$ sudo apt-get install linux-headers-3.2.0-76-generic-pae 

và sau đó xóa phần còn lại của hạt nhân cũ với apt

$ sudo apt-get autoremove 

mọi thứ được đặt cược nhiều ter tại

$ df -i 
Filesystem  Inodes IUsed IFree IUse% Mounted on 
/dev/sda1  942080 507361 434719 54%/
+3

Đây là cách tiếp cận gần gũi nhất của tôi trong một tình huống tương tự. Cần lưu ý rằng cách tiếp cận thận trọng hơn cũng được ghi lại tại https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels – beldaz

+0

Trường hợp của tôi chính xác! Nhưng phải sử dụng "sudo apt-get autoremove -f" để tiến hành –

6

tôi đã cùng một vấn đề, cố định nó bằng cách loại bỏ các phiên họp của thư mục php

rm -rf /var/lib/php/sessions/ 

Nó có thể là dưới /var/lib/php5 nếu bạn đang sử dụng một phiên bản php cũ.

Tái nó với sự cho phép sau

mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/ 

phép theo mặc định cho thư mục trên Debian cho thấy drwx-wx-wt (1733)

+1

Bất kỳ ý tưởng nào tại sao điều này xảy ra? – Sibidharan

+1

@Sibidharan trong trường hợp của tôi là vì công việc cron PHP để xóa các phiên PHP cũ không hoạt động. – grim

1

Chúng tôi phải đối mặt với vấn đề tương tự gần đây, Trong trường hợp nếu một quá trình dùng để chỉ một tập tin đã xóa, các Inode sẽ không được phát hành, vì vậy bạn cần phải kiểm tra lsof /, và giết/khởi động lại quá trình sẽ phát hành các inodes.

Sửa lỗi nếu tôi nhầm ở đây.

1

Bạn có thể sử dụng rsync để DELETE số lượng lớn các file

rsync -a --delete blanktest/ test/ 

Tạo thư mục blanktest với 0 file trong đó và lệnh sẽ đồng bộ hóa thư mục thử nghiệm của bạn với số lượng lớn các tập tin (Tôi đã xóa gần các file 5M sử dụng phương pháp này).

Nhờ http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

1

Như đã nói trước đây, hệ thống tập tin có thể chạy ra khỏi inodes, nếu có rất nhiều các tập tin nhỏ. Tôi đã cung cấp một số phương tiện để tìm các thư mục chứa hầu hết các tệp here.

-2

thư mục Mail có thể được đầy đủ các tập tin:

/home/username/Maildir/mới

0

Nhiều câu trả lời cho cái này cho đến nay và tất cả những điều trên dường như bê tông. Tôi nghĩ rằng bạn sẽ được an toàn bằng cách sử dụng stat khi bạn đi cùng, nhưng hệ điều hành phụ thuộc, bạn có thể nhận được một số lỗi inode leo lên trên bạn. Vì vậy, việc triển khai chức năng gọi stat của riêng bạn bằng cách sử dụng 64bit để tránh mọi sự cố tràn có vẻ tương thích.

Các vấn đề liên quan