Sự phân mảnh trên UNIX file system

FreeBSD framentation

Thời còn sử dụng Windows thường xuyên, tôi còn nhớ một lời khuyên ăn sâu vào tâm trí mình là nên thường xuyên “chống phân mảnh” ổ đĩa (Defragmenting). Không chỉ mình tôi, mà có thể nói toàn bộ ai dùng hệ điều hành của MS đều phải biết việc này. Lời khuyên trên trở thành một phương thuốc thần diệu trị nhiều căn bệnh thường gặp như “máy chạy chậm”, “hết ổ cứng” … kèm theo nó là vô số phần mềm chống phân mảnh (Defragmenter) mà loại này luôn tốt hơn loại khác. Khi chuyển sang các hệ điều hành khác như Linux, UNIX, MacOS, … phần đông mọi người đều cảm thấy không an tâm khi các Defragmenter hầu như vắng bóng, và họ cảm thấy dường như bị các căn bệnh thường gặp kia đe doạ, cảm thấy ổ đĩa cứng của mình có vẻ nặng nề quá, khi mà không có “thuốc thần” nữa. Nhưng người ta quên một điều là Windows và *NIX là hai thế giới hoàn toàn khác biệt. Hãy yên tâm, các hệ thống *NIX đã giúp ta ngăn chặn phân mảnh đĩa ngay từ trong trứng nước.

Những khác nhau cơ bản của hai hệ thống này được thể hiện rõ trong cách chúng được thiết kế. Windows ra đời nhắm đến khách hàng là người sử dụng đơn lẻ, trong khi UNIX từ đầu là dành cho các hệ thống được nhiều người dùng chia sẻ đồng thời trên hệ thống mạng.

Sự khác biệt về thực tế sử dụng này kéo theo những yêu cầu khác nhau trên các hệ thống file. Những hệ thống file của UNIX cần phải hỗ trợ những ổ đĩa lớn, được truy xuất đồng thời bởi số lượng lớn người dùng. Những người dùng này liên tục tạo file mới và thực hiện các thao tác đọc/ghi trên những file có sẵn. Windows thì ngược lại, được sử dụng bởi một người dùng đơn lẻ với nhu cầu là một ổ đĩa khá nhỏ, hiệu suất thực thi thì càng nhanh càng tốt, không phải là một vấn đề quan trọng lắm.

Điều khác biệt trong triết lý thiết kế này làm cho các hệ thống file của Windows trên thực tế không thể ngăn chặn sự phân mảnh được. Sự phân mảnh xuất hiện khi hệ thống file không thể cung cấp một block liền kề trong vùng trống để lưu trữ một file được nữa. Do đó hệ thống file phải phân bố các phần của một file trên nhiều nơi khác nhau về mặt vật lý trên bề mặt đĩa cứng. Những thao tác đọc trên file này sau đó sẽ phải mất nhiều thời gian hơn vì các đầu đọc đĩa phải di chuyển qua các vùng khác nhau trên đĩa để tìm tất cả những phần rải rác của file.

UNIX được thiết kế từ nền tảng ý thức được vấn đề phân mảnh đĩa. Đó cũng là lý do các hệ thống file hiện đại của UNIX ngày nay cố gắng nhóm các file thành các nhóm cylinder liền kề nhau, càng nhiều càng tốt. Một cylinder là một lượng khoảng trống được định vị bên dưới các đầu đọc đĩa từ vào bất kỳ một thời điểm nào đó. Việc gom nhóm các file theo cách này sẽ tránh được những di chuyển không cần thiết của đầu đọc đĩa, dẫn đến một ưu điểm nữa là khả năng làm tăng lưu lượng dữ liệu (throughput) ra/vào ở một thời điểm trên hệ thống file.

Một mánh khoé nữa của UNIX là cấp phát nhiều khoảng trống đĩa hơn là yêu cầu thực tế cho mỗi file khi được ghi. Bằng cách này, hệ thống phòng ngừa trước cho sự phát triển lên về kích thước của file đó trong tương lai, nên tránh được sự phân mảnh trong một thời gian mặc dù khoảng thời gian này là không xác định được.

Với những thiết kế như vậy, ta có thể thấy hệ thống file trên một ổ đĩa RAID-5 750GB chạy FreeBSD phục vụ cho việc chia sẻ dữ liệu và không gian lưu trữ cho một máy chủ web chạy trong suốt một năm, có lượng phân mảnh chính xác là 0.0 phần trăm (xem hình minh hoạ ở đầu bài viết).

Như vậy chúng ta đã biết vì sao việc chống phân mảnh có một vai trò nhỏ hơn nhiều trên *NIX so với trên Windows. Đây cũng là lý do vì sao các công cụ chống phân mảnh ổ đĩa trên thị trường UNIX hầu như vắng bóng. Việc đơn giản nhất, nếu bạn muốn làm, là sao lưu hệ thống file của bạn bằng dump và khôi phục lại với restore. Quá trình restore sẽ “xào” lại không gian cho các file trên đĩa sao cho chúng lại trở nên liên tục với nhau.

P.S: Bài viết này chủ yếu dành cho các hệ thống file cũ của Windows là FAT và FAT32. Hệ thống file NTFS, được phát hành đầu tiên với Windows NT, đã được cải tiến trên nhiều phương diện trong thiết kế (đặc biệt là về bảo mật). Các máy chủ Windows bây giờ có xu hướng dùng toàn bộ là NTFS vì FAT32 đã không còn phù hợp nữa, và vì ngoài NTFS thì chẳng còn lựa chọn nào khác cho nền tảng này. Tuy nhiên thực tế đáng buồn là phân mảnh vẫn còn là một vấn đề lớn, ngay cả với NTFS.

Đông Thao

Tài liệu tham khảo

About dongthao

The best things in life, they are free ... (Cry on my shoulder lyric)
This entry was posted in Linux Tutorial and tagged , , . Bookmark the permalink.

Có 3 phản hồi tại Sự phân mảnh trên UNIX file system

  1. pclouds nói:

    RAID có cái gì mà có thể 0% fragmentation? Chỉ cần xoá một tập tin là đã có fragmentation rồi.

  2. Minh nói:

    Chào anh,

    Bài viết này của anh nếu là nói về kĩ thuật chống/giảm phân mảnh trên dòng UNIX thì ngắn (chỉ nêu có 2 điểm); còn nếu để giải thích vì sao trên dòng UNIX không có phần mềm chống phân mảnh thì dài.

    Minh.

  3. Pingback: Một số entry trên blog kỹ thuật máy tính « THƯƠNG HIỆU BLOG

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s