1 убийство -9

1 убийство -9

Настраивать

Я работаю программистом уже довольно давно, но все еще не совсем понимаю глубокие, внутренние вещи.

Теперь. Я прекрасно понимаю, что это не очень хорошая идея:

  1. убить -9 процесс (плохо)
  2. самопроизвольно выдернуть вилку из розетки работающего компьютера или сервера (хуже)

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

Предположим, что в системе работают Apache 2, MySQL 5, PHP 5 и Python 2.6.5 через mod_wsgi.

Примечание: Меня больше всего интересует Mac OS X, но ответ, относящийся к любой системе UNIX, был бы мне полезен.

Моя забота

Каждый раз, когда мне приходится делать что-то из этого, особенно второе, я очень беспокоюсь в течение некоторого времени, что что-то сломалось. Какой-то файл где-то может быть поврежден — кто знает, какой именно? На компьютере более 1 000 000 файлов.

Я часто использую OS X, поэтому я запускаю операцию "Проверка диска" через Disk Utility. Она не сообщит о проблемах, но я все еще беспокоюсь об этом.

Что, если какой-то файл конфигурации где-то испортился. Или, что еще хуже, что, если где-то двоичный файл поврежден. Или файл скрипта где-то сейчас поврежден. Что, если какое-то оборудование повреждено?

А что, если я узнаю об этом только в следующем месяце, в критическом сценарии, когда коррупция или ущерб приведут к катастрофе?

Или что, если ценные данные уже утеряны?

Моя надежда

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

Но если мои опасения не беспочвенны и реальный ущерб может быть нанесен в любой из ситуаций 1 или 2, то я надеюсь, что существует способ его обнаружить и предотвратить.

Мои вопросы)

Может ли это быть связано с тем, что современные операционные системы разработаны так, чтобы гарантировать, что ничего не потеряется в этих сценариях? Может ли это быть связано с тем, что современное программное обеспечение разработано так, чтобы гарантировать, что ничего не потеряется? А как насчет современного дизайна оборудования? Какие меры принимаются, когда вы вытаскиваете вилку из розетки?

Мой вопрос в том, что касается обоих этих сценариев:точноможет пойти не так, и какие шаги следует предпринять, чтобы это исправить?

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

А как насчет повреждения случайных файлов, спрятанных где-то в огромном лесу файлов на моих жестких дисках?

А как насчет повреждения оборудования?

Что помогло бы мне больше всего

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

  2. Объяснения всего, что может пойти не так в этих сценариях, вместе с (грубыми, конечно) вероятностями (т. е. это очень маловероятно, но это вероятно)...

  3. Описания мер, применяемых в современном оборудовании, операционных системах и программном обеспечении для предотвращения повреждений или порчи при возникновении таких сценариев. (чтобы утешить меня)

  4. Инструкции о том, что делать после kill -9 или отключения питания, помимо «проверки диска», чтобы действительно убедиться, что нигде на диске ничего не повреждено и не повреждено.

  5. Меры, которые можно принять для укрепления компьютерной конфигурации, чтобы в случае выхода из строя чего-либо или отключения питания можно было минимизировать любой потенциальный ущерб.

  6. Некоторая информация о бинарных файлах — разве не правда, что бинарный файл Apache или какая-то библиотека могут иметь случайный байт или два поврежденных в середине, которые не проявятся и не вызовут проблему до более позднего времени? Как я могу убедиться, что это не произошло в результате отключения питания или kill?

Спасибо!

решение1

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

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

Временные файлы в /tmp будут автоматически удалены, если они находятся в tmpfs, но у вас все еще могут быть файлы блокировки, специфичные для приложений, которые нужно удалить, например, lock и .parentlock для Firefox.

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

Ваша файловая система, вероятно, журналируется. Если вы перемещаете или записываете файл, и он умирает в процессе, журналируемая файловая система все равно будет ссылаться на оригинал. Журналируемая файловая система будет вносить изменения неразрушающим образом, оставляя старую копию, а затем ссылаться на новую копию только в качестве последнего шага перед освобождением места, которое старые копии занимали на диске.

Теперь, если у вас есть RAID-массив, он имеет все виды буферов памяти для повышения производительности и обеспечения надежности при сбое питания. Скорее всего, ваша файловая система не будет знать о кэшах в устройстве и их состоянии, поэтому она думает, что изменение было зафиксировано на диске, но оно все еще находится где-то в RAID-кэше. Так что же происходит, когда питание отключается? Надеюсь, у вас есть функциональная батарея в вашем RAID-корпусе, и вы следите за ней. В противном случае у вас будет поврежденная файловая система для fsck.

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

решение2

При неожиданном завершении работы единственные файлы, которые должны быть повреждены, — это файлы, открытые для записи. В большинстве систем в любой момент времени вы, вероятно, не пишете в файл. Вероятно.

1 убийство -9

является POSIX SIGKILL и зависит от реализации. Процесс, который получает этот сигнал, не получит возможности его обработать.

1 Выключить питание

зависит от оборудования. Головки автоматически паркуются под действием импульса привода и все в вашем кэше записи теряет обновление DRAM и разрушается до необратимого повреждения в течение нескольких секунд. То же самое происходит с вашей системной памятью, кэшем ЦП, регистрами и т. д.

С wdc.com (google: site:wdc.com Защитная головная парковка)

Питание отключено: жесткий диск сброшен. Головка паркуется в зоне посадки с использованием энергии шпинделя. Двигатель шпинделя остановлен.

2 - что может пойти не так

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

3 - контрмеры

см. выше, что делают диски.

Посмотрите журналируемые файловые системы, теперь они в норме:http://en.wikipedia.org/wiki/Система_файлов_журналирования

Такие программы, как MS Word или vi, будут записывать во временный файл, а не в исходный. Цель состоит в том, чтобы никогда не оставлять систему в состоянии, когда на диске нет согласованной копии.

Windows хранит копии реестра (это слишком важно) Wikipedia: «Windows 2000 хранит альтернативную копию кустов реестра (.ALT) и пытается переключиться на нее при обнаружении повреждения» (я не занимался серьезной технической поддержкой со времен Win2k, поэтому не уверен, какие новые механизмы использует MS)

4 - что делать

В порядке сложности (легко-сложно)

  • Сохраняйте резервные копии
  • Проверьте, над чем вы работали в последний раз
  • Загрузитесь с отдельного диска и посмотрите дату/время последнего изменения, чтобы выяснить, что могла делать система во время сбоя.
  • Загрузитесь с отдельного диска и сравните md5sums всех ваших файлов с автономной копией.

Наиболее подходящим ответом будет сохранение резервных копий, хорошие резервные копии должны позволять вам вернуться к ранее измененной версии.

5

Избыточное питание? Обучение конечного пользователя? Заклеить кнопку питания лентой и картоном?

6

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

решение3

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

Сегодняшние файловые системы очень надежны; такие системы, как XFS, JFS, ext3 и ext4, имеют журналы и другие средства для сохранения метаданных файловой системы в целости и сохранности.

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

У меня есть Mac Mini, но некоторые люди, похоже, просто выключают его (независимо от того, сколько раз я им говорю...), и он просто продолжает работать.

По большей части, если вы не полагаетесь на kill -9 или power off регулярно, я бы не стал слишком беспокоиться. В прошлом дела обстояли намного хуже; я бы больше беспокоился о (например) Solaris 2.6, чем о Solaris 10 (и так далее).

решение4

"kill -9" не синхронизирует ожидающую операцию ввода-вывода. Часто это не проблема, но если система находится под большой нагрузкой ввода-вывода, вы можете потерять данные.

Это больше касается серверов, где RAID-контроллер (без кэша с резервным питанием от батареи) может кэшировать записи и терять данные.

Редактировать: Еще одно... если вы зависите от сетевых дисков и у вас открытые дескрипторы файлов, вы, скорее всего, оставите файл несогласованным или поврежденным. В Windows классический пример, когда вы видите это, — это когда пользователи монтируют файлы Outlook PST на общем ресурсе и теряют питание или сетевое подключение.

Связанный контент