Сообщение об ошибке исходит из этой строки в<Linux kernel source code>/fs/ext4/super.c
:
if (ext4_has_unknown_ext4_ro_compat_features(sb)) {
ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of "
"unsupported optional features (%x)",
(le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) &
~EXT4_FEATURE_RO_COMPAT_SUPP));
Заполнитель для числа в сообщении об ошибке — %x
, поэтому число 400 в фактическом сообщении об ошибке — это шестнадцатеричное число 0x400. И это одно, если признаки идентифицируются константами EXT4_FEATURE_RO_COMPAT_
.
Определения этих констант можно найти в <Linux kernel source code>/fs/ext4/ext4.h
:
#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM 0x0400
Функция dir_nlink
, упомянутая sourcejedi, имеет адрес 0x20, а не 0x400:
#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
Таким образом, MR3020 не смог смонтировать файловую систему в режиме чтения/записи, поскольку его операционная система не может обрабатывать контрольные суммы метаданных ext4. Поэтому вам нужно отключить эту функцию, используя систему Linux, которую вы использовали для создания USB-накопителя. Переместите USB-накопитель обратно в эту систему (, не монтируйте файловую систему ext4 )и запустите:
tune2fs -O^metadata_csum /dev/sdX2
(замените X любым фактическим идентификатором USB-накопителя в вашей системе Linux.)
После успешного выполнения этой команды функция metadata_csum
будет отключена в файловой системе ext4 USB-накопителя, и теперь MR3020 сможет ее использовать.
sudo не поддерживает ваши переменные окружения. Попробуйте
sudo JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 apt-get...
Если это не разрешено вашей конфигурацией sudo, попробуйте sudo -i
, а затем JAVA_HOME=... apt-get...
, как указано выше
Критическое сообщение об ошибке:
/usr/sbin/update-info-dir: 2: /etc/environment: JAVA_HOME: not found
Это указывает на то, что сообщение об ошибке исходит от /usr/sbin/update-info-dir
, который представляет собой сценарий, который может выполняться как часть операций установки/удаления пакета. Он читает (ищет )файл /etc/environment
и обнаруживает там ошибку.
/etc/environment
должен содержать только назначения переменных окружения в стиле оболочки POSIX --, т.е.
VARIABLE_NAME=value
Важно, чтобы не было пробелов до или после знака равенства:Если есть пробелы, имя переменной будет интерпретировано как команда оболочки, и оболочка попытается выполнить ее.
Я предполагаю, что ваш файл /etc/environment
, вероятно, содержит что-то вроде
JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64
поэтому вместо того, чтобы назначать путь к переменной среды $JAVA_HOME
, оболочка, читающая файл, интерпретирует его как команду оболочки, которую необходимо выполнить. Он попытается выполнить команду с именем буквально JAVA_HOME
с двумя параметрами, =
и /usr/lib/jvm/java-8-openjdk-amd64
. Поскольку команды с именем JAVA_HOME
не существует, это приведет к появлению сообщения об ошибке.
Отредактируйте файл /etc/environment
и удалите все пробелы до/после знака равенства в назначениях переменных среды.