Тестирование будет всегда указывать на текущее тестирование. Вы ничего не должны изменять, если Вы хотите остаться на тестировании. Единственное время, которое необходимо было бы изменить, чтобы остаться на тестировании, - то, при определении выпуска по имени, например:
deb http://ftp.us.debian.org/debian wheezy main
После просмотра кода различных утилит и кода ядра в течение некоторого времени кажется, что то, что @Hauke предлагает , верно - является ли файловая система ext2
/ ] ext3
/ ext4
определяется только включенными параметрами.
Со страницы Википедии на ext4
:
Обратная совместимость
ext4 обратно совместима с ext3 и ext2, что позволяет монтировать ext3 и ext2 как ext4. Это немного улучшит производительность, потому что некоторые новые функции ext4 также могут использоваться с ext3 и ext2, например, новый алгоритм распределения блоков.
ext3 частично совместима с ext4. То есть ext4 может быть смонтирован как ext3 (используя "ext3" в качестве типа файловой системы при монтировании). Однако, если раздел ext4 использует экстенты (основная новая функция ext4), то возможность монтирования как ext3 теряется.
Как, скорее всего, уже известно, существует аналогичная совместимость между ext2
и ext3
.
После просмотра кода , который blkid
использует для различения различных ext
файловых систем , я смог превратить файловую систему ext4
в что-то распознается как ext3
(а оттуда в ext2
).Вы должны иметь возможность повторить это с помощью:
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
Первый blkid
вывод:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" SEC_TYPE="ext2" TYPE="ext4"
Второй:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" SEC_TYPE="ext2" TYPE="ext3"
И последний:
testfs: UUID="78f4475b-060a-445c-a5d2-0f45688cc954" TYPE="ext2"
Обратите внимание, что мне пришлось использовать новую версию e2fsprogs
, чем было доступно в моем дистрибутиве, чтобы получить флаг metadata_csum
. Причина установки, а затем сброса этого параметра заключалась в том, что я не нашел другого способа повлиять на базовый флаг EXT4_FEATURE_RO_COMPAT_GDT_CSUM
. Базовый флаг для metadata_csum
( EXT4_FEATURE_RO_COMPAT_METADATA_CSUM
) и EXT4_FEATURE_RO_COMPAT_GDT_CSUM
являются взаимоисключающими. Установка metadata_csum
отключает EXT4_FEATURE_RO_COMPAT_GDT_CSUM
, но снятие настройки metadata_csum
не приводит к повторному включению последнего.
Не имея глубоких знаний о внутреннем устройстве файловой системы, кажется либо:
Контрольная сумма журнала должна быть определяющей функцией файловой системы, созданной как ext4
, что вы действительно не должны отключить и тот факт, что мне удалось это сделать, на самом деле является ошибкой в e2fsprogs
. Или
Все функции ext4
всегда были предназначены для отключения, и их отключение действительно превращает файловую систему в файловую систему ext3
.
В любом случае высокий уровень совместимости между файловыми системами явно является целью дизайна, сравните это с ReiserFS и Reiser4, где Reiser4 - это полная переработка. Что действительно важно, так это то, поддерживаются ли имеющиеся функции драйвером, который используется для монтирования системы.Как отмечается в статье в Википедии, драйвер ext4
можно использовать с ext3
и ext2
(на самом деле существует опция ядра, всегда использующая драйвер ext4
и отбросить остальные). Отключение функций просто означает, что более ранние драйверы не будут иметь проблем с файловой системой, и поэтому нет причин мешать им монтировать файловую систему.
Чтобы различать разные файловые системы ext
в программе на C, лучше всего использовать libblkid
. Это часть util-linux
, и это то, что команда mount
использует для определения типа файловой системы. Документация по API находится здесь .
Если вам нужно выполнить собственную реализацию проверки, то тестирование тех же флагов, что и libblkid
, будет правильным решением. Хотя, в частности, в связанном файле нет упоминания о флаге EXT4_FEATURE_RO_COMPAT_METADATA_CSUM
, который, похоже, проверяется на практике.
Если вы действительно хотите уснуть, то проверка контрольных сумм журнала может быть верным способом выяснить, является ли файловая система без этих флагов (или, возможно, была ) ext4
].
На самом деле несколько проще пойти в противоположном направлении и преобразовать файловую систему ext2
в ext4
:
truncate -s 100M test
mkfs.ext2 test
blkid test
tune2fs -O has_journal test
blkid test
tune2fs -O huge_file test
blkid test
Три 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"
Тот факт, что функции ext3
/ ext4
могут быть так легко включены в файловой системе, которая начиналась как ext2
, вероятно, наилучшая демонстрация того, что Тип файловой системы действительно определяется функциями.
Не прямой ответ, но при просмотре вывода tune2fs -l ...
для каждого типа файловой системы показаны следующие различия .
EXT3Функции файловой системы: ext_attr resize_inode dir_index filetype sparse_super
Особенности файловой системы EXT4Особенности файловой системы: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super_
EXT4] dir_index тип файла needs_recovery extension flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Не показывает параметров для ведения журнала.
EXT3Показывает это:
Journal inode: 8
EXT4
Показывает это:
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 1967934