Вопрос или проблема
Мне подарили новый ноутбук Asus BR1100FKA. Эта модель имеет основной накопитель – 128 ГБ eMMC. Я пытался установить EndeavourOS, но возникла ошибка. Установщик сообщает об “ошибке ввода/вывода” во время форматирования в ext4.
Спустя месяц, я все еще не могу понять, в чем дело. В качестве альтернативы я создал установочный USB-накопитель с постоянным хранением. Но 32 ГБ пространства не хватает.
Вот что я попробовал:
- Форматирование с помощью GParted в среде Live USB. GParted выдаёт более-менее одну и ту же ошибку при любом действии, которое меняет расположение, размер или файловую систему раздела. Исключение составляет NTFS. Она возвращает
Ошибка ввода/вывода при синхронизации устройства
, но раздел автоматически восстанавливается после монтирования. - Форматирование из Windows 10. Я пробовал AOMEI Assistant, EaseUS Partition Tool, DiskGenius и какой-то инструмент, который забыл. AOMEI Assistant не форматирует в ext4, если я специально не манипулирую диском C: на Win10. Таким образом, AOMEI будет выполнять свою операцию в режиме Win PE и как-то удастся. Однако полученный раздел ext4 подвержен случайным ошибкам. Вот список:
- Копирование файлов из директории
/home
через менеджер файлов Thunar с установленнымgvfs
не возвращает ошибок. Однако попытка смонтировать их через /etc/fstab всегда заканчивается неудачей и отправляет в режим аварийного восстановления. Только после комментирования ответственной строки в /etc/fstab мне удается нормально загрузиться. Ручное монтирование затем возвращает ошибку чтения суперблоков. - Используя
rsync
с опцией-v
, я вижу случайные строкиEXT4 ERROR
, но они прокручиваются слишком быстро. Возможно, попытаюсь поймать их позже. - Команда
cp
более стабильна, обычно завершается без ошибок. Хотя она также вызывает ту же ошибку /etc/fstab. Выдаваемая ошибка – ошибка ввода/вывода. - Команда
dd
очень нестабильна и завершаетсяошибкой ввода/вывода
. - Команда
ddrescue
никогда не выдавала ошибки, но копирование раздела ОС означает, что его нужно будет исправить позже. На Win10, насколько я знаю, это невозможно. - Поскольку Calamares по умолчанию форматирует раздел в первую очередь, я попробовал провести установку пустого Arch. При установке
base
,linux-lts
иlinux-firmware
через pacstrap возникло несколько ошибок ввода/вывода, и pacstrap просто остановился без установки после завершения загрузки. - Попробовал выполнить
fsck
на диске. После длинного списка ошибокfsck
завершился сI/O Error
на одном одиночном исправлении (не удалось воспроизвести на данный момент, список ошибок означает, что мне нужно нажимать клавишу Enter примерно час или автоматизировать нажатие и следить за последней ошибкой, что тоже занимает 30 минут).
- Копирование файлов из директории
- Обновление BIOS. Я обновил BIOS вручную через утилиту EZ Smart Flash от ASUS. Прошивка была загружена через приложение MyASUS на Win10. Слишком много различий не обнаружено.
- Отключение TPM. Никакой разницы, кроме того, что я не могу войти в Win10, как обычно.
- Ручное форматирование. Использовал команду
mkfs.ext4
с опцией-v
. Вот ошибка:Запись суперблоков и информации об учёте файловой системы: mkfs.ext4: Ошибка ввода/вывода при записи и закрытии файловой системы.
Много результатов в Google по ошибке I/O указывает на аппаратные сбои, хотя я сомневаюсь, что это так. Я также много читал о загрузке с eMMC, но хотел бы сначала разобраться с их форматированием. Есть некоторые люди, которые справились с этим благодаря настройкам BIOS, которых у меня нет.
Я пробовал GParted из KDE-Neon и EndeavourOS.
Та же история с моим ASUS BR1100FKA, 128 ГБ eMMC и Ubuntu 20.04.
Судя по всему, ноутбук имеет контроллер eMMC с проблемной реализацией CQE.
С версии ядра Linux 5.5 стало возможным сделать так, чтобы система избегала использования CQE, указав параметр debug_quirks=0x20000
для модуля sdhci
. (0x20000
– это значение флага SDHCI_QUIRK_BROKEN_CQE в sdhci.h). После правильного указания параметра мне удалось установить и использовать Ubuntu 20.04 с ext4 rootfs на диске eMMC этого ноутбука.
Существуют несколько общих способов передать этот параметр системе, в зависимости от ситуации:
Способ 1: Выгрузить модуль и загрузить его с указанным параметром.
sudo modprobe -r sdhci_pci
sudo modprobe -r sdhci
sudo modprobe sdhci debug_quirks=0x20000
sudo modprobe sdhci_pci
Это будет работать, когда система не будет обращаться к диску eMMC во время загрузки. Например, если вы находитесь в каком-то установщике Linux и собираетесь начать установку на диск eMMC.
Способ 2: Указать параметр sdhci.debug_quirks=0x20000
в командной строке ядра.
Это часто можно сделать через меню загрузчика. Это может спасти ситуацию, когда диск eMMC используется во время загрузки, а у вас не было возможности записать параметр через /etc/modprobe.d
в initramfs.
Способ 3: Использовать /etc/modprobe.d
Создайте файл, например /etc/modprobe.d/sdhci-disable-cqe.conf
, который содержит:
options sdhci debug_quirks=0x20000
Это обычно “правильный” способ постоянно изменять поведение загрузки модуля. Однако для того, чтобы это сработало на ранней загрузке, нужно убедиться, что конфигурационный файл попадает в образ initrd. Способы сделать это могут различаться в разных дистрибутивах. Для Ubuntu обычно после создания/редактирования файла в /etc/modprobe.d
необходимо выполнить sudo update-initramfs -u
.
PS: Судя по тому, что я вижу, параметр debug_quirks, кажется, является единственным доступным вариантом для отключения CQE в общих сборках ядра. Проблема, похоже, довольно редка и обычно возникает на некотором специфическом оборудовании, не относящемся к x86. Я очень отчаялся и собирался заказать SSD, идея копать исходный код sdhci для всех доступных опций в ответ на некоторые упоминания debug_quirks (не связанных с CQE) пришла в голову в последний момент =)
У меня была такая же проблема с ASUS BR1100FKA.
У устройства есть свободный слот m.2, вы можете купить недорогой PCIe m.2 SSD (он не работает с SATA) и установить Linux на него.
EDIT: Вот инструкция по разборке. https://youtu.be/T6lysjmaBSA.
Несколько заметок:
- Винты корпуса подходят для отвертки PH1
- Как уже упоминалось, это должен быть стандартный размер (80 мм) m.2 NVME SSD. SATA m.2 SSD могут подойти, но плата их не распознает.
- В слоте m.2 не установлена винтовая защита, поэтому вам нужно будет приобрести ее.
Ответ или решение
Проблема, с которой вы столкнулись при форматировании eMMC-диска на ноутбуке Asus BR1100FKA, может быть вызвана некорректной работой контроллера eMMC, особенно в отношении реализации CQE (Command Queue Engineering). Это распространенная проблема с некоторыми моделями eMMC, которые используют устаревшие или неправильно реализованные версии этого протокола.
Для решения данной проблемы вы можете попробовать несколько подходов:
1. Использование опции debug_quirks
Согласно исследованию, в ядре Linux начиная с версии 5.5 была добавлена возможность отключить CQE, добавив опцию debug_quirks=0x20000
для модуля sdhci
. Вот как это можно сделать:
Способ 1: Временно в live-сессии
Если вы находитесь в установщике Linux (например, на live USB), попробуйте выполнить следующие команды в терминале:
sudo modprobe -r sdhci_pci
sudo modprobe -r sdhci
sudo modprobe sdhci debug_quirks=0x20000
sudo modprobe sdhci_pci
Этот метод подходит, если eMMC-диск в данный момент не используется.
Способ 2: Добавление параметров загрузки
Вы можете добавить параметр sdhci.debug_quirks=0x20000
в строку командной строки ядра. Обычно это делается через меню загрузчика (например, GRUB):
- При запуске системы нажмите
e
на записи GRUB для редактирования. - Найдите строку, начинающуюся с
linux
, и добавьте в конец параметрsdhci.debug_quirks=0x20000
. - Нажмите
Ctrl + X
для загрузки с обновленной конфигурацией.
Способ 3: Настройка конфигурации modprobe.d
Чтобы сделать изменения постоянными, создайте файл /etc/modprobe.d/sdhci-disable-cqe.conf
со следующим содержимым:
options sdhci debug_quirks=0x20000
После этого обновите initramfs (например, для Ubuntu):
sudo update-initramfs -u
2. Отзывы о аппаратной совместимости
Если предложенные методы не сработают и проблемы с форматированием сохранятся, возможным решением будет установка SSD в свободный слот M.2 на вашем ноутбуке. Убедитесь, что приобретенная модель — это NVMe SSD, так как SATA SSD не будет распознано. Для установки вам понадобятся следующие инструменты:
- Отвертка PH1 для снятия корпуса.
- Набор для установки SSD.
3. Альтернативные методы
Если ни один из методов не сработал, вы можете рассмотреть использование другого дистрибутива Linux или более старой версии ядра. Иногда использование более старого ядра может решить несовместимость аппаратного обеспечения. Однако это может быть рискованным подходом, и вам следует использовать его только в крайнем случае.
Заключение
Тем не менее, если у вас есть возможность, установите Linux на отдельный NVMe SSD, что позволит избежать проблем с eMMC. Использование надежного хранилища облегчит вашу работу с системой и предоставит более стабильную платформу для установки и эксплуатации.