3

В течение многих лет я наблюдаю за зависанием моего ноутбука Dell, когда он возобновляет спящий режим, когда SD-карта вставлена в гнездо и установлена. Конечно, мне потребовалось некоторое время, чтобы понять это, но теперь я могу воспроизвести инцидент с 100% точностью: каждый раз, когда мой ноутбук выходит из спящего режима - как я запрограммировал диспетчер питания, когда оставшееся время выходит за пределы 8% - пока вставлена и установлена SD-карта, она зависает (блокируется), и я могу только принудительно отключить ее ... теряя, конечно, больше, чем несколько кусков от моей SD-карты каждый раз. Я могу потерять до сотен мегабайт за один раз.

Недавно мне довелось питать компьютер с аккумулятором 12 В. В какой-то момент я увидел, что он полностью зависает во время работы с моего USB-ключа, который я настроил в качестве загрузочного устройства [для запуска Linux Mint]. Позже я понял, что компьютер завис, потому что я забыл подключить зарядное устройство, и напряжение аккумулятора снизилось до 11,5 вольт. Я также обнаружил, что раздел USB-ключа, который я использовал для загрузки компьютера, был полностью поврежден и не подлежал восстановлению.

Добавьте к этому, что я также много раз читал, что пользователи Raspberry Pi (как и я) сообщали о повреждении SD-карты, и последние связаны с (низким) энергопотреблением. Это объяснение пришло ко мне, когда я (также) заметил, что полезный размер моей SD-карты Raspberry Pi значительно уменьшился по неизвестным причинам, прежде чем я прочитал это.

Заключение

Короче говоря, меня научили нелегким последствиям работы на парах с флеш-устройствами во время их использования.


Я только подозреваю, что это электрическая проблема, поэтому я в основном прошу подтверждения. В прошлом я сталкивался с несколькими проблемами с драйверами SD-карт, из-за которых (по крайней мере) Linux страдает от множества ошибок, включая зависания системы, особенно когда эти драйверы были молодыми, то есть не такими зрелыми, как сегодня. Со временем я задался вопросом, может ли мой ноутбук зависнуть (в условиях, упомянутых выше) из-за того, как оборудование реагирует, когда заряд батареи становится несколько «низким».

У меня вопрос: имеет ли смысл мой анализ или это действительно что-то другое, например, плохой дизайн управления питанием на некоторых ноутбуках?

Если это правильно, то не рекомендуется ли пользователям ноутбуков подключать сеть при использовании SD-карты? (Независимо от того факта, что всегда лучше работать на сети как можно больше.)


Примечание: я задаю вопрос здесь, потому что подозреваю, что ошибка в драйвере SD-карты Linux на самом деле является проблемой электроники (инженерной).

2 ответа2

1

Предупреждение: здесь нет эксперта по Linux.

Повреждение карты может быть связано с тем, что процесс гибернации неправильно отсоединяет карту или не ожидает достаточно, чтобы карта завершила цикл записи с данными, которые, возможно, все еще находятся в кэше ПК. Аппаратные повреждения карт флэш-памяти встречаются гораздо чаще, когда происходит что-то плохое (например, сбой питания) во время операций записи.

Что касается зависания ПК, я подозреваю, что некоторые компоненты ОС имеют некоторые проблемы. Возможно, некоторые драйверы недостаточно надежны для обработки аппаратных сбоев в процессе гибернации. Если какой-либо второстепенный аппаратный компонент (например, устройство чтения карт SD) выходит из строя, ОС не должна просто зависать или взрываться (это одна из ролей ОС). Следует признать, что процесс гибернации не является распространенным сценарием, поэтому, возможно, тот, кто написал драйвер, обработал исключительные события в процессе выключения (наиболее распространенный "особый" сценарий), но забыл или проигнорировал процесс гибернации.

PS: Я также видел, как многие ПК с Windows зависали во время выхода из спящего режима или во время спящего режима, так что я обычно отключал эту функцию по умолчанию на своих компьютерах с Windows (наоборот, режим ожидания, в большинстве случаев, работает невероятно хорошо), Я подозреваю, что взаимодействие с оборудованием во время гибернации не является серьезной проблемой для индустрии ПК.

0

Какую файловую систему вы используете на SDCard? Я полагаю, что это FAT32 или похожий. Я думаю, что проблема в некоторой отложенной транзакции, ожидающей выполнения самой sdcard, прозрачной для ОС. (сообщается, что sdcard делает это для ОС). Эта транзакция сходит с ума при достаточно медленном отключении питания. (Я имею в виду, что падение напряжения может быть не обязательно быстрым, что делает его склонным к выходу из определенных состояний. Вероятно, это каким-то образом фиксируется в запросе гибернации, но поскольку аппаратная задержка прозрачна для файловой системы, она не будет временно блокировать отключение питания. Я предполагаю, что если вы используете ext4 или btrfs с включенным параметром барьера (он уже установлен по умолчанию), есть вероятность, что он дождется перехода в безопасное состояние.

Можно ли восстановить сообщения ядра этого события?


Я попытался воспроизвести проблему на ноутбуке Dell Studio 14, archlinux (3.18 vanilla kernel), работающем на флэш-диске USB, также смонтировал 2-гигабайтный раздел ext2 на SD-карте. Приостановлено к тарану с "systemctl приостановить". Проснулся успешно.

Приостановка - это не простой процесс, когда ядро просто приостанавливается, и это только последнее, что нужно сделать сценарию приостановки. Процесс подготовки может отличаться для разных сценариев приостановки. Для получения дополнительной информации: https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .