Sau khi xem mã cho các tiện ích khác nhau và mã hạt nhân một thời gian, có vẻ như những gì @Hauke đề xuất là đúng - liệu hệ thống tệp có ext2
/ ext3
/ ext4
được xác định hoàn toàn bởi các tùy chọn được bật hay không.
Từ trang Wikipedia trên ext4
:
Khả năng tương thích ngược
ext4 tương thích ngược với ext3 và ext2, cho phép gắn ext3 và ext2 thành ext4. Điều này sẽ cải thiện hiệu suất một chút, bởi vì một số tính năng mới của ext4 cũng có thể được sử dụng với ext3 và ext2, chẳng hạn như thuật toán phân bổ khối mới.
ext3 tương thích một phần với ext4. Nghĩa là, ext4 có thể được gắn dưới dạng ext3 (sử dụng "ext3" làm kiểu hệ thống tập tin khi gắn). Tuy nhiên, nếu phân vùng ext4 sử dụng phạm vi (một tính năng mới chính của ext4), thì khả năng gắn kết như ext3 sẽ bị mất.
Như hầu hết có lẽ đã biết, có sự tương thích tương tự giữa ext2
và ext3
.
Sau khi xem mã blkid
sử dụng để phân biệt các ext
hệ thống tập tin khác nhau , tôi có thể biến một ext4
hệ thống tập tin thành một cái gì đó được công nhận là ext3
(và từ đó đến ext2
). Bạn sẽ có thể lặp lại điều này với:
truncate -s 100M testfs
mkfs.ext4 -O ^64bit,^extent,^flex_bg testfs <<<y
blkid testfs
tune2fs -O ^huge_file,^dir_nlink,^extra_isize,^mmp testfs
e2fsck testfs
tune2fs -O metadata_csum testfs
tune2fs -O ^metadata_csum testfs
blkid testfs
./e2fsprogs/misc/tune2fs -O ^has_journal testfs
blkid testfs
Đầu blkid
ra đầu tiên là:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" SEC_TYPE="ext2" TYPE="ext4"
Thứ hai là:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" SEC_TYPE="ext2" TYPE="ext3"
Và cái cuối cùng:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" TYPE="ext2"
Lưu ý rằng tôi phải sử dụng một phiên bản mới e2fsprogs
hơn có sẵn trong bản phân phối của mình để lấy metadata_csum
cờ. Lý do để thiết lập, sau đó xóa điều này là vì tôi không tìm thấy cách nào khác để ảnh hưởng đến EXT4_FEATURE_RO_COMPAT_GDT_CSUM
cờ bên dưới . Cờ cơ bản cho metadata_csum
( EXT4_FEATURE_RO_COMPAT_METADATA_CSUM
) và EXT4_FEATURE_RO_COMPAT_GDT_CSUM
loại trừ lẫn nhau. Cài đặt metadata_csum
vô hiệu hóa EXT4_FEATURE_RO_COMPAT_GDT_CSUM
, nhưng bỏ cài đặt metadata_csum
không kích hoạt lại cái sau.
Kết luận
Thiếu kiến thức sâu sắc về các phần bên trong hệ thống tập tin, có vẻ như:
Nhật ký kiểm tra có nghĩa là một tính năng xác định của một hệ thống tập tin được tạo ra vì ext4
bạn thực sự không cần phải vô hiệu hóa và thực tế là tôi đã quản lý đây thực sự là một lỗi e2fsprogs
. Hoặc là,
Tất cả các ext4
tính năng luôn được thiết kế để bị vô hiệu hóa và vô hiệu hóa chúng làm cho hệ thống tập tin với tất cả ý định trở thành mục đích của một ext3
hệ thống tập tin.
Dù mức độ tương thích cao giữa các hệ thống tập tin rõ ràng là một mục tiêu thiết kế, hãy so sánh điều này với ReiserFS và Reiser4 trong đó Reiser4 là một thiết kế lại hoàn chỉnh. Điều thực sự quan trọng là liệu các tính năng hiện tại có được hỗ trợ bởi trình điều khiển được sử dụng để gắn kết hệ thống hay không. Như các ghi chú bài viết Wikipedia các ext4
lái xe có thể được sử dụng với ext3
và ext2
cũng (trong thực tế có một tùy chọn hạt nhân luôn luôn sử dụng các ext4
trình điều khiển và mương khác). Vô hiệu hóa các tính năng chỉ có nghĩa là các trình điều khiển trước đó sẽ không có vấn đề gì với hệ thống tệp và vì vậy không có lý do gì để ngăn chúng gắn hệ thống tệp.
khuyến nghị
Để phân biệt giữa các ext
hệ thống tập tin khác nhau trong một chương trình C, libblkid
dường như là điều tốt nhất để sử dụng. Nó là một phần của util-linux
và đây là những gì mount
lệnh sử dụng để cố gắng xác định loại hệ thống tập tin. Tài liệu API ở đây .
Nếu bạn phải tự thực hiện kiểm tra, thì thử nghiệm các cờ tương tựlibblkid
dường như là cách đúng đắn để đi. Mặc dù đáng chú ý là tập tin được liên kết không có đề cập đến EXT4_FEATURE_RO_COMPAT_METADATA_CSUM
cờ dường như được thử nghiệm trong thực tế.
Nếu bạn thực sự muốn đi cả con lợn, thì việc xem xét tổng kiểm tra có thể là một cách chắc chắn để tìm kiếm nếu một hệ thống tập tin không có các cờ này là (hoặc có lẽ là ) ext4
.
Cập nhật
Thực sự dễ dàng hơn để đi theo hướng ngược lại và thúc đẩy một ext2
hệ thống tập tin tới ext4
:
truncate -s 100M test
mkfs.ext2 test
blkid test
tune2fs -O has_journal test
blkid test
tune2fs -O huge_file test
blkid test
Ba thông số blkid
:
test: UUID="59dce6f5-96ed-4307-9b39-6da2ff73cb04" TYPE="ext2"
test: UUID="59dce6f5-96ed-4307-9b39-6da2ff73cb04" SEC_TYPE="ext2" TYPE="ext3"
test: UUID="59dce6f5-96ed-4307-9b39-6da2ff73cb04" SEC_TYPE="ext2" TYPE="ext4"
Thực tế là ext3
/ ext4
tính năng có thể dễ dàng bằng cách kích hoạt trên một hệ thống tệp bắt đầu như ext2
có lẽ là minh chứng tốt nhất cho thấy loại hệ thống tệp thực sự được xác định bởi các tính năng.