Hệ thống tập tin linux nào hoạt động tốt nhất với SSD


119

Từ wiki:

Chức năng TRIM quan trọng được hệ điều hành Linux hỗ trợ bắt đầu với kernel 2.6.33 (có sẵn vào đầu năm 2010). Tuy nhiên, hỗ trợ giữa các hệ thống tập tin khác nhau vẫn không nhất quán hoặc không có. Căn chỉnh phân vùng thích hợp cũng không được thực hiện bởi phần mềm cài đặt.

Vậy, hệ thống tập tin nào hoạt động tốt nhất cho SSD và hỗ trợ căn chỉnh phân vùng TRIM + trong khi cài đặt và có sẵn trên Ubuntu?

Câu trả lời:


89

Hệ thống tập tin EXT4 + TRIM:

  • EXT4 với TRIM cải thiện hiệu suất bằng cách giảm các chu kỳ ghi không cần thiết vào ổ SSD khi chúng giới hạn các chu kỳ ghi lại ghi.
  • Ubuntu và một số hương vị Linux khác hỗ trợ EXT 4 với TRIM.

Phân vùng SWAP:

  • Đảm bảo rằng bạn không có không gian SWAP trên SSD, một lần nữa để giảm chu kỳ ghi.
  • Nếu bạn có ổ đĩa cơ, thì bạn nên tạo một không gian SWAP trên ổ đĩa cơ và tránh để nó trên ổ SSD.

Sắp xếp phân vùng:

  • Phân vùng phải bắt đầu trên ranh giới 1MB sạch để kích thước khối của Hệ thống tập tin phù hợp với kích thước khối của SSD.

Vì vậy, sử dụng EXT4 + TRIM với SWAP trên ổ cứng cơ hoặc không có SWAP trên SSD.

Những điều trên có thể được thực hiện bằng cách tham khảo Nguồn: Cách tối đa hóa hiệu suất SSD .


GPT là phương pháp hiện đại sử dụng gdisk& grub 2.0.x, (tôi đoán ai đó đã đề cập dưới đây trong câu trả lời) và MBR là phương pháp cũ sử dụng phương thức cũ grub 0.9.7fdisk.. bạn có thể tìm thêm tại đây: wiki.archlinux.org/index.php/Solid_State_Drive
bí danh

7
Nó là không cần thiết để xác định nodiratimekhi bạn cũng chỉ định noatime. Đồng ý, nó trông rất tuyệt và tiên tiến đối với những người mọt sách, nhưng vì noatimevô hiệu hóa các nút và các thư mục cũng bị inode, nó giống như nói "rửa tay và rửa ngón tay cái của bạn". :)
Redsandro

Theo kinh nghiệm tôi có thể nói rằng không có công cụ lên lịch ("noop") hoạt động nhanh hơn thời hạn.
trống

5
Không, "Các phân vùng trao đổi Linux theo mặc định thực hiện các hoạt động TRIM khi thiết bị khối bên dưới hỗ trợ TRIM, với khả năng tắt chúng hoặc chọn giữa các hoạt động TRIM một lần hoặc liên tục." vì vậy phân vùng trao đổi phải được đặt trên ổ SSD để tận dụng thời gian truy cập nhanh, điều này sẽ xảy ra rất nhiều thời gian mỗi lần hoán đổi trang xảy ra
phuclv

2
@aliasgar F2FS có phải là lựa chọn tốt so với ext4 không?
SebMa

67

Câu trả lời ngắn

  • Chọn ext4gắn kết nó với discardtùy chọn hỗ trợ TRIM hoặc sử dụng FITRIM (xem bên dưới). Cũng sử dụng noatimetùy chọn nếu bạn sợ "hao mòn SSD".

  • Không thay đổi bộ lập lịch I / O (CFQ) mặc định của bạn trên các máy chủ đa ứng dụng , vì nó cung cấp sự công bằng giữa các quy trình và có hỗ trợ SSD tự động. Tuy nhiên, sử dụng Hạn chót trên máy tính để bàn để có được phản hồi tốt hơn khi tải.

  • Để dễ dàng đảm bảo căn chỉnh dữ liệu phù hợp, khu vực bắt đầu của mỗi phân vùng phải là bội số của 2048 (= 1 MiB). Bạn có thể sử dụng fdisk -cu /dev/sdXđể tạo ra chúng. Trên các bản phân phối gần đây, nó sẽ tự động chăm sóc điều này cho bạn.

  • Hãy suy nghĩ kỹ trước khi sử dụng trao đổi trên SSD. Nó có thể sẽ nhanh hơn nhiều so với trao đổi trên ổ cứng, nhưng nó cũng sẽ làm hao mòn đĩa nhanh hơn (có thể không liên quan, xem bên dưới).

Câu trả lời dài

  • Hệ thống tập tin:

Ext4 là hệ thống tập tin Linux phổ biến nhất (được duy trì tốt). Nó cung cấp hiệu năng tốt với SSD và hỗ trợ tính năng TRIM (và FITRIM) để duy trì hiệu suất SSD tốt theo thời gian (điều này xóa các khối bộ nhớ không sử dụng để truy cập ghi nhanh hơn sau này). NILFS được thiết kế đặc biệt cho các ổ nhớ flash, nhưng không thực sự hoạt động tốt hơn ext4 trên điểm chuẩn. Btrfs vẫn được coi là thử nghiệm (và không thực sự thực hiện tốt một trong hai ).

  • Hiệu suất SSD & TRIM:

Các TRIM tính năng xóa các khối SSD không được sử dụng nữa bởi hệ thống tập tin. Điều này sẽ tối ưu hóa hiệu suất ghi dài hạn và được khuyến nghị trên SSD do thiết kế của chúng. Nó có nghĩa là hệ thống tập tin phải có khả năng báo cho ổ đĩa biết về các khối đó. Các discardtùy chọn gắn kết của ext4 sẽ phát hành như TRIM lệnh khi khối hệ thống tập tin được giải phóng. Đây là loại bỏ trực tuyến .

Tuy nhiên, hành vi này ngụ ý một chút hiệu suất trên đầu. Kể từ Linux 2.6.37, bạn có thể tránh sử dụng discardvà chọn thực hiện loại bỏ hàng loạt thỉnh thoảng bằng FITRIM (ví dụ: từ crontab). Các fstrimtiện ích thực hiện điều này (trực tuyến), cũng như các -E discardtùy chọn fsck.ext4. Tuy nhiên, bạn sẽ cần phiên bản "gần đây" của các công cụ này.

  • Ổ SSD:

Bạn có thể muốn hạn chế ghi trên ổ đĩa của mình vì SSD có thời gian giới hạn trong vấn đề này. Tuy nhiên , đừng quá lo lắng , SSD 128 GB tồi tệ nhất hiện nay có thể hỗ trợ ít nhất 20 GB dữ liệu bằng văn bản mỗi ngày trong hơn 5 năm (1000 chu kỳ ghi trên mỗi tế bào). Những cái tốt hơn (và cả những cái lớn hơn) có thể tồn tại lâu hơn nhiều: rất có thể bạn sẽ thay thế nó trước đó.

Nếu bạn muốn sử dụng trao đổi trên SSD, kernel sẽ nhận thấy một đĩa không quay và sẽ ngẫu nhiên sử dụng trao đổi (mức độ hao mòn cấp độ kernel): sau đó bạn sẽ thấy một SS(Trạng thái rắn) trong thông báo kernel khi bật hoán đổi:

Thêm trao đổi 2097148k trên / dev / sda1. Ưu tiên: -1 mức độ: 1 trên: 2097148k SS

  • Bộ lập lịch I / O:

Ngoài ra, tôi đồng ý với hầu hết câu trả lời của bí danh (ngay cả khi hầu hết câu trả lời đã được - sao chép? - được sao chép từ trang web này ), nhưng tôi phải không đồng ý một phần về phần lập lịch . Theo mặc định, bộ lập lịch thời hạn được tối ưu hóa cho các đĩa quay vì nó thực hiện thuật toán thang máy . Vì vậy, hãy làm rõ phần này.

Câu trả lời dài về lịch trình

Bắt đầu từ kernel 2.6,29, các ổ SSD được tự động phát hiện và bạn có thể xác minh điều này bằng:

cat /sys/block/sda/queue/rotational

Bạn nên lấy 1đĩa cứng và 0ổ SSD.

Bây giờ, bộ lập lịch CFQ có thể điều chỉnh hành vi của nó dựa trên thông tin này. Kể từ linux 3.1, cfq-iosched.txttệp tài liệu kernel nói :

CFQ có một số tối ưu hóa cho SSD và nếu nó phát hiện phương tiện không quay có thể hỗ trợ độ sâu hàng đợi cao hơn (nhiều yêu cầu trong chuyến bay cùng một lúc), [...].

Ngoài ra, bộ lập lịch Hạn chót cố gắng hạn chế chuyển động đầu không có thứ tự trên các đĩa quay, dựa trên số khu vực. Trích dẫn tài liệu kernel deadline-iosched.txt, fifo_batch mô tả tùy chọn :

Các yêu cầu được nhóm thành `` lô '' theo một hướng dữ liệu cụ thể (đọc hoặc ghi) được phục vụ theo thứ tự tăng ngành.

Tuy nhiên, điều chỉnh tham số này thành 1 khi sử dụng SSD có thể thú vị:

Tham số này điều chỉnh sự cân bằng giữa độ trễ theo yêu cầu và thông lượng tổng hợp. Khi độ trễ thấp là mối quan tâm chính, nhỏ hơn sẽ tốt hơn (trong đó giá trị 1 mang lại hành vi đến trước được phục vụ trước). Việc tăng fifo_batch thường cải thiện thông lượng, với chi phí biến đổi độ trễ.

Một số điểm chuẩn cho thấy có rất ít sự khác biệt về hiệu suất giữa các lịch trình khác nhau. Sau đó, tại sao không đề nghị công bằng ? khi CFQ hiếm khi xấu trong băng ghế dự bị . Tuy nhiên, trên các thiết lập máy tính để bàn, bạn thường sẽ có khả năng phản hồi tốt hơn khi sử dụng Hạn chót khi tải, do thiết kế của nó (có thể với chi phí thông lượng thấp hơn).

Điều đó nói rằng, một điểm chuẩn tốt hơn sẽ thử sử dụng Hạn chót với fifo_batch=1.

Để sử dụng Hạn chót trên SSD theo mặc định, bạn có thể tạo một tệp, nói /etc/udev.d/99-ssd.rulesnhư sau:

# all non-rotational block devices use 'deadline' scheduler
# mostly useful for SSDs on desktops systems
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"

Ý bạn là gì khi căn chỉnh phân vùng được tự động quan tâm đến các bản phân phối gần đây? Nó cũng áp dụng khi bạn sử dụng phân vùng thủ công trong khi cài đặt ubfox hoặc khi thực hiện phân vùng bằng gparted?
jarno

2
@jarno trong hầu hết các bản phân phối gần đây (trong vài năm nay), các công cụ phân vùng, từ fdisk trở lên thông qua các thứ đồ họa, có xu hướng tự động mặc định để tạo sự sắp xếp phân vùng với bội số 1Mb từ thiết bị bắt đầu. Điều này hoàn toàn phù hợp với 512byte, 4k, 8k và nửa triệu kích thước khối / cụm khác có bản chất 2 ^ n. Nó làm cho gần như không thể căn chỉnh sai một phân vùng trừ khi bạn nỗ lực đáng kể để làm như vậy.
killermist

13

Bài viết archlinux Ổ đĩa thể rắn nói trong phần Lựa chọn hệ thống tập tin :

Nhiều tùy chọn tồn tại cho các hệ thống tệp bao gồm Ext2 / 3/4, Btrfs, v.v.

Btrfs
hỗ trợ btrfs đã được bao gồm trong 2.6.29 phát hành đường chính của hạt nhân Linux. Một số người cảm thấy rằng nó không đủ trưởng thành để sử dụng sản xuất trong khi cũng có những người sớm chấp nhận người kế nhiệm tiềm năng này cho ext4. Người dùng được khuyến khích đọc bài viết Btrfs để biết thêm thông tin.

Ext4
Ext4 là một hệ thống tập tin khác có hỗ trợ SSD. Nó được coi là ổn định kể từ 2.6.28 và đủ trưởng thành để sử dụng hàng ngày. Trái với Btrfs, ext4 không tự động phát hiện bản chất đĩa; Người dùng phải kích hoạt rõ ràng hỗ trợ lệnh TRIM bằng cách sử dụng tùy chọn hủy bỏ trong fstab (hoặc với Tune2fs -o disard / dev / sdaX).

Cả Btrfs và Ext4 đều đáp ứng hai yêu cầu chính để sử dụng hiệu quả SSD:

  • Hệ thống tập tin phải có khả năng ban hành các lệnh ATA_TRIM cho SSD bên dưới
  • Hệ thống tập tin không được thực hiện ghi không cần thiết vào đĩa

Đối với hiệu suất, có hai yêu cầu khác:

  • Các phân vùng cần được căn chỉnh theo kích thước khối của SSD
  • TRIM phải được kích hoạt rõ ràng cho từng phân vùng được định dạng Ext4

Cái đầu tiên hiện nay là tự động với hầu hết các trình cài đặt Linux. fdisk cũng sẽ tạo các phân vùng ở viền 1024KB nếu được bắt đầu bằng cờ "-cu".

Thứ hai là tự động cho Btrfs, nhưng đối với Ext4, việc này được thực hiện thủ công bằng cách thêm "loại bỏ" vào danh sách các tùy chọn gắn kết cho mỗi phân vùng Ext4 trong tệp "/ etc / fstab". Để biết thêm chi tiết, xem này howto .

Theo ý kiến ​​của tôi, điều này đòi hỏi một chút khó khăn với fstab cho Ext4 không có lý do gì để không sử dụng hệ thống tập tin tuyệt vời và trưởng thành này.


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.