Резервирование файлов - страница 3

 
Juer:

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


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

Это все грабли. 
Один раз наступили, в следующий раз обезопасить надо себя. 
Я сохраняю каждую версию файла раз в сутки например.  
 
Juer:

о чем, собственно, и речь. Ожидаешь штатную работу редактора, а тут такое. Воспроизвести, думаю, очень легко. На компе без всяких ИБС вырубить питание и всё.

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

Обычно же коммитят после закрытия программы и окончания работы. Вот сели вы работать и, скажем, 4 часа работаете. Заканчиваете и коммитите, как принято. А если на третьем часу отрубило питание, то коммита и не было.

Ну короче, либо массив избыточных дисков, либо вручную(а ну или невручную) запись на разные накопители, либо снимки файловой системы. По моему всё. Лично я не парюсь. Сбои редко бывают. А важные файлы записываю на разные накопители. У меня 5 копий на разных физических дисках, одна из них на компе. Это может показаться избыточным, но у меня была такая история что, я пишу файлики и проверяю(открываю), записал и пошел спать. Проснулся и два диска записанных оказались с пустыми файлами. Хотя я проверил их, и на них всё было. Не знаю как одновременно могло на двух пропасть.

 
Juer:

о чем, собственно, и речь. Ожидаешь штатную работу редактора, а тут такое. Воспроизвести, думаю, очень легко. На компе без всяких ИБП вырубить питание и всё.

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

Обычно же коммитят после закрытия программы и окончания работы. Вот сели вы работать и, скажем, 4 часа работаете. Заканчиваете и коммитите, как принято. А если на третьем часу отрубило питание, то коммита и не было.

В 90 привычка быстро усваивалась писать не на 2, а на 3 дискеты. После пары раз не чтения пары дискет и пару тройку метров листа кода заново завести))))) Делаю копии с разными версиями, не каждый час конечно, после достаточных изменений. 

 
Juer:

Обычно же коммитят после закрытия программы и окончания работы.

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

 
это что-то очень странное - чтоб записать чтото в файл должна быть команда, но скорее всего это ошибка диска если он аварийно завершил работу, может доходить вплоть до битого сектора, но скорее всего ячейка с файлом была обнулена во время остановки диска - файл был перезаписан а таблица размещения нет - всё, данные похерены
 
Я настроил авто бэкап в облако, и больше ничего не теряю. Версия файла сохраняется после каждого сохранения, а я привык часто нажимать ctrl-s. Любую версию за последние N дней можно восстановить.
Но если за вашим кодом охотятся мега корпорации и хакеры, можно так же делать авто бэкап на внешний USB-диск, который почти ничего не стоит. Я так делал в путешествиях, где на мобильном интернете разоришься.
 
Edgar Akhmadeev:
Я настроил авто бэкап в облако, и больше ничего не теряю. Версия файла сохраняется после каждого сохранения, а я привык часто нажимать ctrl-s. Любую версию за последние N дней можно восстановить.
Но если за вашим кодом охотятся мега корпорации и хакеры, можно так же делать авто бэкап на внешний USB-диск, который почти ничего не стоит. Я так делал в путешествиях, где на мобильном интернете разоришься.

Бекапы с версионированием это тоже хорошее решение. Даже на случай полной поломки диска.

Интересно как технически (отчего) такое произошло

Сбой питания, винда думает что есть немного батарейки и начинает штатно закрываться, MT успевает открыть файл и тут электричества нет совсем - и записываются нули.
Или metaeditor просто всегда держит файл открытым (в такую глупость я правда не верю).
Программно можно (посоветовать разработчикам) открывать файл с флагами NO_BUFFERING и WRITE_THROUGH то есть не использовать буферизацию при записи вообще никакую

наверное так.

ещё стоит залезть в настройки винды и там где-то указывается, что батареи нет, не было и не предвидится.

 
Maxim Kuznetsov:

Интересно как технически (отчего) такое произошло

ставлю на какой-нибудь хитрый сбой при работе с memory-mapped файлами, другого способа адекватно объяснить обнуление всего файла не вижу

 
Juer:

У ноута села батарейка, он внезапно выключился. Включил, открыл метаедитор - файл, над которым работал 3 дня, пустой. В Notepad++ выглядит так: одни NULL NULL NULL.

Работа потеряна. Восстановить не получается. Если кто знает как, поделитесь.

Может быть, пора уже сделать какое-то резервирование, как это происходит в MS Office, например?

У меня (крайне редко) были похожие сбои без выключения питания (возможно, при переходе от питания из сети на питание от бесперебойника, там есть задержка порядка миллисекунды). Идущие подряд нули дописывались в файл одним куском, размер таких кусков до нескольких Кб, то есть, конечно  же, содержимое должно было поместиться в буфер ОС. При этом размер дописываемого файла изменялся корректно. Я отношу эти сбои к тому, что сведения о размере передаются на диск первыми, и лишь затем идет передача самих данных, она то и сбоит. Это на разных деcктопных компьютерах, под разными Windows. Диск нагружен, операции сброса буферов на диск образуют очередь, почему бы там и не возникнуть сбою. Безразлично, какой вид работы при этом выполняется, просто правка файла или его резерное копирование.

Причина обращения: