2011-01-07 2 views
0

ОК, этот вопрос на самом деле является продолжением вопрос из моего предыдущего: What would happen if I abruptly close my script while it's still doing file I/O operations?Что произойдет, если произойдет сбой питания, когда ОС находится в середине операций ввода-вывода файлов?

Так что это не возможно, чтобы увидеть незавершенную строку записываются в файл каждый раз, когда вы заставляете ваш скрипт/программу, чтобы бросить курить, как операционная система будет выполняют свою работу. Но что, если есть сбой питания, и ОС просто находится в середине добавления одной строки, такой как «Это тест» (или даже большие строки) в файл, я получаю неполную строку, добавленную или ничего не добавленную или даже хуже, предыдущий контент потерян? Мне очень интересно узнать, и такая ситуация, безусловно, произойдет на стороне сервера. Кто-нибудь может мне помочь?

+1

Почему бы вам не попробовать и сообщить нам об этом? – erjiang

+0

Если вы действительно беспокоитесь об этом, напишите в базу данных, которая поддерживает транзакции. – chrisaycock

+0

@erjiang: Как вы думаете, для чего я здесь? – Shane

ответ

2

Правило 1. Нет никакой магии. Без гарантии. Нет уверенности. Сбой питания означает, что схема проходит через состояния, выходящие за пределы их проектных допусков. Может произойти все, что угодно. Никаких гарантий.

что, если есть сбой питания, а ОС только в середине добавления ... в файл, я получаю неполная строка добавляется

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

или ничего прилагается

Возможно. Нет волшебства. Буфер ввода-вывода, возможно, не был синхронизирован с устройством.

или, что еще хуже, предыдущий контент потерян?

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

Мне очень любопытно узнать, и такая ситуация, безусловно, произойдет на стороне сервера.

"Определенно"? Ничего не определено во время неконтролируемого события, такого как сбой питания. Может произойти все, что угодно.

Существует очень небольшая вероятность того, что случайные скремблированные биты могут быть текстом адреса Gettysburg Lincoln, и это то, что появляется на устройстве.

+2

Похоже, что у кого-то есть свой переключатель на «более волшебный» ... – detly

+0

Он означает, что сбои питания могут определенно произойти на стороне сервера. Это, по сути, определенная возможность. – erjiang

+0

@ S.Lott: Означает ли это, что если вы пишете документ txt, уже закончили 10 000 строк, и при нажатии на кнопку сохранения произошел сбой питания, и вы перезапустите os, возможно, обнаружите, что все ваши утерянные файлы или файлы повреждены? Хорошо, я думаю, я знаю важность резервного копирования данных. – Shane

1

Это зависит от FileSystem (и его опций), аппаратного обеспечения (кэша/буфера, носителя и т. Д.), Поведения приложения и множества других лакомых кусочков.

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

С надлежащим (управляемым журналом?) FS и нормальным оборудованием, вы уменьшаете количество хаоса.

Смежные вопросы