Это нормально, просто вытащить вилку?

18

Всякий раз, когда я выключаю свой пи, я использую sudo poweroff, что (в моем понимании) является безопасным способом остановить все процессы и завершить работу.

Хотя иногда, когда я использую Pi для встроенных проектов, где я не всегда соединяюсь с Pi по SSH, часто возникает ощущение, что тратится время, чтобы вытащить телефон или ноутбук и подключиться к Pi, чтобы выключить питание.

Некоторые люди, с которыми я говорил, говорили, что они просто отключают питание, когда хотят отключиться, и что они никогда не замечали никаких проблем с этим.

Так что может пойти не так, просто отключив Pi? Должен ли я начать просто отключить?

Примечание: в этом случае я не слишком беспокоюсь о потере данных. Я сохраняю регулярные резервные копии, и единственные важные данные об этом Pi находятся на моем GitHub.

Джеймс Викери
источник
1
Я бы не советовал просто вынимать вилку из розетки, постоянно подключать и отключать кабель питания сокращает срок службы разъема на Pi. Во-вторых, SD-карта может быть в процессе выполнения операции, когда вы тянете за вилку - это может повредить ее. И это будет неудобно, независимо от того, насколько хорошо вы создаете резервные копии ваших данных.
Дарт Вейдер
2
@DarthVader Что вы подразумеваете под «сокращением срока службы разъема»? Я бы больше не отключал и не включал, я просто отключал бы перед выключением. Является ли повреждение SD-карты единственной проблемой, кроме этого? Будет ли форматирование SD-карты всегда использовать карту снова?
Джеймс Викери
1
Я все еще думаю, что лучше оставить подключенный Pi и отключить питание на стене. Вы можете восстановить поврежденную SD-карту, отформатировав и переустановив выбранную ОС, но, безусловно, рекомендуется избегать повреждения SD-карты. Другая проблема заключается в том, что части Пи могут что-то делать, и вы отключаете питание, не давая им возможности закончить то, что они делали.
Дарт Вейдер

Ответы:

23

У меня нет привычки отключать пи в смысле отказа от правильного его выключения, за исключением случаев, когда я теряю сеть на безголовом пи, и в этом случае мне обычно лень подключать клавиатуру и т. Д.

Обычно я всегда проверяю, чтобы в этот момент не горел зеленый индикатор ACT; для последних моделей (или прошивки?) это будет отключено, когда SD-карта не будет доступна. В чем вы хотите убедиться. Если вы не пишете в него постоянно, это должно быть достаточно просто; до тех пор, пока в свободной ОЗУ имеется достаточный запас (скажем, 50–100 + МБ, в зависимости от контекста), то вещи, которые часто используются повторно, но фактически не загружаются процессом в любой момент будет кэшироваться в свободной памяти и перезагружаться оттуда ОС, а не реальным физическим носителем. Так работают все современные операционные системы общего назначения.

Если пи использует SD-карту, риск минимален : файловая система на карте не синхронизирована с состоянием в памяти. Обычно это, вероятно, не большая проблема; для начала, защита от файловой системы, используемая по умолчанию на большинстве pis, может быть защитой от нее, как и fsck, который должен применяться автоматически при загрузке, если файловая система не была чисто размонтирована. Вскоре я объясню, почему я говорю «может», а не «есть», потому что в этом контексте я думаю, что часто это не так .

Насколько я знаю, я никогда не заканчивал повреждением файловой системы или потерей данных при извлечении заглушки, что я, возможно, делал сотни или более раз за эти годы. Однако, опять же, я не делаю это привычно. Если вы делаете это несколько раз в день, вы можете в конечном итоге столкнуться с тем или иным уровнем статистического риска, и это может привести к неприятным последствиям.

Вот ПРОБЛЕМА:

Недавно мне пришло в голову, что есть проблема с SD-картами, против которой механизмы ОС / файловой системы могут быть бессильны, и которая может объяснить, почему некоторые люди, кажется, имеют постоянные проблемы с повреждением fs, особенно те, кто вмешивается в работу независимо от системы. например, недавно кто-то здесь утверждал, что запускает вычислительные модули, из-за повреждения которых системы не загружались в ~ 1/40 таких отключений питания.

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

Это может произойти, если биты перетасовываются, и поэтому метаинформация файловой системы, которая хранит различные биты, повреждена. Опять же, однако, journalling и fsck должны быть в состоянии справиться с этим, что требует ядра для загрузки, но ядро ​​на pi находится в отдельном загрузочном разделе, который также может быть размонтирован во время использования (кроме случаев обновления), потому что ничего из этого не используется после загрузки системы. То есть информация о разделе должна быть практически неподкупной, даже если она оставлена ​​подключенной.

Но...

SD-карты являются черным ящиком для операционной системы. Выхода из этого нет. Хотя существуют специальные драйверы для контроллеров SD-карт, которые являются частью аппаратного обеспечения компьютера (на пи, это часть SoC), нет такой вещи, как драйвер для разных, конкретных марок и моделей карт.

И все же, все они имеют микроконтроллеры, которые могут работать по-разному. 1. Это то, что делает карту черным ящиком; он взаимодействует с операционной системой через стандартизированный протокол SD, и это последняя точка контроля, которую имеет ОС.

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

Другая вещь, на которую они полагаются - это относительно большие «блоки стирания»; когда данные в блоке должны быть изменены, весь блок стирается и перезаписывается. Файловые системы также делают это, как само собой разумеющееся, но учтите, что это на уровне системного программного обеспечения, и возникающие в результате этого проблемы - это именно те проблемы, о которых сообщается и которые нужно fsckрешать.

Суть более непреодолимой проблемы заключается в том, что масштабируемые файловые системы обычно намного меньше, чем масштабируемые SD-карты. Если бы это было не так, вы бы потеряли много места, потому что блок файловой системы может содержать данные только из одного файла. Если размер блока составляет 2 МБ, а данных всего несколько КБ, остальное теряется. Таким образом, блоки файловой системы имеют тенденцию варьироваться от 1/2 КиБ до 4 КиБ.

Совершенно очевидно, что SD-карты этого не делают, и на самом деле не могли, потому что контроллер на SD-карте не знает границ, таких как «файл», «файловая система» или даже «раздел устройства». Он имеет дело только с порциями данных, которые нужны ОС, через непрозрачный слой из черного ящика, где все может происходить на физическом уровне.

Одна из причин, по которой это очевидно (за исключением исходных карт, «которые в первую очередь не могли этого сделать»), заключается в том, что эти блоки часто бывают довольно большими, хотя карты, похоже, отлично справляются с задачей использования всего пространства. Размер стираемого блока может составлять несколько мегабайт . Более того, детали являются собственностью. Хотя могут существовать механизмы, с помощью которых ОС может запрашивать размер стираемого блока с карты, карта не должна предоставлять это, она может лгать об этом, и это станет абсурдом, если ОС попытается использовать его.

Из этого следует, что, поскольку:

  1. Контроллер SD-карты не имеет понятия о том, какие данные «по праву» принадлежат, где в смысле согласованных файловых систем и разделов, и,

  2. SD-карта - это черный ящик, в который ОС не может видеть,

Тогда то, что находится в данном блоке стирания объемом 1 МБ, где карта содержит несколько разделов, использующих блоки файловой системы размером 4 КБ или меньше, должно быть произвольным, если карта была использована достаточно (и, возможно, даже если она не использовалась в все). Это, вероятно, верно, даже если вы пытаетесь заставить ОС использовать больший / соответствующий размер блока; они будут в конечном итоге смещены.

Так:

Если питание отключается, когда SD-карта находится в процессе изменения блока, это может привести к потере довольно большого объема произвольных данных, которые могут быть чем-либо с карты. Это может быть информация с пометкой «только для чтения». Это может быть информация из раздела, который даже не смонтирован , и, очевидно, достаточно часто из неиспользуемого загрузочного раздела.

Если это произойдет, и у карты нет какой-либо собственной системы защиты (что, возможно, есть у некоторых, но я уверен, что у большинства ее нет), вы можете посмотреть на ситуацию с FUBAR. Журналирование не защитит от случайного повреждения размера МБ, которое даже не распознает границы раздела. Или fsck.

Или, поскольку аппаратное обеспечение карты, как правило, является проприетарным, может быть что угодно, кроме программного обеспечения, произведенного производителем карты - при условии, что это правдоподобно. Я никогда не слышал о таких. Это сделало бы карты более сложными, более дорогими и более сложными в использовании. Что не является целью.

Иными словами, SD-карты не предназначены для надежного использования таким образом . Они дешевы и очень удобны, но это результат компромисса в протоколе: в общем, нет никакой гарантии целостности данных для чего-либо на карте, если вы произвольно отключите питание для нее.

Что может пойти не так, просто отключив Pi? Должен ли я начать просто отключить? Примечание: в этом случае я не слишком беспокоюсь о потере данных.

Это не будет физически вредить пи, нет, просто опасайтесь, что «потеря данных» может распространиться на «бесполезную карту», ​​которую нужно полностью переформатировать. Тем не менее, я бы сказал, что вероятность этого, если вы делаете это с выключенным зеленым светом ACT, очень мала.


  1. Это может быть важно, если учесть, почему некоторые конкретные марки / модели карт явно хуже, чем другие, для некоторых людей. К сожалению, хотя две карты, которые имеют одинаковую маркировку, могут быть идентичными с точки зрения заявленных характеристик (размер, скорость и т. Д.), Производители не обязаны делать их действительно идентичными на 100% с точки зрения составных частей.
Златовласка
источник
1

Это сильно зависит от вашей операционной системы:

  • Если вы используете стандартную схему, когда вы используете свою SD-карту в режиме ч / б для получения актуальных данных ( разделы подкачки здесь не учитываются), то это проблема, как в обычном случае «питания от ПК» : это все вокруг Google, так что вы будете иметь массу информации о деле. Это точно так же: те же проблемы, те же риски и одинаковое воздействие.
  • Если вы просто читаете данные с вашей SD-карты, то есть монтируете каждый раздел, содержащий данные, с вашей SD-карты с roопцией, то, безусловно, не проблема просто отключить: вы заканчиваете работу своих служб, они о резервное копирование данных на внешнее записываемое хранилище (например, общий ресурс NAS или NFS / SMB / CIFS) и после закрытия служб - да, просто отключите питание: вам не нужен диск RAM / tmpfs (s) ) больше, и ты ничего не повредишь
Алексей Веснин
источник
1
Ваш первый пункт неверен; SD-карта создает сложности, которые делают ее «не такой же» проблемой, как, например, с вращающимися дисками, где журналирование и проверка должны быть эффективными гарантиями большую часть времени, или более дорогими носителями SSD, которые могут иметь дополнительное оборудование, и соответствовать более строгий стандарт по сравнению с SD-носителями. Qv мой ответ, где я говорю о «в абстрактных терминах, не принимая во внимание природу SD-карт ...»
Златовласка
1
@goldilocks, конечно, в глубокой переделке механики носителей информации все по-другому. Я говорю здесь более широко, то есть, «почему это плохо, если вы не уверены в том, что все ваши данные сохранены безопасно и точно».
Алексей Веснин
@goldilocks Спасибо вам обоим за отличные ответы. Вы оба сделали отличные замечания, хотя я решил принять ответ Златовласки, так как он дает много соответствующей информации, все еще отвечая на вопрос; однако я проголосовал за оба ответа.
Джеймс Викери
1

Как ответил @goldilocks, риск небольшой, но большинство из нас этого не делают.

Очень просто добавить безопасный выключатель питания, который я использую на своем безголовом Пи. См. Как безопасно выключить Raspberry Pi? это почти не использует ресурсов - кроме небольшого количества оперативной памяти и простой кнопки.

Milliways
источник