Cách chống phân mảnh hệ thống tệp XFS

Tác giả sysadmin, T.M.Hai 30, 2022, 01:38:54 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách chống phân mảnh hệ thống tệp XFS


Hệ thống tệp XFS thường thực hiện công việc khá tốt trong việc giữ sạch sẽ và gọn gàng, tuy nhiên, nó vẫn có thể bị phân mảnh theo thời gian. Ở đây chúng tôi sẽ chỉ cho bạn cách kiểm tra mức độ phân mảnh tại chỗ trên hệ thống tệp XFS của bạn và cách bạn có thể chống phân mảnh nó nếu cần, giúp tăng thêm hiệu suất của đĩa.

1. Xác định phân mảnh

Sự phân mảnh xảy ra khi một tệp được lưu trữ trên đĩa ở các phạm vi không liền kề, điều này về cơ bản có nghĩa là tệp được chia nhỏ và lưu trữ trên toàn bộ đĩa, điều này làm giảm hiệu suất tổng thể do đĩa hiện phải tìm kiếm dữ liệu từ nhiều vị trí khác nhau. Chống phân mảnh là quá trình đảo ngược điều này và đảm bảo các tệp của chúng tôi được lưu trữ trên các phạm vi tuần tự liền kề.

Hệ thống tệp XFS hoạt động với phạm vi tệp là các khối dữ liệu liền kề. Điều này có nghĩa là hệ thống tệp theo mặc định sẽ cố gắng sử dụng đĩa theo thứ tự để tăng khả năng chống phân mảnh đĩa. Tuy nhiên, bất chấp những nỗ lực tốt nhất của XFS, sự phân mảnh vẫn có thể xảy ra, mặc dù ở mức thấp hơn khi so sánh với các hệ thống tệp khác không hoạt động theo cách tương tự.

Một lợi ích khác của hệ thống tệp XFS là quá trình chống phân mảnh có thể được thực hiện hoàn toàn trực tuyến. Điều này có nghĩa là không cần phải sắp xếp thời gian ngừng hoạt động để hủy kết nối hệ thống tệp và thực hiện quá trình chống phân mảnh, tuy nhiên, nó sẽ làm tăng I/O của đĩa trong khi chạy, điều này có thể tác động tiêu cực đến hiệu suất hệ thống.

Lưu ý: Thông thường, chỉ nên chạy chống phân mảnh đối với các hệ thống đang sử dụng ổ đĩa quay (còn được gọi là ổ đĩa cứng truyền thống) chứ không phải ổ đĩa thể rắn (SSD). Điều này là do SSD có ít lợi thế hơn nhiều khi có các khối dữ liệu liền kề so với ổ cứng truyền thống. Thực hiện chống phân mảnh không cần thiết trên SSD có thể làm giảm tuổi thọ của nó theo thời gian, nhìn chung sẽ ổn nếu để TRIM lo mọi việc. Red Hat thậm chí còn khuyên chống phân mảnh định kỳ toàn bộ hệ thống tệp XFS, nói rằng điều này thường không được bảo hành.

2. Xem các mức độ phân mảnh XFS hiện tại

Trước khi mù quáng chạy công cụ chống phân mảnh trên hệ thống tệp XFS của chúng tôi, trước tiên chúng tôi muốn biết về các mức độ phân mảnh hiện tại vì có thể thậm chí không cần chống phân mảnh!

Trước tiên, chúng ta cần tìm các hệ thống tệp XFS của mình, điều này có thể được thực hiện theo một số cách khác nhau, một phương pháp đơn giản là chạy lệnh 'blkid' như hình bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# blkid
/dev/xvda1: UUID="1f790447-ebef-4ca0-b229-d0bc1985d47f" TYPE="xfs"

Như được hiển thị /dev/xvda1 trên hệ thống Linux này chứa một hệ thống tệp XFS.

Lệnh xfs_db có thể được sử dụng với tùy chọn -r để mở thiết bị hoặc tệp ở dạng chỉ đọc, điều này cần thiết cho hệ thống tệp được gắn kết. Ở đây chúng tôi chỉ định hệ thống tệp XFS của chúng tôi /dev/xvda1.

Mã nguồn [Chọn]
[root@centos7 ~]# xfs_db -r /dev/xvda1
xfs_db>

Mọi thứ đưa chúng ta đến dấu nhắc xfs_db nơi chúng ta có thể chạy các lệnh bổ sung, nhập 'trợ giúp' để có danh sách đầy đủ những gì có thể chạy ở đây.

Trong trường hợp cụ thể này, chúng ta sẽ sử dụng lệnh 'frag', được sử dụng để lấy dữ liệu phân mảnh. Cờ -d được sử dụng để hiển thị dữ liệu thư mục, trong khi cờ -f được sử dụng cho dữ liệu tệp.

Mã nguồn [Chọn]
xfs_db> frag -d
actual 5933, ideal 5617, fragmentation factor 5.33%

xfs_db> frag -f
actual 132484, ideal 129817, fragmentation factor 2.01%

Để thoát khỏi lời nhắc xfs_db, chỉ cần nhập 'thoát' và nhấn enter.

Không có gì quá nghiêm trọng trong trường hợp cụ thể này, hãy xem liệu chúng ta có thể cải thiện mức độ phân mảnh ở đây bằng cách chống phân mảnh hệ thống tệp XFS của mình hay không.

3. Chống phân mảnh hệ thống tệp XFS

Quá trình chống phân mảnh được thực hiện bằng công cụ xfs_fsr, đây là công cụ sắp xếp lại hệ thống tệp cho XFS. Nó hoạt động bằng cách cải thiện việc tổ chức phạm vi đĩa của mọi tệp để đảm bảo rằng không gian liền kề đang được sử dụng.

Công cụ này thực hiện chống phân mảnh trực tuyến, nghĩa là nó có thể chạy trên một hệ thống tệp hiện được gắn và đang sử dụng, chỉ cần lưu ý về việc sử dụng I/O tăng lên sẽ dẫn đến kết quả đó – tốt nhất bạn nên chạy nó trong một khoảng thời gian hoạt động đĩa thấp nếu có thể trên một hệ thống sản xuất.

Để chạy xfs_fsr, chỉ cần nhập lệnh đó như hình bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# xfs_fsr
xfs_fsr -m /proc/mounts -t 7200 -f /var/tmp/.fsrlast_xfs...
Completed all 10 passes

Theo mặc định, xfs_fsr không có đối số nào khác sẽ chạy trên các hệ thống tệp XFS được gắn được liệt kê trong tệp /etc/mtab. Ngoài ra, bạn có thể chỉ định một hệ thống tệp chẳng hạn như /dev/xvda1 hoặc thậm chí một tệp cụ thể nếu bạn không muốn chống phân mảnh mọi thứ có sẵn. Thời gian mặc định mà xfs_fsr sẽ chạy là 7200 giây tức là 2 giờ. Sau thời gian này, nó sẽ lưu tiến trình hiện tại vào tệp /var/tmp/.fsrlast_xfs, điều này về cơ bản cho phép chúng tôi tạm dừng và tiếp tục quá trình chống phân mảnh XFS. Ba tùy chọn này có thể được sửa đổi thủ công bằng cách chỉ định các cờ -m, -t hoặc -f tương ứng.

Dưới đây là các mức độ phân mảnh được báo cáo bởi xfs_db sau khi chạy xfs_fsr với các tùy chọn mặc định.

Mã nguồn [Chọn]
xfs_db> frag -d
actual 5935, ideal 5619, fragmentation factor 5.32%

xfs_db> frag -f
actual 129878, ideal 129863, fragmentation factor 0.01%

Trong trường hợp cụ thể này, sự phân mảnh thư mục hầu như không thay đổi, trong khi sự phân mảnh tập tin hầu như đã bị loại bỏ.

Cần lưu ý rằng xfs_fsr không chạy trên các tệp hiện được ánh xạ trong bộ nhớ. Tôi nhận thấy rằng sau khi chạy xfs_fsr, sau đó thực hiện khởi động lại và chạy lại xfs_fsr, mức độ chống phân mảnh giảm thêm 0,01%, điều này không thực tế hoặc rất hữu ích nhưng cho thấy rằng các tệp bị phân mảnh trước đó được mở trong bộ nhớ đã tránh được quá trình chống phân mảnh.

4. Thông tin hiệu suất phân mảnh XFS

Từ điều tra của tôi, công cụ xfs_fsr dường như không đa luồng, trên hệ thống Linux 4 lõi CPU, tôi thấy rằng chỉ một trong số các lõi đạt 99% I/O chờ trong khi các lõi khác là 0%, cho biết chỉ một lõi CPU đang thực hiện hoạt động đĩa cần thiết. Dưới đây là ảnh chụp nhanh 'top' được chụp trong khi chạy xfs_fsr cho thấy điều này.

Mã nguồn [Chọn]
[root@centos7 ~]# top
top - 21:42:21 up 66 days, 22:46,  3 users,  load average: 0.40, 0.12, 0.08
Tasks: 185 total,   2 running, 183 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.3 us,  1.7 sy,  0.0 ni,  0.3 id, 97.3 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16005736 total, 13166964 free,   657916 used,  2180856 buff/cache
KiB Swap:   520188 total,   520188 free,        0 used. 15037076 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
11653 root      20   0  126380  17212    680 R   1.7  0.1   0:00.40 xfs_fsr

Tôi cũng nhận thấy rằng đôi khi khả năng đọc/ghi của tôi đã đạt mức tối đa, vì vậy hãy chuẩn bị tinh thần cho việc giảm hiệu suất của đĩa trong khi thực hiện chống phân mảnh. Trong khi hoàn toàn không làm gì khác ngoài việc chạy xfs_fsr, tôi đã lưu ý cách sử dụng I/O sau với lệnh 'iotop', điều này được hiển thị bên dưới. Trong khi xfs_fsr không chạy đọc/ghi trên máy chủ thử nghiệm là 0 Byte mỗi giây, xác nhận rằng tất cả I/O đều đến từ xfs_fsr.

Mã nguồn [Chọn]
Total DISK READ :     180.74 M/s | Total DISK WRITE :     212.45 M/s
Actual DISK READ:     180.74 M/s | Actual DISK WRITE:     212.83 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
  26455 be/4 root      107.73 M/s  122.63 M/s  0.00 % 99.99 % xfs_fsr

Điều này có thể trông không giống lắm nhưng nó nhanh như ổ đĩa trên hệ thống thử nghiệm của tôi có thể thực hiện.

Tổng thời gian cần để xfs_fsr hoàn thành sẽ phụ thuộc vào kích thước ổ đĩa của bạn, tốc độ I/O của ổ đĩa và mức độ phân mảnh tồn tại. Đối với đĩa 8gb mà tôi đang thử nghiệm, chỉ mất chưa đến vài phút để hoàn thành trong khi sử dụng gần như tất cả I/O của đĩa.

Vì tôi không có nhiều phân mảnh nên tôi không thể thực hiện kiểm tra I/O đĩa trước và sau có ý nghĩa để so sánh sự khác biệt về hiệu suất trước và sau khi phân mảnh.

Chúng tôi có thể trợ giúp thêm cho hệ thống tệp XFS trong việc giảm mức độ phân mảnh bằng cách gắn nó với 'allocsize' được chỉ định, ví dụ: xem dòng cấu hình bên dưới từ /etc/fstab.

Mã nguồn [Chọn]
/dev/xvda1  /  xfs  defaults,allocsize=512m  0 0
Khi được gắn kết, điều này đã phân bổ trước cho chúng tôi 512mb không gian tuần tự liền kề, đối với hầu hết người dùng, các giá trị mặc định mà XFS cung cấp nhìn chung sẽ ổn. Để biết thêm thông tin về điều chỉnh XFS, tôi khuyên bạn nên xem Câu hỏi thường gặp về XFS như một điểm khởi đầu tốt.
Phần kết luận

Với công cụ xfs_db, chúng ta có thể xem các mức phân mảnh hiện tại có trong hệ thống tệp XFS. Nếu chúng tôi xác định rằng các mức độ phân mảnh tại chỗ cần được giải quyết, thì chúng tôi có thể sử dụng công cụ xfs_fsr để thực hiện chống phân mảnh trực tuyến cho hệ thống tệp XFS. Điều này thường không bắt buộc phải chạy thường xuyên vì XFS đã thực hiện tốt việc sử dụng các phạm vi tệp liền kề trên đĩa, tuy nhiên bằng cách chạy chống phân mảnh theo yêu cầu, có thể tăng hiệu suất I/O của đĩa hệ thống nếu hệ thống của bạn sử dụng của ổ đĩa cứng truyền thống.