Thứ năm, 25/08/2016 | 00:00 GMT+7

Cách cấu hình TRIM định kỳ cho bộ lưu trữ SSD trên server Linux

Do cấu trúc của ổ SSD hoặc ổ đĩa trạng thái rắn, việc sử dụng liên tục sẽ dẫn đến hiệu suất bị giảm sút nếu không được tính đến và giảm thiểu. Lệnh TRIM là một thao tác cho phép hệ điều hành truyền thông tin xuống SSD về khối dữ liệu nào không còn được sử dụng nữa. Điều này cho phép hệ thống bên trong của SSD quản lý tốt hơn việc cân bằng độ mòn và chuẩn bị cho thiết bị để ghi trong tương lai. TRIM có thể có tác động lớn đến hiệu suất của thiết bị theo thời gian và tuổi thọ tổng thể của nó.

Mặc dù có thể bật TRIM liên tục trong Linux, nhưng điều này có thể ảnh hưởng tiêu cực đến hiệu suất vì chi phí bổ sung cho các hoạt động file bình thường. Một giải pháp thay thế nhẹ nhàng hơn là cấu hình TRIM định kỳ . Điều này cấu hình hệ điều hành để TRIM ổ đĩa theo lịch trình thay vì như một thành phần cần thiết của các hoạt động file thông thường. Trong hầu hết các trường hợp, nó cung cấp các lợi ích giống nhau của TRIM liên tục mà không ảnh hưởng đến hiệu suất.

Trong hướng dẫn này, ta sẽ thảo luận ngắn gọn về cách hoạt động của SSD và TRIM và sau đó trình bày cách bật TRIM định kỳ trên nhiều bản phân phối Linux.

SSD lưu trữ dữ liệu như thế nào?

Để hiểu rõ hơn các vấn đề mà TRIM giải quyết, bạn nên biết một số điều về cách SSD lưu trữ và quản lý dữ liệu của chúng.

Đơn vị dữ liệu

Dữ liệu trên SSD được ghi và đọc trong các đơn vị có kích thước cố định được gọi là trang . Đến lượt mình, các trang được group lại với nhau trong các đơn vị lớn hơn được gọi là khối .

Giới hạn Đọc, Viết và Xóa

SSD có thể đọc và ghi vào các trang riêng lẻ. Tuy nhiên, chúng chỉ có thể xóa dữ liệu ở cấp độ khối. Một hạn chế nữa là viết chỉ có thể được thực hiện trên các trang đã được zeroed hoàn toàn (tất cả các bit đặt thành 0). Điều này nghĩa là việc overrides dữ liệu trực tiếp là không thể.

Để sửa đổi dữ liệu, SSD thực sự phải đọc thông tin từ vị trí cũ, sửa đổi nó trong bộ nhớ và sau đó ghi dữ liệu đã sửa đổi vào các trang mới, không. Sau đó, nó cập nhật một bảng bên trong để ánh xạ vị trí logic mà hệ điều hành được cấp cho vị trí vật lý mới của dữ liệu trên thiết bị. Vị trí cũ được đánh dấu trong một bảng nội bộ khác là : không được sử dụng, nhưng chưa được xóa.

Đòi lại các trang cũ

Để lấy lại các trang cũ, quy trình thu thập rác bên trong của SSD phải đọc tất cả các trang hợp lệ từ một khối và ghi chúng vào một khối mới. , bảng bên trong ánh xạ vị trí logic và vật lý được cập nhật. Khối cũ, hiện không chứa dữ liệu duy nhất, vẫn còn sử dụng sau đó có thể được làm 0 và được đánh dấu là sẵn sàng cho các lần ghi trong tương lai.

TRIM làm gì?

Quy trình thu gom rác bên trong của SSD chịu trách nhiệm xóa các khối và quản lý mức độ hao mòn. Tuy nhiên, các hệ thống file thường “xóa” dữ liệu bằng cách chỉ đánh dấu nó trong bản ghi của riêng chúng là không gian có sẵn trở lại. Chúng không thực sự xóa dữ liệu khỏi bộ nhớ bên dưới, nhưng có thể overrides lên khu vực mà dữ liệu đó đã chiếm trước đó trong các lần ghi tiếp theo.

Điều này nghĩa là SSD thường sẽ không biết rằng một trang không còn cần thiết nữa cho đến khi nó nhận được hướng dẫn từ hệ thống file để ghi vào cùng một vị trí logic sau đó. Nó không thể thực hiện các quy trình thu gom rác của bạn vì nó không bao giờ được thông báo khi nào dữ liệu bị xóa, chỉ khi không gian trước đây dành cho nó bây giờ sẽ được sử dụng cho dữ liệu khác.

Lệnh TRIM truyền thông tin về dữ liệu nào không còn được sử dụng từ hệ thống file xuống SSD. Điều này cho phép thiết bị thực hiện nhiệm vụ thu gom rác thông thường của nó khi không hoạt động, đảm bảo rằng có các trang bị xóa sẵn sàng để xử lý các lần ghi mới. SSD có thể xáo trộn dữ liệu trước thời hạn, dọn dẹp các trang cũ và nói chung là giữ cho thiết bị hoạt động tốt.

Tuy nhiên, thực hiện TRIM trên mỗi lần xóa có thể tốn kém và có thể có tác động tiêu cực đến hiệu suất của ổ đĩa. Việc cấu hình TRIM định kỳ cung cấp cho thiết bị thông tin hàng loạt về các trang không cần thiết theo lịch trình thường xuyên thay vì theo từng thao tác.

Tắt TRIM liên tục

Bạn có thể đã bật TRIM liên tục trên thiết bị của bạn khi chúng được gắn. Trước khi ta kích hoạt TRIM định kỳ, bạn nên xem xét các tùy chọn mount hiện tại của ta .

TRIM liên tục được kích hoạt bằng cách gắn ổ đĩa hoặc phân vùng với tùy chọn discard .

Trước tiên, hãy tìm các hệ thống file hiện được gắn với tùy chọn discard :

  • findmnt -O discard
Output
TARGET SOURCE FSTYPE OPTIONS /mnt/data /dev/sda1 ext4 rw,relatime,discard,data=ordered /mnt/data2 /dev/sdb1 ext4 rw,relatime,discard,data=ordered

Bạn có thể đếm lại các hệ thống file này tại chỗ mà không có tùy chọn discard , bằng cách bao gồm -o remount,nodiscard với mount :

  • sudo mount -o remount,nodiscard /mnt/data
  • sudo mount -o remount,nodiscard /mnt/data2

Nếu bạn chạy lại lệnh findmnt , bạn sẽ không nhận được kết quả nào:

  • findmnt -O discard

Tiếp theo, mở file /etc/fstab để xem các tùy chọn mount hiện được xác định cho hệ thống file của bạn. Những điều này xác định cách hệ thống file được gắn vào mỗi lần khởi động:

  • sudo nano /etc/fstab

Tìm tùy chọn discard và xóa nó khỏi các dòng mà bạn tìm thấy:

/ etc / fstab
. . . # /dev/sda1 /mnt/data ext4 defaults,nofail,discard 0 0 /dev/sda1 /mnt/data ext4 defaults,nofail 0 0 # /dev/sdb1 /mnt/data2 ext4 defaults,nofail,discard 0 0 /dev/sdb1 /mnt/data2 ext4 defaults,nofail 0 0 

Lưu file khi bạn hoàn tất. Hệ thống file bây giờ sẽ được mount mà không có tùy chọn discard và sẽ mount theo cách này trong các lần khởi động tiếp theo. Bây giờ ta có thể cài đặt TRIM định kỳ cho tất cả các hệ thống file hỗ trợ nó.

Cài đặt TRIM định kỳ cho các bản phân phối systemd

Việc cài đặt TRIM định kỳ cho việc vận chuyển các bản phân phối hiện đại với systemd có xu hướng khá dễ dàng.

Ubuntu 16.04

Ubuntu 16.04 đi kèm với một tập lệnh được chạy hàng tuần bởi cron . Điều này nghĩa là việc bật phương thức systemd được mô tả trong phần sau là không cần thiết đối với Ubuntu 16.04.

Nếu bạn muốn kiểm tra tập lệnh, bạn có thể xem nó bằng lệnh :

  • cat /etc/cron.weekly/fstrim
Output
#!/bin/sh # trim all mounted file systems which support it /sbin/fstrim --all || true

Như bạn thấy , tập lệnh này cần một version fstrim với cờ --all . Nhiều version fstrim xuất xưởng cùng với các bản phát hành trước của Ubuntu không có tùy chọn này.

Các bản phân phối systemd khác

Đối với các bản phân phối systemd khác, TRIM định kỳ có thể được kích hoạt bằng file fstrim.timer , file này sẽ chạy các hoạt động TRIM trên tất cả các ổ đĩa được mount có khả năng một lần một tuần. Điều này cũng thúc đẩy tùy chọn fstrim --all .

Tại thời điểm viết bài này, đây là phương pháp tốt nhất cho các bản phân phối sau:

  • Debian 8
  • CentOS 7
  • Fedora 24
  • Fedora 23
  • CoreOS

Đối với CentOS 7, Fedora 23, Fedora 24, và CoreOS, các fstrim.servicefstrim.timer đơn vị có sẵn theo mặc định. Để lên lịch TRIM hàng tuần cho tất cả các ổ đĩa có khả năng được đính kèm, hãy bật đơn vị .timer :

  • sudo systemctl enable fstrim.timer

Debian 8 có fstrim.servicefstrim.timer trong hệ thống file , nhưng không được tải vào systemd theo mặc định. Bạn chỉ cần sao chép các file trước:

  • sudo cp /usr/share/doc/util-linux/examples/fstrim.service /etc/systemd/system
  • sudo cp /usr/share/doc/util-linux/examples/fstrim.timer /etc/systemd/system

Bây giờ, bạn có thể bật bộ hẹn giờ giống như với các bản phân phối khác:

  • sudo systemctl enable fstrim.timer

Server của bạn bây giờ sẽ TRIM tất cả các hệ thống file được mount hỗ trợ hoạt động này, mỗi tuần một lần.

Cài đặt TRIM định kỳ cho các bản phân phối không thuộc hệ thống

Thật trùng hợp, hầu hết các bản phát hành phân phối có hệ thống init không phải systemd cũng được xuất xưởng với các version của tiện ích fstrim không có cờ --all . Điều này làm cho các hoạt động TRIM tự động, an toàn trở nên khó khăn hơn nhiều.

Sử dụng TRIM trên các ổ đĩa không hỗ trợ hoặc trên các thiết bị triển khai không đúng cách có thể nguy hiểm và dẫn đến mất dữ liệu. Cờ --all có thể xử lý các tình huống này một cách an toàn, nhưng việc cố gắng xác định thủ công các ổ đĩa được đính kèm có hỗ trợ đúng hoạt động hay không có thể gây nguy hiểm.

Trong Ubuntu 14.04, một tập lệnh ngắn có tên là fstrim-all được bao gồm, cố gắng thực hiện điều này. Một tập lệnh hàng tuần do cron chạy sẽ thực hiện điều này. Tuy nhiên, không phải lúc nào tập lệnh cũng diễn giải chính xác khả năng TRIM của các ổ đĩa được đính kèm.

Đối với bản phân phối này và các bản phân phối khác có lệnh fstrim mà không có cờ --all , giải pháp tốt nhất có thể là biên dịch version liên kết tĩnh của fstrim có bao gồm cờ. Điều này có thể được cài đặt cùng với version do phân phối quản lý và chỉ được gọi một cách rõ ràng từ cron job.

Đây có thể là lựa chọn tốt nhất cho các bản phân phối sau:

  • Ubuntu 14.04
  • Ubuntu 12.04
  • Debian 7
  • CentOS 6

Đối với Ubuntu 14.04, có lẽ tốt nhất bạn nên tắt tập fstrim-all đang chạy, vì nó có thể không phát hiện đúng trạng thái:

  • sudo chmod a-x /etc/cron.weekly/fstrim
  • sudo mv /etc/cron.weekly/fstrim /etc/cron.weekly/fstrim.bak

Đối với các bản phân phối khác, bạn có thể tham gia ngay.

Cài đặt Công cụ biên dịch phần mềm

Đầu tiên, hãy cài đặt các công cụ xây dựng phần mềm cần thiết.

Đối với hệ thống Ubuntu và Debian, điều này có thể được thực hiện bằng lệnh :

  • sudo apt-get update
  • sudo apt-get install build-essential

Đối với hệ thống CentOS, bạn có thể cài đặt một bộ công cụ tương tự bằng lệnh :

  • sudo yum groupinstall 'Development Tools'

Đến đây bạn có các phụ thuộc bản dựng cần thiết để biên dịch version fstrim gần đây.

Download và extract file nguồn

Tiện ích fstrim được phát hành cùng với các công cụ khác trong một group có tên là util-linux . Bạn có thể tìm thấy mã nguồn, được sắp xếp theo version phát hành, tại đây .

Nhấp vào version mới nhất của gói. Hiện tại, đó là v2.28 , nhưng điều đó có thể khác khi tiếp tục phát triển.

Trong folder tiếp theo, hãy tìm tarball mới nhất cho phần mềm. Điều này sẽ bắt đầu bằng util-linux- và kết thúc bằng .tar.gz . Hiện tại, version ổn định mới nhất là util-linux-2.28.1.tar.gz . Nhấp chuột phải vào liên kết thích hợp và sao chép nó vào clipboard của bạn.

Quay lại server của bạn, chuyển đến /tmp . Sử dụng trình curl hoặc wget và paste vào URL bạn đã sao chép để download file :

  • cd /tmp
  • curl -LO https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.1.tar.gz

Sau đó, extract tarball để tạo cấu trúc folder nguồn:

  • tar xzvf util-linux*

Bây giờ ta có mã nguồn và các công cụ xây dựng, ta có thể xây dựng phần mềm.

Cấu hình và biên dịch một fstrim được liên kết tĩnh

Bắt đầu bằng lệnh cấu trúc folder được extract :

  • cd /tmp/util-linux*

Tiếp theo ta cần cấu hình phần mềm. Vì ta chỉ cài đặt một fstrim binary fstrim riêng biệt và không muốn overrides các tiện ích và thư viện được quản lý bởi hệ thống quản lý gói của ta , ta sẽ biên dịch một file binary tĩnh.

Để làm điều này, ta cần bật liên kết tĩnh và tắt các thư viện được chia sẻ. Cấu hình phần mềm với các thuộc tính này bằng lệnh :

  • ./configure --enable-static --disable-shared

Sau khi phần mềm được cấu hình , bạn có thể biên dịch tiện ích fstrim bằng lệnh :

  • make fstrim

Thao tác này sẽ biên dịch tiện ích, đặt nó vào folder cấp cao nhất của repository được extract .

Sao chép file binary vào một folder không có trong PATH của bạn. Vì ta chỉ quan tâm đến việc gọi điều này từ tập lệnh cron , ta nên đảm bảo nó không cạnh tranh với fstrim được cài đặt hệ thống cho các mục đích sử dụng khác.

Ta sẽ tạo một folder có tên /cron-bin và đặt file binary vào đó:

  • sudo mkdir /cron-bin
  • sudo cp /tmp/util-linux*/fstrim /cron-bin

Bây giờ ta có quyền truy cập vào một tiện ích fstrim chức năng hơn.

Tạo tập lệnh Cron hàng tuần để chạy fstrim

Bây giờ, ta có thể tạo một tập lệnh mới sẽ được chạy bởi cron hàng tuần. Đây sẽ chính xác là tập lệnh giống hệt như trong Ubuntu 16.04, ngoại trừ việc nó sẽ trỏ đến vị trí mà ta đã đặt file binary được biên dịch tĩnh của bạn .

Tạo file bằng lệnh :

  • sudo nano /etc/cron.weekly/fstrim

Bên trong, dán các dòng sau. Thao tác này sẽ chạy fstrim binary fstrim mới của ta với tùy chọn --all :

/etc/cron.weekly/fstrim
#!/bin/sh # trim all mounted file systems which support it /cron-bin/fstrim --all || true 

Lưu file khi bạn hoàn tất.

Làm cho tập lệnh có thể thực thi bằng lệnh :

  • sudo chmod a+x /etc/cron.weekly/fstrim

Daemon cronanacron sẽ chạy tập lệnh này mỗi tuần một lần để TRIM hệ thống file .

Kết luận

Server Linux của bạn bây giờ sẽ được cấu hình để TRIM định kỳ tất cả các hệ thống file được hỗ trợ hàng tuần. TRIM giúp tối đa hóa cả hiệu suất lâu dài và tuổi thọ của ổ SSD của bạn.

Các hoạt động TRIM liên tục nghe có vẻ lý tưởng, nhưng chúng có thể thêm chi phí quan trọng vào các hoạt động hệ thống file thông thường. TRIM định kỳ cung cấp một nền tảng trung gian tốt bằng cách chuyển tiếp thông tin quan trọng cần thiết để thực hiện bảo trì định kỳ ổ đĩa trong một công việc theo lịch trình thay vì như một thành phần của mỗi hoạt động file .


Tags:

Các tin liên quan

Cách bảo vệ server của bạn chống lại lỗ hổng HTTPoxy
2016-07-18
Cách phân vùng và định dạng thiết bị lưu trữ trong Linux
2016-07-13
Cách thực hiện các tác vụ quản trị cơ bản cho thiết bị lưu trữ trong Linux
2016-07-13
Giới thiệu về thuật ngữ và khái niệm lưu trữ trong Linux
2016-07-13
Cách cấu hình BIND làm server DNS Mạng riêng trên Ubuntu 16.04
2016-05-09
cách cấu hình bind làm server lưu trữ hoặc chuyển tiếp DNS trên Ubuntu 16.04
2016-05-02
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 16.04
2016-04-29
Cách lưu trữ server chia sẻ tệp bằng Pydio trên Ubuntu 14.04
2016-04-29
Thiết lập server ban đầu với Ubuntu 16.04
2016-04-21
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04
2016-04-21