У меня есть система под управлением Linux, которая должна работать без присмотра в течение длительного времени. Для хранения в системе используется промышленная CF-карта. В большинстве случаев записи во флеш-память не выполняются, хотя время от времени некоторые данные / настройки конфигурации могут быть изменены. Система должна быть устойчивой к сбоям питания.
Я бы хотел использовать для этого ext4. Как лучше всего настроить ext4 для такой установки? Принимая во внимание, что:
(Мне известен этот связанный с этим вопрос: Предотвращение повреждения данных на диске ext4 / Linux при отключении питания)
Я начну с того, что скажу, что, насколько я понимаю, EXT (во всех его воплощениях) - довольно ужасная файловая система - я видел больше "интересный«случаи повреждения файловой системы в относительно небольшом количестве систем Linux / EXT {2,3,4}, которые я администрировал, чем в относительно большом количестве файловых систем Not-EXT, которые мне приходилось использовать.
Если возможно, попробуйте выбрать более надежную файловую систему. Вы будете благодарить себя, когда произойдет неизбежное.
С учетом сказанного и всех моих личных предубеждений, открытых и отодвинутых в сторону, EXT4 имеет три функции, которые, как я могу думать, могут вам помочь:
Ведение журнала
EXT4 может быть журналируемой файловой системой, если вы этого хотите. Включите функцию ведения журнала (и, в частности, установите для режима ведения журнала значение journal
через tune2fs
или как вариант крепления).
Это приводит к падению производительности, поскольку все данные должны быть записаны в журнал EXT, прежде чем они будут «зафиксированы» в файловой системе (каждая запись в основном происходит дважды), но это гарантирует, что вы всегда можете восстановить, насколько это даст вам воспроизведение журнала без каких-либо проблемы.
SYNC
громадные крепления
Когда безопасность превыше всего, монтируйте файловую систему с sync
вариант всегда хорошая идея. При этом все операции записи на диск выполняются немедленно - опять же, это снижает производительность, но это хорошая идея, если вы ожидаете сбоев питания или случайных посторонних, выдергивающих CF-карту.
Максимально ограничьте доступные для записи файловые системы Это не относится к EXT, но слишком распространенная философия Linux «просто создайте один большой корневой раздел и выгрузите в него все», откровенно говоря, тупой. Создайте правильную структуру файловой системы (/
, /var
, /usr
, /home
и т. д.) и смонтировать как можно больше файловых систем в режиме только для чтения.
Раньше это был общий совет для систем unix ради безопасности, но в вашем случае он имеет дополнительное преимущество: вы не можете повредить файловую систему, если вы не можете писать в нее.
Я работал над созданием системы автоматизации на лодках, и было предварительное условие: в любой момент мощность могла упасть, и все должно было снова правильно разогнаться.
Мое решение заключалось в создании системы initramfs на основе Gentoo, только с rw-папкой для приложений и конфигураций (это подход, используемый всеми поставщиками маршрутизаторов / межсетевых экранов). Это решение добавляет дополнительный уровень сложности при обновлении системы, но гарантирует, что система ВСЕГДА загружается.
Что касается вашего конкретного вопроса, вы должны оставить EXT4 журнал включен для более быстрого fsck (на несколько секунд) используйте данные = журнал вариант крепления, опустите совершить вариант или использовать синхронизировать возможность держать буферы всегда пустыми.
Ссылки: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt
EXT4 не кажется лучшим выбором для вашей системы; Я бы посоветовал взглянуть на файловую систему с журнальной структурой. Они работают, обрабатывая данные как постоянный поток обновлений записи для виртуального потока с указателем, указывающим на последнюю «головку». Обновления происходят путем записи данных и метаданных в хранилище с последующим обновлением указателя. В случае сбоя после записи, но до обновления указателя, последние данные теряются, но файловая система является согласованной.
Две файловые системы-кандидаты: LogFS и НИЛЬФЫ. Оба доступны в основном ядре Linux.
Я заинтригован устройством, которое вы построили. Вам нужна надежность встроенного устройства, а файловая система вам не подходит.
Ext4 (и семейство) - прекрасная файловая система общего назначения с (я полагаю) многими миллиардами часов использования на различном оборудовании и различных сценариях использования. Однако то, о чем вы просите, действительно не подходит для ext4. Указатели от voretaq7 и Giovanni помогут получить максимальную отдачу от использования ext4, если вам нужно, но настоящий ответ - использовать что-то более подходящее для ваших требований. Стив предложил вам несколько вариантов. Если вы продолжите получать питание от ext4 FS, вы в конечном итоге получите беспорядок.
Если это разовая система, которую вы создаете, вам следует сделать выбор в пользу использования чего-то более подходящего или принять тот факт, что в какой-то момент возникнут проблемы. Это может быть только 1 отключение электроэнергии из 100 или 1 из 1000. Этого может быть достаточно, чтобы вы рискнули, и устройство, вероятно, может работать в течение длительного времени (лет) без какого-либо ручного вмешательства.
Если это продукт, который вы намерены широко развернуть / вывести на рынок, у вас есть выбор использовать что-то более подходящее. Или вы принимаете бизнес-решение о поддержке определенного процента устройств, которые будут блокироваться каждый год и требуют замены или ручного вмешательства для их восстановления.