Việc xóa các tệp mất quá nhiều thời gian


11

Phiên bản ngắn : rm -rf mydir, với mydir(đệ quy) chứa 2,5 triệu tệp, mất khoảng 12 giờ trên một máy chủ yếu.

Thông tin thêm : Hầu hết các tệp bị xóa là các liên kết cứng đến các tệp trong các thư mục khác (thư mục bị xóa thực sự là bản sao lưu cũ nhất được tạo bởi rsnapshot; rmlệnh thực sự được đưa ra bởi rsnapshot). Vì vậy, phần lớn các mục trong thư mục đang bị xóa - nội dung tệp không nhiều; nó theo thứ tự vài chục GB.

Tôi không chắc chắn đó btrfslà thủ phạm. Tôi nhớ lại sao lưu cũng rất chậm trước khi tôi bắt đầu sử dụng btrfs, nhưng tôi không chắc chắn rằng sự chậm chạp đang trong quá trình xóa.

Máy là Intel Core i5 2.67 GHz với RAM 4 GB. Nó có hai đĩa SATA: một có hệ điều hành và một số thứ khác, và đĩa sao lưu là 1 TB WDC WD1002FAEX-00Z3A0. Bo mạch chủ là Asus P7P55D.

Chỉnh sửa : Máy là một bản wheezy Debian với Linux 3.16.3-2~bpo70+1. Đây là cách hệ thống tập tin được gắn kết:

root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)

Chỉnh sửa : Sử dụng rsync -a --delete /some/empty/dir mydirmất khoảng 6 giờ. Một sự cải thiện đáng kể so với rm -rf, nhưng tôi vẫn còn quá nhiều. ( Giải thích lý do tại sao rsyncnhanh hơnrm : "[M] hệ thống tập tin Ost lưu trữ cấu trúc thư mục của họ ở định dạng btree, thứ tự [in] mà bạn xóa tệp là ... quan trọng. Người ta cần tránh cân bằng lại btree khi bạn thực hiện hủy liên kết .... rsync -a --delete... không xóa theo thứ tự ")

Chỉnh sửa : Tôi đã đính kèm một đĩa khác có 2,2 triệu tệp (đệ quy) trong một thư mục, nhưng trên XFS. Dưới đây là một số kết quả so sánh:

                  On the XFS disk      On the BTRFS disk
Cached reads[1]       10 GB/s               10 GB/s
Buffered reads[1]     80 MB/s              115 MB/s
Walk tree[2]         11 minutes            43 minutes
rm -rf mydir[3]       7 minutes            12 hours

[1] Với hdparm -T /dev/sdXhdparm -t /dev/sdX.
[2] Thời gian thực hiện để chạy find mydir -print|wc -lngay sau khi khởi động.
[3] Trên đĩa XFS, điều này xảy ra ngay sau khi đi trên cây find. Trên đĩa BTRFS, đây là phép đo cũ (và tôi không nghĩ rằng đó là với cây được lưu trong bộ nhớ cache).

Nó dường như là một vấn đề với btrfs.


1
2,5 triệu tệp trong một thư mục? Tôi không biết hệ thống tập tin xử lý việc này tốt.
Michael Hampton

@MichaelHampton: Nó không bằng phẳng, nó chứa các thư mục lồng nhau. Tôi đã thêm từ "đệ quy" trong phần mô tả ngắn; Tôi hy vọng điều này làm rõ nó.
Antonis Christofides

1
Tại sao bạn sử dụng thủ thuật thư mục copy-on-write trên hệ thống tập tin copy-on-write?
symcbean 11/2/2015

@symcbean: Bạn có nghĩa là thủ thuật liên kết cứng là dư thừa btrfs? Điều này là có thể, tất nhiên, nhưng bạn có nghĩ rằng nó có thể có liên quan? Ngay bây giờ tôi không thể nhớ tại sao tôi quyết định thử btrfs.
Antonis Christofides

2
À, tôi nhớ rồi. Tôi quyết định chuyển sang btrfsvì tôi muốn nén trong suốt. Bây giờ: rsnapshotsử dụng các liên kết cứng. Nó không có bất kỳ tùy chọn để không sử dụng các liên kết cứng. Vì vậy, các liên kết cứng trùng lặp với btrfschức năng sao chép trên ghi, nhưng tôi không thể làm gì nhiều về điều đó.
Antonis Christofides

Câu trả lời:


3

Chà, đây vẫn là một vấn đề Btrfs, điều đó được biết rằng việc xóa nhiều tệp nhỏ sẽ mất khá nhiều thời gian so với các hệ thống tệp khác.

Nếu bạn không thích nó, bạn có thể đợi cho đến khi ngược dòng đã sửa nó hoặc chuyển sang hệ thống tệp khác để làm việc đó tốt hơn.

Lỗi chính của bạn là sử dụng kernel cổ (3.16, vâng, nó đã bị lỗi khi bạn đăng) với btrfs. Btrfs là một hệ thống tệp vẫn đang được phát triển mạnh, vì vậy bạn nên luôn luôn cập nhật phiên bản kernel mới nhất và tốt nhất để liên lạc với các cải tiến. Nếu bản phân phối của bạn không làm backport, bạn có thể tự làm điều đó hoặc bạn bị lừa.

Btrfs có nhiều cải tiến hiệu suất trong phiên bản kernel 3.19 - đây là phiên bản tối thiểu bạn nên sử dụng trong sản xuất, phiên bản kernel 3.16 của bạn hoàn toàn không có backport.

Ngoài ra, hãy nhớ rằng theo Chris Mason, anh ấy hiện đang xem Btrfs ổn định, nhưng chưa sẵn sàng sản xuất.


1
Làm thế nào để bạn xác định "nổi tiếng"? Tôi đã tìm kiếm trên mạng rất nhiều và vô ích, và không ai trong số những người tham gia cuộc thảo luận này biết về nó. Nhưng, dù sao đi nữa, bây giờ tôi chỉ cần tránh xa btrfs. Quá cường điệu trong khi sự phát triển của nó dường như sẽ mất mãi mãi.
Antonis Christofides

1
Vâng, ví dụ như những người từ CoreOS. Họ đã sử dụng khoảng Btrfs một năm làm hệ thống tệp mặc định cho đến đầu năm 2015 khi họ chuyển trở lại thành Ext4 + Overlayfs. Hãy nhớ rằng đây là trước phiên bản kernel 3.19, đã mang lại rất nhiều cải tiến cho Btrfs. Ngoài ra, hãy xem bản trình bày này vào tháng 10 năm 2015, xem phần ext4, xfs, zfs và btrfs về điều kiện tải công việc của cơ sở dữ liệu, cụ thể là Postgres: de.sl slideshoware.net/fuzzycz/. Một điểm chuẩn khác, mặc dù không phải là một nhân tốt: goo.gl/rR3kZ2
Marc Stürmer

Và như tôi đã nói, phiên bản kernel của hộp của bạn (3.16) được biết là bị ảnh hưởng bởi các vấn đề về hiệu suất, ít nhất là sử dụng 3.19 cho các công cụ Btrfs nghiêm trọng theo Chris Mason. Nếu bạn muốn sử dụng Btrfs một cách nghiêm túc, hãy luôn sử dụng hạt nhân mới nhất và lớn nhất - thứ gì đó không thực sự hoạt động tốt với Debian ... và cụm từ tìm kiếm "hiệu suất siêu dữ liệu btrfs".
Marc Stürmer

2

Tôi đến bữa tiệc này hơi muộn, nhưng đây là một mẹo để xóa rất nhanh những cây btrfs cực lớn:

  1. Tạo một subvolume giả trên cùng hệ thống tập tin btrfs.
  2. Di chuyển thư mục cấp cao nhất mà bạn muốn xóa vào subvolume đã nói - thao tác này sẽ thực sự nhanh chóng nếu bạn đang thực hiện trên cùng hệ thống tệp btrfs, thậm chí trên các subvolume.
  3. Phá hủy subvolume.

Hạt nhân sẽ bắt đầu lấy lại không gian trong nền, vì vậy bạn sẽ không có không gian có sẵn ngay lập tức, nhưng quá trình này sẽ nhanh hơn so với thực hiện bất kỳ loại xóa đất người dùng nào.


0

Bạn có thể đổi tên thư mục và sau đó xóa thư mục đã đổi tên trong một quá trình nền. Điều này sẽ không tăng tốc thao tác xóa. Tuy nhiên, điều này sẽ cho phép chương trình tiếp tục chuyển tiếp với một thư mục trống trong khi thao tác xóa đang diễn ra ở bên cạnh.

Tôi không chắc chắn nếu điều này sẽ làm việc trong trường hợp sử dụng của bạn. Nó phụ thuộc vào việc chương trình không thể tiếp tục cho đến khi đĩa không hoạt động (tức là nó sẽ thực hiện một số thao tác đĩa nặng). Nó phụ thuộc nếu chương trình sẽ lấp đầy đĩa với nhiều dữ liệ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.