xóa tập tin nhưng dung lượng đĩa vẫn đầy


26

Xử lý hộp CentOS 5.6 cũ, không có thiết lập lvm, hệ thống tệp gốc của tôi đã đầy, tôi đã xóa nhiều tệp nhật ký và tệp ứng dụng cũ mà tôi không cần, có kích thước hơn 2 -5GB, tuy nhiên hệ thống của tôi vẫn báo cáo rằng đĩa đã đầy.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Bất cứ ý tưởng về những gì tôi nên cố gắng làm tiếp theo? không may khởi động lại hộp không phải là một lựa chọn tại thời điểm này.


1
Xin lỗi vì đã hỏi câu hỏi ngu ngốc, nhưng bạn có chắc rằng mình /.Trash/trống không? Bạn đã làm xong sudo rm -Rf ~/.Trash/*chưa
Art Gertner

Đây là một máy chủ, tôi chưa cài đặt xwindow, do đó tôi không có thư mục .trash trong tài khoản root của mình.
user1007727

Xấu của tôi, tôi giả sử /.Trash/ tồn tại trên tất cả các hệ thống giống như unix.
Art Gertner

ngoài ra, bạn có thể thử lệnh đồng bộ hóa ( linux.die.net/man/8/sync ) có thể tất cả các hoạt động của bạn vẫn được lưu trữ.
weberik

Câu trả lời:


38

Hai điều có thể xảy ra ở đây.

Đầu tiên , hệ thống tập tin của bạn đã dành một số không gian chỉ rootcó thể ghi vào, để quá trình hệ thống quan trọng không bị đổ khi người dùng bình thường hết dung lượng đĩa. Đó là lý do tại sao bạn thấy 124G của 130G được sử dụng, nhưng không có sẵn. Có lẽ các tệp bạn đã xóa đã sử dụng đến thời điểm này, nhưng không dưới ngưỡng cho người dùng bình thường.

Nếu đây là tình huống của bạn và bạn đang tuyệt vọng, bạn có thể thay đổi lượng không gian dành cho root. Để giảm xuống 1% (mặc định là 5%), lệnh của bạn sẽ là

# tune2fs -m 1 /dev/sda3

Thứ hai , hệ điều hành sẽ không giải phóng không gian đĩa cho các tệp đã xóa vẫn đang mở. Nếu bạn đã xóa (giả sử) một trong các tệp nhật ký của Apache, bạn sẽ cần khởi động lại Apache để giải phóng dung lượng.


1
vâng, thứ hai nên là đầu tiên!
mulya

Câu hỏi và câu trả lời này thêm thông tin superuser.com/questions/444269/ cấp .
luka5z

18

Nếu bạn xóa một tệp đang được sử dụng bởi một quy trình, bạn không còn có thể xem tệp theo ls. Quá trình vẫn đang ghi vào tệp đó cho đến khi bạn dừng quá trình.

Để xem các tệp đã xóa, chỉ cần chạy lsof|grep delete


1
Đây là vấn đề trong trường hợp của tôi. Cảm ơn bạn, thông tin rất hữu ích.
Dag Sondre Hansen

Câu trả lời liên quan: unix.stackexchange.com/questions/34140/ từ
icc97

10

2 cách khác để lấy đĩa là vấn đề đầy đủ :

1) ẩn dưới một điểm gắn kết: linux sẽ hiển thị một đĩa đầy đủ với các tệp "ẩn" dưới một điểm gắn kết. Nếu bạn có dữ liệu được ghi vào ổ đĩa và gắn một hệ thống tệp khác trên đó, linux sẽ ghi chú chính xác việc sử dụng đĩa ngay cả khi bạn không thể nhìn thấy các tệp dưới điểm gắn kết. Nếu bạn có nfs mount, hãy thử um chúng và tìm xem có thứ gì vô tình được ghi trong các thư mục đó trước mount không.

2) tệp bị hỏng: Thỉnh thoảng tôi thấy điều này trên windows chuyển tập tin linux qua SMB. Một tệp không đóng được bộ mô tả tệp và bạn kết thúc với một tệp rác 4GB.

Điều này có thể tẻ nhạt hơn để sửa chữa, bởi vì bạn cần tìm thư mục con mà tập tin đang ở, nhưng nó rất dễ sửa vì bản thân tệp có thể tháo rời dễ dàng. Tôi sử dụng dulệnh và thực hiện một danh sách các thư mục con gốc để tìm ra nơi không gian tệp đang được sử dụng.

cd /
du -sh ./* 

Số lượng thư mục cấp cao nhất thường bị giới hạn, vì vậy tôi đặt cờ có thể đọc được của con người-h để xem thư mục con nào là không gian.

Sau đó, bạn cd vào vấn đề con và lặp lại quá trình cho tất cả các mục trong đó. Để dễ dàng phát hiện ra các vật phẩm lớn, chúng tôi thay đổi du một chút và ghép nó với một loại.

cd /<suspiciously large dir>
du -s ./* | sort -n

tạo ra một đầu ra nhỏ nhất đến lớn nhất theo kích thước byte cho tất cả các tệp và thư mục

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

Khi bạn phát hiện ra tệp quá khổ, bạn thường có thể xóa nó.


Lời khuyên tuyệt vời! Tôi đã theo dõi các thư mục bên dưới / sử dụng du và tìm thấy một số hình ảnh hệ thống cực lớn trong SDK Android. Đã xóa chúng và mọi thứ trở lại bình thường :)
Học sinh

4

Bạn có thể tìm ra tập tin nào được mở bằng lsof. Nó có thể tạo ra rất nhiều đầu ra, vì vậy tôi đã giới hạn trong ví dụ dưới đây cho các dòng kết thúc bằng log:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...

1

Nếu một số tệp bị xóa nhưng vẫn được sử dụng bởi một số quy trình thì không gian đó sẽ không được giải phóng. Trong trường hợp này, hãy khởi động lại một quá trình đang sử dụng tệp hoặc vô hiệu hóa tệp. Nó luôn luôn thực hành tốt để null các tập tin như vậy thay vì xóa chúng. Để tìm các tập tin bị xóa nhưng vẫn được sử dụng bởi một số quy trình

#lsof +L1

nó sẽ cung cấp cho quá trình id và mô tả tập tin. Để null tập tin bị xóa bởi mô tả tập tin

#echo "" > /proc/$pid/fd/$fd 

1

Gõ lệnh

#lsof +L1

Mà sẽ hiển thị danh sách các tập tin giữ bộ nhớ với trích dẫn đã xóa.

Lưu ý pid (Id quy trình) của tệp

Giết quá trình

#kill <pid>

Bộ nhớ sẽ được giải phóng theo quy trình

Kiểm tra nó bằng lệnh

#df -h

0

Ngoài những gì đã được giải thích, vấn đề có thể là có một điểm gắn kết khác của thư mục tệp bị xóa trên một thiết bị đĩa đính kèm khác trên cùng một máy chủ. Kiểm tra các mount hiện tại và các mục fstab.


0

Vấn đề thực tế quan sát được trong tự nhiên:

Hãy chắc chắn rằng bạn đang xóa các tệp thực tế và không liên kết với các tệp. Điều này có thể là trường hợp cho các tập tin nhật ký đặc biệt.

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.