Tại sao các hệ thống tệp XFS của tôi đột nhiên tiêu tốn nhiều dung lượng hơn và đầy các tệp thưa thớt?


62

Tôi đã chạy các hệ thống tệp XFS dưới dạng phân vùng dữ liệu / tăng trưởng trong gần 10 năm trên các máy chủ Linux khác nhau.

Tôi đã nhận thấy một hiện tượng lạ với các máy chủ CentOS / RHEL gần đây đang chạy phiên bản 6.2+.

Việc sử dụng hệ thống tập tin ổn định đã trở nên rất khác nhau sau khi chuyển sang phiên bản HĐH mới hơn từ EL6.0 và EL6.1. Các hệ thống ban đầu được cài đặt với EL6.2 + thể hiện hành vi tương tự; hiển thị các thay đổi lớn trong việc sử dụng đĩa trên các phân vùng XFS (Xem dòng màu xanh trong biểu đồ bên dưới).

Trước và sau. Việc nâng cấp từ 6.1 lên 6.2 xảy ra vào thứ bảy. đồ thị xfs

Biểu đồ sử dụng đĩa của quý trước của cùng một hệ thống, cho thấy sự biến động trong tuần qua. nhập mô tả hình ảnh ở đây

Tôi bắt đầu kiểm tra các hệ thống tập tin cho các tệp lớn và các quy trình chạy trốn (tệp nhật ký, có thể?). Tôi phát hiện ra rằng các tệp lớn nhất của tôi đã báo cáo các giá trị khác nhau từ duls. Chạy ducó và không có công --apparent-sizetắc minh họa sự khác biệt.

# du -skh SOD0005.TXT
29G     SOD0005.TXT

# du -skh --apparent-size SOD0005.TXT
21G     SOD0005.TXT

Kiểm tra nhanh bằng tiện ích ncdu trên toàn bộ hệ thống tệp mang lại:

Total disk usage: 436.8GiB  Apparent size: 365.2GiB  Items: 863258

Hệ thống tập tin chứa đầy các tệp thưa thớt , với gần 70 GB dung lượng bị mất so với phiên bản trước của HĐH / kernel!

Tôi đã xem qua Red Hat Bugzilla và thay đổi nhật ký để xem liệu có bất kỳ báo cáo nào về hành vi tương tự hoặc thông báo mới liên quan đến XFS không.

Nada.

Tôi đã chuyển từ phiên bản kernel 2.6.32-131.17.1.el6 sang 2.6.32-220.23.1.el6 trong quá trình nâng cấp; không thay đổi số phiên bản nhỏ.

Tôi đã kiểm tra phân mảnh tập tin với filefragcông cụ. Một số tệp lớn nhất trên phân vùng XFS có hàng ngàn phạm vi. Chạy trên phân mảnh trực tuyến xfs_fsr -vtrong thời gian hoạt động chậm đã giúp giảm mức sử dụng đĩa tạm thời (Xem Thứ tư trong biểu đồ đầu tiên ở trên). Tuy nhiên, việc sử dụng tăng vọt ngay khi hoạt động của hệ thống nặng được nối lại.

Có chuyện gì ở đây vậy?


2
Mmm ... Quảng trường ....
Tom O'Connor

Câu trả lời:


76

Tôi đã theo dõi vấn đề này trở lại cuộc thảo luận về một cam kết với cây nguồn XFS từ tháng 12 năm 2010. Bản vá được giới thiệu trong Kernel 2.6,38 (và rõ ràng, sau đó được đưa vào một số hạt nhân phân phối Linux phổ biến).

Các biến động quan sát được trong việc sử dụng đĩa là kết quả của một tính năng mới; XFS Preallocation đầu cơ động .

Đây là một động thái để giảm sự phân mảnh tệp trong khi truyền phát bằng cách phân bổ không gian một cách cụ thể khi kích thước tệp tăng lên. Lượng không gian preallocated trên mỗi tệp là động và chủ yếu là một chức năng của không gian trống có sẵn trên hệ thống tệp (để loại trừ hoàn toàn hết dung lượng).

Nó tuân theo lịch trình này:

freespace       max prealloc size
  >5%             full extent (8GB)
  4-5%             2GB (8GB >> 2)
  3-4%             1GB (8GB >> 3)
  2-3%           512MB (8GB >> 4)
  1-2%           256MB (8GB >> 5)
  <1%            128MB (8GB >> 6)

Đây là một bổ sung thú vị cho hệ thống tập tin vì nó có thể giúp với một số tệp bị phân mảnh ồ ạt mà tôi xử lý.

Không gian bổ sung có thể được thu hồi tạm thời bằng cách giải phóng pagecache, nha khoa và inodes với:

sync; echo 3 > /proc/sys/vm/drop_caches

Tính năng này có thể bị vô hiệu hóa hoàn toàn bằng cách xác định một allocsizegiá trị trong quá trình gắn kết hệ thống tập tin. Mặc định cho XFS là allocsize=64k.

Tác động của sự thay đổi này có thể sẽ được cảm nhận bằng cách giám sát / hệ thống ngưỡng (đó là cách tôi bắt được), nhưng cũng ảnh hưởng đến hệ thống cơ sở dữ liệu và có thể gây ra kết quả không thể đoán trước hoặc không mong muốn đối với các máy ảo và mảng lưu trữ được cung cấp mỏng (họ sẽ sử dụng nhiều không gian hơn bạn mong đợi).

Nói chung, nó làm tôi mất cảnh giác vì không có thông báo rõ ràng về sự thay đổi hệ thống tập tin ở cấp phân phối hoặc thậm chí trong việc theo dõi danh sách gửi thư XFS .


Chỉnh sửa :
Hiệu suất trên các khối XFS với tính năng này được cải thiện đáng kể. Tôi đang thấy phân mảnh <1% nhất quán trên các khối lượng trước đó hiển thị tới 50% phân mảnh. Hiệu suất viết lên trên toàn cầu!

Số liệu thống kê từ cùng một bộ dữ liệu, so sánh XFS kế thừa với phiên bản trong EL6.3.

Cũ:

# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%

Mới:

# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%

4
Một triệu người ủng hộ và vương quốc của tôi cho bạn
Joel E Salas

1
Cảm ơn bạn! Chúng tôi vừa nâng cấp từ Debian Squeeze lên Ubuntu và đã tự hỏi tại sao du và ls lại hiển thị các giá trị cực kỳ khác nhau cho các tệp lớn (ví dụ: 50Mb so với 64Mb)
Giles Thomas

1
@ewwhite Bạn đã tắt tính năng này để lấy lại không gian? Hoặc bài viết này chỉ nói rằng, tính năng này là nguyên nhân gây ra sự khác biệt trong kích thước được báo cáo? Nghe có vẻ như "trên các hệ thống cơ sở dữ liệu hoặc các máy ảo được cung cấp mỏng, hãy xem xét tắt nó đi", nhưng cuối cùng tôi không chắc chắn bạn đã quyết định làm gì.
JDS

2
@jds Tôi để nó trên. Nó loại bỏ sự phân mảnh và đã tăng hiệu năng cho các ứng dụng của tôi.
ewwhite

3
Oh, tìm thấy tuyệt vời. Điều này đã sử dụng 750GB trên 35GB tệp. Sau khi xfs_fsrnó giảm xuống còn khoảng 35 GB. Tôi sẽ phải để mắt đến điề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.