Назад | Перейти на главную страницу

Что * конкретно * облажается, когда я убиваю -9 или тяну мощность?

Настроить

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

Сейчас. Я прекрасно понимаю, что тоже не стоит:

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

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

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

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

Моя забота

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

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

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

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

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

Моя надежда

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

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

Мои вопросы)

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо!

Вытягивание энергии заставляет все останавливаться в полете без предупреждения. kill -9 имеет тот же эффект для отдельного процесса, принудительно завершая его с помощью СИГКИЛЛ.

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

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

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

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

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

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

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

1 убийство -9

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

1 Отключение питания

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

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

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

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

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

3 - меры противодействия

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

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

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

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

4 - что делать

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

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

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

5

Избыточная мощность? Обучение конечных пользователей? наклеить ленту и картон на кнопку включения?

6

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

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

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

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

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

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

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

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

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