Ext4

Hệ thống file nhật ký ext4 hoặc Hệ thống file mở rộng thứ tư là một hệ thống file nhật ký cho Linux, được phát triển như là sự kế thừa cho ext3. Đây là hệ thống file mặc định cho hầu hết các bản phân phối Linux.

== Lịch sử ==
ext4 ban đầu là một loạt các phần mở rộng tương thích ngược với ext3, nhiều phần mở rộng ban đầu được phát triển bởi Cluster File Systems cho hệ thống file Luster giữa năm 2003 và 2006, nhằm mở rộng giới hạn lưu trữ và thêm các cải tiến hiệu suất khác. Tuy nhiên, các nhà phát triển nhân Linux khác phản đối việc chấp nhận các phần mở rộng cho, và đề nghị fork mã nguồn của ext3, đổi tên nó thành ext4, và thực hiện tất cả sự phát triển đó, mà không ảnh hưởng đến người dùng ext3 hiện tại. Đề xuất này đã được chấp nhận và vào ngày 28 tháng 6 năm 2006, Theodore Ts'o, người duy trì ext3, đã công bố kế hoạch phát triển mới cho ext4.

Phiên bản phát triển sơ bộ của ext4 đã được đưa vào phiên bản 2.6.19 của nhân Linux. Ngày 11 tháng 10 năm 2008, các bản vá đánh dấu ext4 là mã ổn định đã được hợp nhất trong kho lưu trữ mã nguồn Linux 2.6.28, biểu thị sự kết thúc của giai đoạn phát triển và khuyến nghị áp dụng ext4. Kernel 2.6.28, chứa hệ thống file ext4, cuối cùng đã được phát hành ngày 25 tháng 12 năm 2008 Ngày 15 tháng 1 năm 2010, Google đã thông báo rằng họ sẽ nâng cấp cơ sở hạ tầng lưu trữ của mình từ ext2 lên ext4. Ngày 14 tháng 12 năm 2010, Google cũng tuyên bố sẽ sử dụng ext4, thay vì YAFFS, trên Android 2.3.

== Tính năng, đặc điểm ==
- Hệ thống file lớn
- Extents
- Tương thích ngược
- Phân bổ trước liên tục
- Phân bổ trễ
- Không giới hạn số lượng thu mục con
- Kiểm tra nhật ký
- Kiểm tra siêu dữ liệu
- Faster file system checking

- Phân bổ đa block
- Cải thiện dấu thời gian
- Mã hóa trong suốt

== Hạn chế ==
Năm 2008, nhà phát triển chính của hệ thống file ext3 và ext4, Theodore Ts'o, đã tuyên bố rằng mặc dù ext4 có các tính năng được cải thiện, nhưng nó không phải là một bước tiến lớn, nó sử dụng công nghệ cũ và là một điểm dừng. Ts'o tin rằng Btrfs là hướng tốt hơn bởi vì "nó mang lại sự cải thiện về khả năng mở rộng, độ tin cậy và dễ quản lý". Btrfs cũng có "một số ý tưởng thiết kế tương tự mà reiser3/4 đã có". Tuy nhiên, ext4 đã tiếp tục đạt được các tính năng mới như mã hóa file và kiểm siêu dữ liệu.

Hệ thống file ext4 không xem trọng thuộc tính file "xóa an toàn", được cho là gây ra việc ghi đè các file khi xóa. Một bản vá để thực hiện xóa an toàn đã được đề xuất vào năm 2011, nhưng không giải quyết được vấn đề dữ liệu nhạy cảm kết thúc trong hệ thống file nhật ký.

== Phân bổ trễ và mất dữ liệu tiềm năng ==
Do phân trễ làm thay đổi hành vi mà các lập trình viên đã dựa vào ext3, tính năng này gây ra một số rủi ro mất dữ liệu bổ sung trong trường hợp hệ thống gặp sự cố hoặc mất điện trước khi tất cả dữ liệu được ghi vào đĩa. Do đó, ext4 trong các phiên bản kernel 2.6.30 trở lên sẽ tự động xử lý các trường hợp này như ext3.

Kịch bản điển hình trong đó điều này có thể xảy ra là một chương trình thay thế nội dung của file mà không buộc ghi vào đĩa bằng fsync. Có hai cách phổ biến để thay thế nội dung của file trên các hệ thống Unix:

- codice_10

- codice_12

Sử dụng codice_14 thường xuyên hơn để giảm rủi ro cho ext4 có thể dẫn đến các hình phạt về hiệu năng đối với các hệ thống file ext3 được gắn cờ codice_15 (mặc định trên hầu hết các bản phân phối Linux). Cho rằng cả hai hệ thống file sẽ được sử dụng trong một thời gian, điều này làm phức tạp vấn đề cho các nhà phát triển ứng dụng người dùng cuối. Đáp lại, ext4 trong nhân Linux 2.6.30 và mới hơn phát hiện sự xuất hiện của các trường hợp phổ biến này và buộc các file phải được phân bổ ngay lập tức. Với một phí tổn nhỏ trong hiệu suất, điều này cung cấp ngữ nghĩa tương tự như chế độ được đặt hàng ext3 và tăng khả năng một trong hai phiên bản của file sẽ sống sót sau sự cố. Hành vi mới này được kích hoạt theo mặc định, nhưng có thể bị vô hiệu hóa với tùy chọn gắn kết "noauto_da_alloc".

Các bản vá mới đã trở thành một phần của kernel dòng chính 2.6.30, nhưng các bản phân phối khác nhau đã chọn backport chúng thành 2.6.28 hoặc 2.6.29.

Các bản vá này hoàn toàn không ngăn chặn mất dữ liệu tiềm năng hoặc trợ giúp với các file mới. Cách duy nhất để an toàn là viết và sử dụng phần mềm thực hiện codice_14 khi cần. Các vấn đề về hiệu năng có thể được giảm thiểu bằng cách hạn chế ghi đĩa quan trọng cần codice_14 xảy ra ít thường xuyên hơn.

== Triển khai ==
Linux kernel Virtual File System là một hệ thống con hoặc lớp bên trong kernel Linux. Đó là kết quả của nỗ lực rất nghiêm túc để tích hợp nhiều hệ thống file vào một cấu trúc đơn có trật tự. Ý tưởng chính, bắt nguồn từ công việc tiên phong được thực hiện bởi các nhân viên của Sun Microsystems vào năm 1986, là trừu tượng hóa một phần của hệ thống file phổ biến cho tất cả các hệ thống file và đặt mã đó vào một lớp riêng gọi hệ thống tập tin cụ thể để thực sự quản lý dữ liệu.

Tất cả các lời gọi hệ thống liên quan đến các file (hoặc file giả) được chuyển đến Linux kernel Virtual File System để xử lý ban đầu. Các lời gọi này, đến từ các quy trình của người dùng, là các lời gọi POSIX tiêu chuẩn, chẳng hạn như codice_18, codice_19, codice_20, codice_21, v.v.

=== Khả năng tương thích với Windows và Macintosh ===
ext4 chưa có nhiều hỗ trợ như ext2 và ext3 trên các hệ điều hành không phải Linux. ext2 và ext3 có các trình điều khiển ổn định như Ext2IFS, chưa có sẵn cho ext4. Có thể tạo các hệ thống file ext4 tương thích bằng cách vô hiệu hóa tính năng phạm vi và đôi khi chỉ định kích thước inode. Một tùy chọn khác để sử dụng ext4 trong Windows là sử dụng Ext2Fsd, trình điều khiển nguồn mở hỗ trợ ghi trong phân vùng ext4 với ghi nhật ký hạn chế. Cũng có thể xem và sao chép các file từ ext4 sang Windows, ngay cả khi đã bật tính năng mở rộng, với phần mềm Ext2Read. Gần đây, Paragon đã phát hành sản phẩm thương mại ExtFS for Windows, cho phép khả năng đọc/ghi cho ext2/3/4.

macOS có đầy đủ khả năng đọc/ghi ext2/3/4 thông qua phần mềm Paragon ExtFS, là một sản phẩm thương mại. Phần mềm miễn phí như ext4fuse chỉ hỗ trợ chỉ đọc với chức năng hạn chế.

== Xem thêm ==
- Btrfs
- So sánh hệ thống file
- Ext2Fsd
- JFS
- Danh sách các hệ thống file
- Reiser4
- XFS
- ZFS
- NTFS

== Liên kết ngoài ==
- Theodore Ts'o's discussion on ext4, ngày 29 tháng 6 năm 2006
- "ext4 online defragmentation" (materials from Ottawa Linux Symposium 2007)
- "The new ext4 filesystem: current status and future plans" (materials from Ottawa Linux Symposium 2007)
- Kernel Log: Ext4 completes development phase as interim step to btrfs, ngày 17 tháng 10 năm 2008
- "Ext4 block and inode allocator improvements" (materials from Ottawa Linux Symposium 2008)
- "Ext4: The Next Generation of Ext2/3 Filesystem"
- Ext4 (and Ext2/Ext3) Wiki
- Ext4 wiki at kernelnewbies.org
- Native Windows port of Ext4 and other FS in CROSSMETA
- Ext2read A windows application to read/copy ext2/ext3/ext4 files with extent and LVM2 support.
- Ext2Fsd Open source ext2/ext3/ext4 read/write file system driver for Windows. ext4 is supported from version 0.50 onwards
- Ext4fuse Open source read-only ext4 driver for FUSE. (Supports Mac OS X 10.5 and later, using MacFuse)