Chia sẻ đam mê công nghệ
Giải thích

Vì sao Linux ít phải chống phân mảnh ổ cứng hơn Windows?

Ext2, ext3 và ext4 được thiết kế để gom dữ liệu ngay khi ghi, thay vì chờ ổ đĩa phân mảnh rồi mới sửa. Nhưng với ổ SSD ngày nay, khác biệt này không còn quan trọng như thời HDD.

Công cụ defrag minh họa thao tác từng dùng để gom các mảnh dữ liệu rời rạc trên ổ HDD.
Công cụ defrag minh họa thao tác từng dùng để gom các mảnh dữ liệu rời rạc trên ổ HDD.

Tóm tắt nhanh

  • FAT hình thành trong thời ổ đĩa mềm chật chội, còn các hệ thống tệp ext của Linux ưu tiên giữ dữ liệu liên quan ở gần nhau.
  • Ext2 gom inode và khối dữ liệu theo block group, cấp phát trước các khối liền kề; ext4 còn trì hoãn quyết định vị trí ghi để có thêm cơ hội tìm vùng phù hợp.
  • Linux vẫn có thể phân mảnh khi ổ gần đầy hoặc dữ liệu được ghi thành nhiều phần rời rạc; ext4 có công cụ e4defrag.
  • Với SSD, việc gom dữ liệu để giảm thời gian đầu đọc tìm kiếm gần như mất ý nghĩa, còn ghi dồn dập không đem lại lợi ích tương xứng.

Windows từng có lý do thực tế để người dùng định kỳ chạy công cụ chống phân mảnh: trên ổ HDD, một tệp nằm rải ở nhiều vị trí khiến đầu đọc cơ học phải di chuyển thêm. Linux ít gắn với thao tác đó vì các hệ thống tệp ext được tổ chức theo hướng hạn chế phân mảnh ngay từ lúc ghi. Đây là khác biệt trong cách thiết kế lưu trữ, không phải Linux miễn nhiễm với phân mảnh.

FAT ưu tiên lấp chỗ trống, còn ext cố giữ dữ liệu gần nhau

FAT xuất hiện năm 1977, khi Microsoft thiết kế hệ thống tệp này cho những đĩa mềm có dung lượng khoảng 100 KB. Trong môi trường nhỏ hẹp như vậy, tận dụng mọi khoảng trống là ưu tiên dễ hiểu. Khi một vùng trống nhỏ xuất hiện sau khi xóa tệp, phần đầu của tệp mới có thể được ghi vào đó, phần còn lại nằm ở vị trí khác. Nếu tệp lớn lên sau đó, các phần mới cũng có thể phải đặt xa hơn.

Với HDD, mỗi lần đọc những phần nằm ở các vị trí khác nhau có thể đòi hỏi đầu đọc dịch chuyển đến vùng tương ứng. Tệp bị chia thành nhiều mảnh vì thế làm tăng công việc cơ học, đặc biệt khi đọc tuần tự. Chống phân mảnh sắp xếp lại các khối để dữ liệu của một tệp nằm gần nhau hơn. Việc này tốn thời gian và tạo thêm hoạt động ghi, nhưng có thể giúp HDD truy cập dữ liệu hiệu quả hơn.

Ext2, hệ thống tệp Linux do Rémy Card cùng Theodore Ts’o và Stephen Tweedie thiết kế, chọn một hướng khác. Thay vì chỉ tìm một khoảng trống vừa khít trước mắt, ext2 chia hệ thống tệp thành các block group. Mỗi nhóm chứa những cấu trúc quản lý cùng một phần dữ liệu; kernel cố gắng đặt dữ liệu của tệp trong cùng nhóm với inode mô tả tệp đó. Giảm khoảng cách giữa thông tin tệp và nội dung của nó giúp hạn chế việc đầu đọc HDD phải đi xa.

Tài liệu thiết kế ext2 ghi nhận hệ thống có thể cấp phát trước tối đa 8 khối liền kề khi cần thêm khối cho tệp; tỷ lệ cấp phát trước thành công vào khoảng 75%, kể cả trên hệ thống tệp rất đầy. Đây là một cách dành sẵn chỗ cho dữ liệu có khả năng tiếp tục tăng, thay vì đợi mỗi lần ghi rồi mới ghép từng khoảng trống nhỏ.

Ext4 chờ đủ dữ liệu rồi mới chọn vị trí ghi

Những cơ chế này phát triển thêm trong ext4. Theo tài liệu Linux Kernel, khi tạo tệp, bộ phân bổ nhiều khối có thể cấp phát dự kiến 8 KiB với giả định dữ liệu sẽ sớm được ghi vào đó. Nếu dự đoán đúng, nội dung có cơ hội được ghi thành một extent liền nhau. Ext4 cũng dùng delayed allocation: thay vì chốt vị trí trên đĩa ngay khi ứng dụng yêu cầu thêm chỗ, hệ thống trì hoãn lựa chọn đến lúc các bộ đệm bẩn được ghi xuống thiết bị.

Khoảng trì hoãn ấy cho bộ phân bổ thêm thông tin để chọn vị trí. Nếu ứng dụng ghi nhiều phần dữ liệu trong một khoảng thời gian ngắn, kernel có thể cân nhắc chúng cùng lúc và tìm vùng trống phù hợp hơn. Đây không phải cam kết rằng mọi tệp sẽ liền mạch; khi ổ gần cạn chỗ, những vùng đủ lớn không còn, nên hệ thống vẫn phải dùng các vị trí rời nhau.

Cần phân biệt việc Linux ít phải chống phân mảnh với chuyện Linux không bao giờ phân mảnh. Ext4 có công cụ e4defrag để xử lý tệp bị phân mảnh. Tình trạng này dễ nảy sinh khi dung lượng trống rất thấp hoặc khi ghi lượng lớn dữ liệu thành nhiều khối rời rạc, chẳng hạn một tệp lớn được tải xuống theo nhiều mảnh. Vì vậy, nhận định đúng là cơ chế phân bổ của ext thường giảm nhu cầu chạy defrag định kỳ trong sử dụng thông thường, chứ không loại bỏ hoàn toàn khả năng phân mảnh.

Trên HDD, khác biệt còn thấy; trên SSD, lợi ích của defrag giảm mạnh

Defrag từng hữu ích vì HDD có đầu đọc cơ học và độ trễ tìm kiếm. Gom các phần của một tệp lại gần nhau có thể giảm quãng đường đầu đọc phải di chuyển khi đọc tuần tự. Đây cũng là lý do cách bố trí block group và cấp phát liền kề có ý nghĩa rõ ràng trong các hệ thống ext thời ổ cứng từ tính.

SSD lưu dữ liệu trên chip nhớ, không cần đầu đọc di chuyển đến từng vị trí vật lý như HDD. Vì thế, việc sắp xếp các phần của tệp cạnh nhau không đem lại cùng lợi ích giảm thời gian tìm kiếm. Chạy công cụ defrag kiểu cũ trên SSD còn tạo thêm lượng ghi dữ liệu không cần thiết; không nên xem thao tác này như một bước bảo dưỡng định kỳ cho ổ SSD.

Điều đó không có nghĩa hệ điều hành chẳng bao giờ thực hiện bảo trì lưu trữ trên SSD. Việc tối ưu cho SSD khác với gom dữ liệu để giảm seek time trên HDD; người dùng nên để hệ điều hành quản lý các thao tác phù hợp với thiết bị thay vì chạy tiện ích defrag thủ công theo thói quen cũ. Nếu máy vẫn dùng HDD và thấy hiệu năng giảm, dung lượng trống, kiểu tải dữ liệu và tình trạng phân mảnh mới là những yếu tố đáng xem xét.

Triết lý thiết kế quan trọng hơn nhãn “Linux hay Windows”

Hai máy chạy Windows và Linux đặt cạnh nhau gợi lại khác biệt về cách hệ thống tệp của mỗi nền tảng quản lý dữ liệu.
Hai máy chạy Windows và Linux đặt cạnh nhau gợi lại khác biệt về cách hệ thống tệp của mỗi nền tảng quản lý dữ liệu. Ảnh: XDA Developers

Câu chuyện này thường được kể như một ưu thế tuyệt đối của Linux, nhưng nguyên nhân gần với lịch sử của từng hệ thống tệp hơn. FAT phải phục vụ môi trường dung lượng hạn chế; ext được xây dựng trong truyền thống Unix, với inode, nhóm khối và các chiến lược cấp phát nhằm giữ dữ liệu liên quan gần nhau. Những lựa chọn ban đầu để lại khác biệt trong cách người dùng chăm sóc HDD nhiều năm sau đó.

Với máy tính hiện đại dùng SSD, khác biệt ấy ít quyết định cảm nhận hàng ngày hơn. Còn ở máy vẫn chạy HDD, cơ chế cấp phát tốt có thể giảm khả năng phân mảnh tích tụ, nhưng không thay thế việc giữ đủ dung lượng trống hay xử lý một trường hợp phân mảnh thực sự nghiêm trọng. Linux không “không cần defrag” theo nghĩa tuyệt đối; nó chỉ được thiết kế để người dùng ít phải nghĩ đến thao tác này hơn.

Nguồn tham khảo: XDA Developers; Design and Implementation of the Second Extended Filesystem (MIT); Linux Kernel Documentation: ext4 Data Structures and Algorithms

Bài này thế nào?

Hoá đơn của bài này

Tek viết bài này bằng cà phê. Mời Tek một ly nha?

Theo dõi TekCafe: Facebook · YouTube

Bài viết mới nhất