• Thứ Ba, 16/12/2003 14:58 (GMT+7)

    Các hệ thống file trong Linux


    Với sự hình thành và phát triển của hệ điều hành Linux, giờ đây chúng ta có rất nhiều chọn lựa các hệ thống file (file system) cho từng loại ứng dụng. Bài viết này giới thiệu các hệ thống file tiên tiến được sử dụng trong Linux như Ext3, Reiserfs, XFS, và JFS có độ tin cậy cao và có khả năng ghi nhớ quá trình thao tác trên dữ liệu (journaling).

     

    Thế nào là journaling file system?
    Chúng ta hãy tìm hiểu sơ lược về cách làm việc mà các hệ thống Unix nói chung, Linux nói riêng, thao tác trên hệ thống file. Khi khởi động, hệ điều hành luôn luôn dùng một chương trình để kiểm tra tính toàn vẹn của hệ thống file, đó là trình fsck. Nếu nó phát hiện hệ thống file có dấu hiệu bất thường hoặc chưa được unmount do các nguyên nhân như mất điện hoặc hệ thống bị đứng đột ngột trong khi đang chạy, lúc đó fsck sẽ quét lại toàn bộ hệ thống file để cố gắng khôi phục lại dữ liệu. Quá trình kiểm tra và khôi phục dữ liệu (nếu có) nhanh hay chậm còn phụ thuộc vào dung lượng của ổ cứng, và với những hệ thống có dung lượng lưu trữ rất lớn như hiện nay (từ hàng chục đến hàng trăm gigabyte) thì phải mất hàng giờ để quét lại toàn bộ hệ thống ổ cứng. Cách làm này được áp dụng trên các hệ thống file Unix chuẩn ufs (Sun & HP) hoặc ext2 mà Linux đang sử dụng.
    Nếu hệ thống file có khả năng ghi lại (log) được các hoạt động mà hệ điều hành đã và đang thao tác trên dữ liệu thì hệ thống xác định được ngay những file bị sự cố mà không cần phải quét lại toàn bộ hệ thống file, giúp quá trình phục hồi dữ liệu trở nên tin cậy và nhanh chóng hơn. Hệ thống file như vậy được gọi là journaling file system.

     

    Hệ thống file Ext3
    Được xây dựng dựa trên cơ sở của hệ thống file chuẩn ext2 mà Linux đang sử dụng, ext3 đưa vào thêm chức năng mới vô cùng quan trọng, journaling file system, giúp thao tác dữ liệu an toàn hơn. Ext3 còn sử dụng cơ chế JBD (Journaling Block Device) để bảo vệ thông tin thao tác trên dữ liệu và được đánh giá là tin cậy hơn so với các hệ thống chỉ thực hiện journaling trên chỉ mục dữ liệu (journaling of meta-data only) như Reiserfs, XFS hay JFS. Với cách bảo vệ hai lần như vậy thì hiệu suất ghi dữ liệu có phần nào chậm hơn ext2; nhưng trong một vài trường hợp, nhờ thông tin trong journal log mà đầu từ ổ cứng di chuyển hợp lý hơn, nên tốc độ thao tác dữ liệu nhanh hơn. Đối với những ứng dụng ưu tiên cho độ tin cậy của dữ liệu hơn là tốc độ ghi đơn thuần thì ext3 là lựa chọn thích hợp. Ngoài ra, ext3 còn cho phép cải thiện tốc độ thao tác trên dữ liệu bằng cách thiết lập thông số cho hệ thống chỉ thực hiện journaling đối với thao tác trên dữ liệu (mode: data=writeback và data=ordered).
    Với mode data=writeback, quá trình khởi động nhanh, dữ liệu được ghi vào đĩa ngay sau khi đã ghi xong thông tin trong journal log (write back), với mode này đôi khi cũng xảy ra tình trạng dữ liệu bị hư nếu sự cố xảy ra ngay sau khi ghi journal log mà chưa kịp ghi vào đĩa, nhưng bù lại tốc độ thao tác file nhanh hơn trong một vài trường hợp. Với chế độ data=ordered, dữ liệu được ghi lên đĩa trước rồi mới đến journal log, cho phép luôn luôn bảo đảm tính toàn vẹn của dữ liệu trong mọi tình huống và đây cũng chính là chế độ mặc định của ext3. Với chế độ data=journal thì việc bảo vệ được thực hiện trên cả hai: dữ liệu và journal log; thông tin được ghi chi tiết và nhiều hơn giúp cải thiện tốc độ truy cập dữ liệu nhờ tối ưu việc di chuyển của đầu từ, hoạt động rất tốt đối với kiểu dữ liệu là database hoặc dữ liệu dùng chung trên mạng (NFS). Tuy nhiên do phải đọc lại nhiều loại thông tin trên journal log nên thời gian khởi động lại máy hơi chậm hơn so với hai chế độ trên một chút.  
    Vì bản chất cấu trúc của ext3 được xây dựng hoàn toàn dựa trên cơ sở của ext2 nên ta có thể chuyển đổi dễ dàng các dữ liệu đang tồn tại trên các hệ thống ext2 sang ext3 mà dữ liệu không hề bị ảnh hưởng và thực hiện tương đối dễ dàng, đơn giản. Với kernel Linux từ 2.4.15 trở lên thì ext3 đã có sẵn mà không cần phải đưa thêm vào (patch) như các phiên bản cũ. Hiện tại hãng Linux RedHat đã đưa sẵn module ext3 vào kernel 2.4.7-10 trong bản RedHat 7.2 của mình. 

      

    Hệ thống file Reiserfs

    Ý tưởng của việc xây dựng hệ thống file Reiserfs xuất phát từ yêu cầu tối ưu việc lưu trữ các file nhỏ và tăng tốc độ truy cập đến các file này. Reiserfs sử dụng phương pháp “B * Trees”  phát triển lên từ  “B + Trees” để tổ chức dữ liệu, theo đó một thư mục có thể chứa đến 100.000 thư mục con và đặc biệt là có thể cấp phát động inode: mỗi đối tượng chứa trong hệ thống file được đánh dấu bằng một chỉ số duy nhất; các hệ thống file khác thực hiện cấp phát inode tĩnh. Ngoài ra, Reiserfs cũng không cấp phát cố định dung lượng theo các khối 1KB hoặc 4KB như các hệ thống file khác thường làm mà sẽ cấp chính xác kích thước khối lưu trữ cần thiết; nhờ vậy tối ưu được dung lượng khi lưu trữ các file có kích thước nhỏ.
    Tóm lại, chọn Reiserfs để lưu trữ và truy cập các file nhỏ là tối ưu, với tốc độ truy cập file tăng từ 8-15 lần và dung lượng tiết kiệm được khoảng trên 5% so với hệ thống ext2 với các loại file có kích thước dưới 1 KB.  Reiserfs hỗ trợ thực hiện journaling trên chỉ mục dữ liệu (journaling of meta-data only).
    Muốn sử dụng Reiserfs trên Linux ta phải đưa các module này vào kernel và dùng các công cụ Reiserfs để định dạng partition. Ví dụ sau đây thực hiện chuyến đổi partition hda6 sang hệ thống file Reiserfs.

     /sbin/mkreiserfs /dev/hda6

    mount /dev/hda6 /squidcache –t reiserfs
    Thực tế với việc áp dụng hệ thống file Reiserfs trên  squid proxy server chạy trên Linux làm cho việc truy cập internet được cải thiện đáng kể do squid truy cập các files nhỏ (*.html, *.gif, *.class...) trong cache với  tốc độ cao.

     

    Hệ thống file XFS
    Được phát triển bởi công ty Silicon Graphic từ năm 1990 để khắc phục hạn chế của các hệ thống file hiện hành về kích thước và số lượng partition, directory và file. Ngày nay XFS đã sẵn sàng để sử dụng trong Linux với các tính năng vô cùng mạnh mẽ và ứng dụng trong các hệ thống có tính chuyên nghiệp cao.
    XFS là hệ thống file 64 bit, nó có thể quản lý được file có kích thước là 264-1 byte = 9 Exabyte  (do sử dụng số nguyên có dấu nên 1 bit dùng để biểu thị dấu), có kèm theo công cụ  Volume Manager cho phép quản lý lên tới 128 Volume, mỗi Volume có thể được ghép lên tới 100 partition đĩa cứng vật lý, hỗ trợ chức năng journaling đối với dữ liệu.
    Một đặc tính quan trọng của XFS đó là khả năng bảo đảm tốc độ truy cập dữ liệu cho các ứng dụng (Guaranteed Rate I/O),  cho phép các ứng dụng duy trì được tốc độ truy xuất dữ liệu trên đĩa, rất quan trọng đối với các hệ thống phân phối dịch vụ video có độ phân giải cao hoặc các ứng dụng xử lý thông tin vệ tinh đòi hỏi duy trì ổn định tốc độ thao tác dữ liệu. Kernel Linux 2.4.17 trở lên hỗ trợ rất tốt đối với hệ thống file này, để sử dụng cần phải patch lại kernel với các module của XFS.

     

    Hệ thống file JFS
    Được phát triển bởi IBM, JFS là hệ thống file 64 bit, xây dựng cho các internet file server với đặc điểm thời gian khởi động máy nhanh, dung lượng chứa dữ liệu cao. JFS hỗ trợ journaling cho dữ liệu, dựa trên phương pháp thường được sử dụng trong hệ cơ sở dữ liệu: ghi lại quá trình thao tác thay đổi file (transaction). Trong trường hợp có sự cố xảy ra thì hệ thống chỉ cần cho khôi phục lại transaction trước đó mà không cần phải đọc lại hết journal log, giúp cho quá trình phục hồi được nhanh hơn. JFS hỗ trợ tính năng Logical Volumes cho phép nối các partition vật lý thành các partition logic với dung lượng cao. Ngoài ra nó còn cho phép người dùng tuỳ biến cấp phát các khối từ  512, 1.024, 2.048 và 4.096 byte cho lưu trữ dữ liệu trên đĩa. Để sử dụng JFS trên Linux ta cũng phải patch lại kernel và cài thêm các công cụ JFS để định dạng đĩa.

    Hoàng Long – Arrive Technologies Inc.
    longh@atvn.com.vn


    Tài liệu tham khảo:

    http://www.redhat.com/support/wpapers/redhat/ext3/index.html

    http://www.namesys.com/

    http://oss.sgi.com/projects/xfs/papers/xfs_white/xfs_white_paper.html

    http://www-124.ibm.com/jfs/

    ID: A0301_86