Làm một rm -rf trên cây thư mục lớn phải mất hàng giờ


20

Chúng tôi đang sử dụng rsnapshot để sao lưu. Nó giữ rất nhiều ảnh chụp nhanh của tập tin sao lưu, nhưng nó xóa những cái cũ. Điều này là tốt Tuy nhiên, phải mất khoảng 7 giờ để thực hiện một rm -rfcây thư mục lớn. Hệ thống tập tin là XFS. Tôi không chắc có bao nhiêu tập tin ở đó, nhưng nó có thể lên tới hàng triệu.

Có cách nào để tăng tốc nó không? Có lệnh nào giống như rm -rfvà không mất nhiều giờ không?


1
Tôi đã sử dụng find . -delete -name directoryvà nó nhanh hơn nhiều rm -rf.
Paolo

Câu trả lời:


38

Không.

rm -rfthực hiện một giao dịch theo chiều sâu đệ quy đầu tiên của hệ thống tệp của bạn, gọi unlink()trên mọi tệp. Hai thao tác làm cho quá trình đi chậm là opendir()/ readdir()unlink(). opendir()readdir()phụ thuộc vào số lượng tệp trong thư mục. unlink()phụ thuộc vào kích thước của tập tin bị xóa. Cách duy nhất để thực hiện việc này nhanh hơn là giảm kích thước và số lượng tệp (mà tôi nghi ngờ là không có khả năng) hoặc thay đổi hệ thống tệp thành một với các đặc điểm tốt hơn cho các hoạt động đó. Tôi tin rằng XFS tốt cho unlink () trên tệp lớn, nhưng không tốt cho cấu trúc thư mục lớn. Bạn có thể thấy rằng ext3 + dirindex hoặc reiserfs nhanh hơn. Tôi không chắc giá vé của JFS tốt như thế nào, nhưng tôi chắc chắn có rất nhiều điểm chuẩn về hiệu suất hệ thống tệp khác nhau.

Chỉnh sửa: Có vẻ như XFS rất tệ trong việc xóa cây , vì vậy chắc chắn thay đổi hệ thống tệp của bạn.


1
Vài năm trước tôi nhận thấy hiệu suất khủng khiếp khi sử dụng reiserfs trong trường hợp sử dụng tương tự.
knweiss

1
Bài viết tuyệt vời!
wzzrd

2
Nó gần như chỉ nói "không" :)
David Pashley

2
Tôi đồng ý với mọi thứ ở đây ngoài tuyên bố của bạn rằng tốc độ hủy liên kết phụ thuộc vào kích thước của tệp. hủy liên kết chỉ xóa liên kết đến tệp và không làm gì với nội dung thực tế. Không nên có sự khác biệt rõ rệt giữa các tệp có kích thước khác nhau (bạn có thể tự kiểm tra điều này).
Kamil Kisiel

@KamilKisiel Bạn nói đúng unlinkkhông làm gì với nội dung thực tế ngoài việc thực hiện một unlinkcuộc gọi hệ thống, mã hệ thống tệp vẫn còn nhiều việc phải làm nếu liên kết bị xóa là liên kết cuối cùng với tệp và nếu nó hiện không mở. Điều này tất nhiên phụ thuộc vào hệ thống tệp nhưng sau đó có thể có một sự khác biệt rất rõ ràng khi tệp bị xóa là rất lớn.
jlliagre

22

Thay vào đó, hãy chuyển thư mục sang một bên, tạo lại nó với cùng tên, quyền và quyền sở hữu và khởi động lại bất kỳ ứng dụng / dịch vụ nào quan tâm đến thư mục đó.

Sau đó, bạn có thể "đẹp rm" thư mục gốc trong nền mà không phải lo lắng về việc mất điện kéo dài.


Điều đó có thể làm việc, vì một mv rất rất nhanh chóng.
Rory

Yup - nó hoạt động tốt. Tôi đã sử dụng kỹ thuật này nhiều lần để "sửa chữa" các hộp thư dựa trên maildir trong đó một ứng dụng email bị mất não và để lại một mớ hỗn độn trên đĩa. Thư mục lớn nhất (đơn) mà tôi đã sửa theo cách này có khoảng 1,5 hoặc 2 triệu tệp IIRC. Tổng thời gian chết cho người dùng cuối là ~ 3 phút, hầu hết trong số đó đang chờ ứng dụng thư khách và quá trình imap chết.
Greg làm việc

7

Đảm bảo rằng bạn có các tùy chọn gắn kết phù hợp được đặt cho XFS.

Sử dụng -ologbufs = 8, logbsize = 256k với XFS có thể sẽ nhân ba hiệu suất xóa của bạn.


2
+1 cho mẹo này ... Người ta cũng nên kích hoạt các bộ đếm lười biếng để tăng hiệu suất khác.
Hurikhan77

1
Một số giải thích về các cài đặt này sẽ hữu ích cho các độc giả trong tương lai.
Aron Rotteveel

5

Nếu bạn đang thực hiện rm ở mức hiệu quả ở cấp độ tệp thì sẽ mất nhiều thời gian. Đây là lý do tại sao ảnh chụp nhanh dựa trên khối rất tốt :).

Bạn có thể thử chia rm thành các khu vực riêng biệt và cố gắng thực hiện song song tuy nhiên tôi có thể không mong đợi nó sẽ cải thiện. XFS được biết là có vấn đề khi xóa các tệp và nếu đó là một phần lớn trong những gì bạn làm thì có lẽ một hệ thống tệp khác cho đó sẽ là một ý tưởng.


Ảnh chụp nhanh dựa trên khối không phải là duy nhất tốt trong trường hợp này. Một số hệ thống tệp --- WAFL và ZFS xuất hiện ngay lập tức --- cũng cung cấp hiệu suất tốt để xóa ảnh chụp nhanh. Họ coi snapshot như các đối tượng hệ thống tập tin lớp đầu tiên. Vì vậy, thay vì lặp (chậm) qua hàng triệu tệp để xác định khối nào miễn phí, họ chỉ phải xem danh sách khối được liên kết với ảnh chụp nhanh.
Keith Smith

Hừm. Tôi có lẽ đã đi ra như là quá trái ngược ở trên. Người đăng ban đầu phải sử dụng Linux và thực sự không có hệ thống tệp Linux được chứng minh tốt nào có ảnh chụp nhanh --- mặc dù btrfs và nilfs trông thú vị cho tương lai. Vì vậy, như một vấn đề thực tế, tôi đồng ý --- tốt hơn là sử dụng ảnh chụp nhanh dựa trên khối.
Keith Smith

+1 cho mẹo để phân chia và song song hóa khối lượng công việc: xfs phát sức mạnh của nó trên các khối lượng công việc song song.
Hurikhan77

5

Thật tốt khi sử dụng ionice cho các hoạt động chuyên sâu IO như thế bất kể hệ thống tập tin được sử dụng.
Tôi đề nghị lệnh này:

ionice -n7 đẹp rm -fr dir_name

Nó sẽ chơi độc đáo cho các hoạt động nền trên máy chủ với tải IO nặng.


2

Tôi biết điều này là cũ, nhưng tôi nghĩ id ném trong một đề nghị. Bạn đang xóa các tệp đó một cách tuần tự, thực hiện các thao tác rm song song có thể tăng tốc mọi thứ.

http://savannah.nongnu.org/projects/abul/ song song thường có thể được sử dụng thay cho xargs

vì vậy nếu bạn xóa tất cả các tập tin trong deltedir

find -t f deletedir | parallel -j 10 rm

Điều đó sẽ để lại cho bạn các cấu trúc thư mục trống để xóa.

Lưu ý: Bạn có thể vẫn gặp phải các giới hạn hệ thống tệp như đã lưu ý ở trên.


Lợi thế của việc sử dụng song song trên xargs là gì?
Rory

1

Liệu một lựa chọn thay thế ở đây có thể tách rời dữ liệu theo cách mà bạn có thể rác và xây dựng lại hệ thống tập tin thực tế thay vì thực hiện rm không?


3
Tôi nghĩ rsnapshot sử dụng các liên kết cứng như là một phần của tính năng duy trì hiệu quả nhiều ảnh chụp nhanh. Vì vậy, nếu người hỏi đang sử dụng tính năng đó bằng cách sử dụng các hệ thống tệp riêng biệt sẽ không hoạt động (vì bạn không thể liên kết cứng qua ranh giới hệ thống tệp)
David Spillett

0

Làm thế nào về việc giảm độ độc đáo của lệnh? Như:

nice -20 rm -rf /path/to/dir/

5
Nút thắt không phải là lịch trình, nó là hệ thống tập tin, tôi sẽ nói.
Manuel Faux

Trong trường hợp không chắc là bộ lập lịch là nút cổ chai, cuối cùng bạn sẽ chỉ đập hệ thống con I / O khó hơn, làm cho máy chủ thậm chí ít sử dụng hơn trong rm.
David Mackffy
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.