Что произойдет, если произойдет сбой питания, когда операционная система выполняет операции ввода-вывода файлов? - PullRequest
0 голосов
/ 07 января 2011

Хорошо, этот вопрос на самом деле является продолжением моего предыдущего вопроса: Что произойдет, если я внезапно закрою свой скрипт, пока он все еще выполняет операции ввода-вывода файла?

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

Ответы [ 2 ]

2 голосов
/ 07 января 2011

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

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

Возможно.Там нет магии.Ввод / вывод может включать два физических блока.Один написан, один не написан.

или ничего не добавлено

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

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

Возможно.Там нет магии.Блочная запись на устройство может - во время сбоя питания - привести к фатальному повреждению битов на устройстве.

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

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

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

1 голос
/ 07 января 2011

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

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

С надлежащей (журналируемой? Версионной?) ФС и вменяемым оборудованием вы уменьшаете количество возможного хаоса.

...