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

Может ли ext4 fs быть полностью неисправимо сломанным из-за потери питания во время записи на диск?

Предположим, вы выполняете полную запись на диск в Linux pc box с ssd или механическим диском (ОС также находится на том же диске, нет батареи / ИБП):

cat /dev/urandom > omg.txt

В случае внезапного отключения питания во время процесса или любого другого некорректного отключения / сброса.

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

Будет ли файл поврежден и не сможет ли его исправить (т.е. никакие данные нельзя будет восстановить?)

Потенциально да. Есть 2 очевидных пути, по которым это могло произойти.

Ext4 - это файловая система с журналированием метаданных - она ​​регистрирует только изменения метаданных файла (размер, местоположение, даты), но не содержимое файла (btrfs и zfs ведут журнал полных данных с большими затратами на производительность). Таким образом, хотя вам никогда не следует проверять диск, из этого не следует, что каждая операция записи между открытием файла и закрытием + очистка буферов будет завершена. Нет транзакционного контроля над записью в данные файла.

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

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

Это совсем другой вопрос - это гораздо менее вероятно. Конечно, первый сценарий применим только в том случае, если вы пишете ядро, загрузчик, RAM-диск и т. Д. Во время сбоя.

Смотрите также этот Q&A на unix.stackexchange

Это не должно повредить вашу файловую систему (при условии, что вы используете Ext4 и у вас включены барьеры - как по умолчанию).

Цитата из https://ext4.wiki.kernel.org/index.php/Ext4_Howto:

Барьеры включены по умолчанию

Это вариант, который улучшает целостность файловой системы за счет некоторой производительности (вы можете отключить его с помощью «mount -o барьер = 0», рекомендуется попробовать, если вы проводите тестирование). Из этой статьи LWN: «Перед записью записи фиксации [ведения журнала] код файловой системы должен быть абсолютно уверен, что вся информация о транзакции попала в журнал. Простого выполнения записей в правильном порядке недостаточно; современные диски поддерживают большие внутренние кеши и будут переупорядочивать операции для повышения производительности.Таким образом, файловая система должна явно указать диску на перенос всех данных журнала на носитель перед записью записи фиксации; если запись фиксации записывается первой, журнал может быть поврежден. подсистема блочного ввода-вывода ядра делает эту возможность доступной за счет использования барьеров; по сути, барьер запрещает запись любых блоков после барьера до тех пор, пока все блоки, записанные перед барьером, не будут переданы на носитель. Используя барьеры, файловые системы могут создавать уверены, что их структура на диске всегда остается неизменной ".

Еще немного чтения: https://lwn.net/Articles/283161/.

На самом деле речь идет не о файловой системе, которую вы выбираете, а о кэшировании записи на вашем жестком диске / контроллере рейда.

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

Если на вашем сервере есть важные данные, всегда используйте ИБП или RAID-контроллер с батареей.