Powered by Blogger.

Các hệ thống file của Linux

GIT – Khi hệ điều hành bị tắt bất thình lình (mất điện, lỗi phần mềm, v.v..), trong hệ thống file xuất hiện lỗi do file đang ghi dở, địa chỉ chưa được cập nhật …

Nếu hệ thống file đang dùng không thuộc loại hệ thống file nhật ký (ext2,…), khi khởi động lại, hệ điều hành sẽ phát hiện được lần tắt bị lỗi (unclean shutdown) trước đó và tự động dùng phần mềm fsck (file system check) để soát và sửa lỗi. Nếu ổ cứng lớn, quá trình chạy fsck sẽ khá lâu và nếu lỗi nặng fsck không sửa được nó sẽ báo cho hệ điều hành khởi động vào chế độ single user mode để người dùng sửa.
Hệ thống file nhật ký tránh việc hỏng hệ thống file bằng cách ghi một nhật ký. Nhật ký là một file riêng ghi lại mọi thay đổi của hệ thống file vào một vùng đệm (thay vì ghi thẳng vào hệ thống file trên ổ cứng). Sau từng khoảng thời gian định trước, những thay đổi đó được thực hiện chính thức vào hệ thống file. Nếu giữa khoảng thời gian đó, hệ thống bị tắt đột ngột, file nhật ký sẽ được dùng để khôi phục lại các thông tin chưa lưu và tránh làm hỏng metadata của hệ thống file.
[Metadata của hệ thống gồm các thông tin về cấu trúc dữ liệu trên ổ cứng: ngày giờ tạo, xoá file và thư mục, tăng giảm dung lượng file, chủ nhân của file, …]
Tóm lại, hệ thống file nhật ký là một hệ thống file tự chữa lỗi bằng cách dùng một file nhật ký lưu lại mọi thay đổi trước khi thay đổi đó được thực hiện thật sự vào hệ thống file (xem hình 1).
Các hệ thống file của Linux
Hình 1: Sơ đồ một hệ thống file nhật ký.
(Các hệ  hiện tại, sau khoảng 25-30 lần mount một partition, thường bằng số lần khởi động hệ thống, sẽ tự động thực hiện kiểm tra hệ thống file trong các partition đã mount. Do vậy, thỉnh thoảng ta thấy hệ thống khởi động lâu hơn thường lệ -ND)

Lịch sử hệ thống file nhật ký của Linux.

Hệ thống file nhật ký đầu tiên là IBM Journaled File System (JFS) ra đời năm 1990, version hiện nay là JFS2. Năm 1994, công ty Silicon Graphics công bố hệ thống file nhật ký cao tốc XFS cho hệ điều hành IRIX. XFS được chuyển vào Linux năm 2001. Smart File System (SFS) của công ty Amiga ra đời năm 1998 và công bố thành nguồn mở, dùng trong Linux năm 2005. Hệ thống file nhật ký phổ biến nhất hiện đang dùng trong các hệ Linux là ext3fs (third extended file system, thường viết tắt là ext3), được đưa vào Linux năm 2001. Ext3 là mở rộng (thêm khả năng nhật ký) của hệ thống file ext2 (không nhật ký). Cuối cùng, hệ thống file ReiserFS với nhiều tính năng hay, được chấp nhận rộng rãi nhưng hiện tác giả đang gặp khó khăn cá nhân nên không tiếp tục được.

Các kiểu ghi nhật ký.

Hệ thống file nhật ký dùng một file nhật ký làm vùng đệm lưu mọi thay đổi của hệ thống file nhưng có nhiều kiểu ghi nhật ký khác nhau. Ba kiểu thường dùng nhất là writeback,ordered và data.
Khi dùng kiểu writeback, chỉ các metadata được lưu nhật ký còn các block dữ liệu được ghi thẳng vào vị trí của nó trên ổ cứng. Cách này bảo vệ được cấu trúc dữ liệu nhưng bản thân dữ liệu vẫn lỗi (ví dụ hệ thống bị tắt sau khi metadata đã được ghi nhưng trước khi dữ liệu được ghi vào ổ cứng). Để tránh điều đó có thể dùng kiểu ordered: trước tiên dữ liệu phải được ghi xong vào ổ cứng rồi sau đó metadata mới được lưu vào nhật ký. Kiểu data là an toàn nhất: cả metadata và dữ liệu đều được ghi trước vào file nhật ký rồi mới cập nhật vào ổ cứng. Tuy nhiên tốc độ chậm vì dữ liệu phải ghi hai lần (đầu tiên ghi vào nhật ký sau đó ghi vào ổ cứng).
Kiểu ghi nhật ký cũng còn một số khía cạnh khác nhau nữa. Ví dụ nội dung nhật ký được ghi vào ổ cứng khi file nhật ký gần đầy hay là ghi sau từng khoảng thời gian nhất định?

Các hệ thống file nhật ký hiện nay.

Dưới đây xem xét bốn hệ thống file nhật ký phổ biến nhất hiện nay. Mỗi loại đều có ưu nhược điểm riêng.

JFS2

JFS2 là hệ thống file nhật ký đầu tiên đã nhiều năm dùng trong hệ điều hành AIX của IBM trước khi được mang sang Linux. JFS2 là hệ thống file 64 bit hỗ trợ kiến trúc đa xử lý.
JFS2 dùng kiểu ghi nhật ký ordered ở mức nhỏ hơn giây. JFS2 cũng dùng cách ghép các block thành từng nhóm liên tục (gọi là một extent) trong bộ nhớ trước khi ghi vào ổ cứng, do đó tốc độ ghi và đọc nhanh hơn và cũng giảm được lượng metadata cần quản lý. Nếu không dùng extent, metadata được cập nhật cho từng block dữ liệu, khi dùng extent, metadata chỉ cập nhật cho từng nhóm block.
JFS2 dùng cấu trúc thư mục kiểu B+ để duyệt nhanh hơn. JFS2 không có chính sách ghi nhật ký vào ổ cứng riêng mà dựa vào thời gian hết hạn (timeout) của kupdate daemon.

XFS

XFS cũng là hệ thống file nhật ký 64-bit có tốc độ rất cao dùng cây thư mục và vị trí file kiểu B+. XFS cũng dùng cách lưu file extent-based, dung lượng block có thể biến thiên từ 512 bytes đến 64KB.
Một tính năng đáng chú ý khác là XFS có tốc độ I/O cố định dành riêng và I/O trực tiếp: dữ liệu được copy trực tiếp giữa ổ cứng và vùng đệm (không phải qua nhiều vùng đệm khác nhau). XFS dùng kiều ghi nhật ký writeback.
XFS sử dụng kỹ thuật ghi trễ (Allocate-on-flush hoặc còn gọi là delayed allocation): khi các block trên ổ cứng được bố trí để chuẩn bị ghi dữ liệu, dung lượng ổ tương ứng được trừ đi khỏi bộ đếm dung lượng còn trống nhưng chưa thực sự được đánh dấu đã dùng. Dữ liệu vẫn nằm chờ trong bộ nhớ cho đến khi nó được ghi vào ổ cứng vì các nguyên nhân khác nhau.
Như vậy, nhiều dữ liệu được tích lại chờ trong bộ nhớ cho đến khi được ghi đồng thời, làm giảm cường độ sử dụng CPU, và giảm phân mảnh ổ cứng đặc biệt với những file tăng chậm. Nó cũng cho phép bố trí các vùng liên tục khi có nhiều file cùng lớn lên đồng thời.

EXT3 (Third extended file system – ext3fs)

Ext3 là hệ thống file nhật ký phổ biến nhất hiện nay và là cuộc cách mạng từ ext2. Ext3 tương thích với ext2 vì dùng cùng cấu trúc chỉ thêm vào phần nhật ký. Thậm chí có thể mount một partition ext3 như ext2 hoặc convert ext2 sang ext3 (dùng công cụ tune2fs).
Ext3 có thể dùng cả ba kiểu nhật ký (writeback, ordered và data) nhưng mặc định là ordered. Chính sách ghi vào ổ cứng có thể cấu hình được, mặc định là khi đầy ¼ nhật ký hoặc timeout của một trong những bộ đếm thời gian.
Một trong những nhược điểm chính của ext3 là phát triển từ ext2 lên, không phải là hệ thống file nhật ký được thiết kế từ đầu. Do đó nó thiếu một số tính năng tiên tiến mới đây có trong một số hệ thống file nhật ký khác (ví dụ extent-based). Tốc độ cũng chậm hơn các hệ thống file khác như ReiserFS, JFS và XFS nhưng lại tốn ít CPU và bộ nhớ hơn.

ReiserFS

ReiserFS là hệ thống file nhật ký được phát triển từ đầu nhằm vào nhật ký. Kiểu ghi nhật ký mặc định là ordered và cho phép resize online để tăng dung lượng partition. ReiserFS cũng hỗ trợ kiểu đặt nhiều file nhỏ trong một block để giảm phân mảnh và tăng tốc độ so với ext3.
ReiserFS v3 có nhiều tính năng hiện đại như cây thư mục B+. Định dạng cơ bản của hệ thống file dựa trên một cây B+ duy nhất, do đó tìm kiếm nhanh hơn và mở rộng dễ. Chính sách ghi từ nhật ký vào ổ cứng tuỳ theo kích thước nhật ký nhưng dựa trên số block cần ghi.

Reiser4

Sau khi ReiserFS được tích hợp thành công vào nhân Linux và được nhiều bản Linux chấp nhận, Namesys (công ty đứng đằng sau ReiserFS) tiếp tục xây dựng một hệ thống file nhật ký mới Reiser4. Reiser4 được thiết kế từ đầu như một hệ thống file nhật ký mới với nhiều tính năng tiên tiến.
Sau khi chủ công ty Namesys bị kết án hình sự, các hoạt động thương mại về Reiser4 đã ngừng. Hiện nay đang có những cố gắng tiếp tục.

EXT4 (Fourth extended file system – ext4fs)

Hệ thống file nhật ký mở rộng thứ tư (ext4) là sự phát triển của ext3, tương thích với ext3 (do đó có thể mount một partition ext4 như ext3 và ngược lại) và có thêm nhiều tính năng tiên tiến.
Thứ nhất, ext4 là hệ thống file 64-bit được thiết kế để hỗ trợ các dung lượng rất lớn (toàn hệ thống tới 1exabyte và một file tới 16 terabyte). Nó cũng có thể dùng cách lưu file theo nhóm block (extents), một extent tới 128 MB vùng ổ cứng liên tục với các block 4KB (nhưng nếu dùng thì sẽ không tương thích với ext3 nữa). Cũng như XFS và Reiser4, ext4fs dùng kỹ thuật ghi trễ dữ liệu lên ổ cứng. Nội dung file nhật ký được tính số kiểm tra (checksum) do đó file nhật ký có độ tin cậy cao. Thay cho các cấu trúc tiêu chuẩn B+ hoặc B*, ext4 dùng một biến thể của cấu trúc B tree gọi là H tree, có số thư mục con lớn hơn (64.000 thư mục trong khi ext3 giới hạn ở 32.000).
Mặc dù kỹ thuật ghi trễ làm giảm độ phân mảnh nhưng sau một thời gian một hệ thống file lớn vẫn bị phân mảnh. Một công cụ xoá phân mảnh online (e4defrag) được xây dựng để xử lý việc đó. Có thể dùng công cụ này để xoá phân mảnh một file riêng rẽ hoặc cả hệ thống file.
Một nét khác biệt giữa ext3 và ext4 là độ chia thời gian. Trong ext3, mốc thời gian (timestamp) nhỏ nhất là 1 giây. Ext4 nhìn về tương lai: khi tốc độ xử lý và tốc độ giao diện tăng lên, cần chia thời gian nhỏ hơn. Mốc thời gian tối thiểu của ext4 là 1 nano giây.
Ngày 11/10/2008, bản vá đánh dấu mã ext4 như mã ổn định được tích hợp vào nhân Linux 2.6.28, kết thúc giai đoạn phát triển và khuyên dùng ext4. Nhân Linux phiên bản 2.6.28 chứa hệ thống file ext4 được chính thức phát hành ngày 25/12/2008.
Một số bản Linux sắp phát hành (OpenSuse, …) cũng sẽ chính thức dùng ext4.
    Blogger Comment
    Facebook Comment