Почему вы не можете установить смонтированный раздел?

43

Общеизвестно, что вы никогда не должны fsck смонтированного раздела. Я могу понять, как это может легко привести к повреждению, если файловая система записана с помощью fsck (например, используется опция -a), но почему нельзя проверять проверки только для чтения на смонтированных дисках?

Майк
источник

Ответы:

28

От:

http://linux.die.net/man/8/fsck.ext3

«Обратите внимание , что в целом это не безопасно для работы e2fsckна смонтированных файловых системах. Единственное исключение , если -nуказана опция, и -c, -lили -Lопция не указана. Однако, даже если это сделать безопасно, результаты , выводимые e2fsckявляются недопустимо, если файловая система смонтирована. Если e2fsckспрашивается, следует ли проверять монтируемую файловую систему, единственный правильный ответ - «нет». Только экспертам, которые действительно знают, что они делают, следует рассмотреть вопрос об ответе на этот вопрос в любом другом путь. "

MathewC
источник
3
Единственное исключение: если файловая система смонтирована только для чтения, а fsck также находится в режиме только для чтения, то все в порядке
Demi
31

Основная проблема заключается в том, что средство проверки файловой системы (обычно) не является частью файловой системы. Вместо этого это отдельная программа, которая читает и записывает на тот же диск, что и код файловой системы в ядре. В результате, если вы запускаете fsck в активной файловой системе, у вас есть две разные сущности, которые читают (и могут изменять) одни и те же данные (диск), но они никак не координируют друг друга. В результате, как отмечали другие, большинство контролеров ожидают, что никто больше не изменяет метаданные файловой системы во время работы. Они запутаются и / или сообщат о ложных ошибках, если файловая система ядра изменит что-то, чего не ожидает средство проверки.

Существует несколько файловых систем со средствами проверки, которые явно предназначены для запуска «в режиме онлайн» (то есть, когда файловая система активна). В более новых версиях FFS / UFS это выполняется путем запуска fsck для недавнего снимка файловой системы (реплика, доступная только для чтения, на момент времени, копия при записи). Если он обнаруживает проблемы, такие как несоответствия в битовых картах выделения, он исправляет их с помощью системного вызова, а не путем записи на сырой диск. Это позволяет ему координировать действия с активной файловой системой.

NetApp WAFL также имеет онлайн-инструмент проверки. Есть, наверное, другие.

Кит Смит
источник
11

Запускать fsck на смонтированном для чтения и записи разделе было бы глупо, даже если fsck находится в режиме только для чтения. Файловая система изменится в fsck, и данные в памяти, которые кэширует fsck из файловой системы, станут недействительными (и, таким образом, fsck увидит несогласованность). Вы можете запустить fsck в смонтированной файловой системе только для чтения в режиме только для чтения и получить действительные результаты. Запуск fsck в режиме чтения / записи в монтированной файловой системе, доступной только для чтения, если fsck вносит изменения в файловую систему в ходе своего запуска, ядро ​​увидит, что структуры файловой системы неожиданно меняются под ней. Это также было бы плохо.

Эван Андерсон
источник
Вы писали: «Запуск fsck в режиме чтения / записи в монтированной файловой системе, доступной только для чтения, приведет к тому, что ядро ​​увидит, что структуры файловой системы неожиданно меняются под ним». Почему структуры файловой системы изменяются в монтированной только для чтения файловой системе?
Геттли
Согласно этому ответу, fsck для раздела, доступного
guettli
@guettli - Ответ, с которым вы связаны, говорит о том же, что и я. (Я исправил свою орфографическую ошибку, кстати. Спасибо!) Если fsck вносит изменения, когда в ядре есть файловая система, кешированные в кэше данные, доступные только для чтения, могут стать недействительными в свете изменений, внесенных fsck. Конечно, вы можете перезагрузить компьютер после этого. Вы также можете обнаружить захватывающую ошибку в ядре и запаниковать ядро, прежде чем получите шанс перезагрузиться.
Эван Андерсон
9

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

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

Камил Кисиэль
источник
6

Итак, цель fsck - сообщать о несоответствиях файловой системы, то есть о нарушенных инвариантах.

Однако многие из этих проверок включают в себя более одной структуры FS. Если кто-то модифицирует FS (запись данных), эти структуры могут быть временно не синхронизированы. fsck посчитает это несоответствием, даже если это не является проблемой. fsck не может определить, является ли несоответствие временным или постоянной проблемой, требующей устранения. Так что это не может работать (если FS не предназначен специально для онлайн-проверки. Некоторые делают, но ext3 нет).

sleske
источник
3

Ну, ты можешь. fsck -n / dev / sda1 сделает именно это, по крайней мере, на ext3. Я только что проверил это :)

Свен
источник
-4

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

Но зачем вам, кроме проверки собственной смертности? Потому что ваш босс, безусловно, собирается проверить это снова, когда узнает, ПОЧЕМУ почтовый сервер не распознает корневой диск сейчас.

Zenham
источник
На самом деле, я думаю, что лучшей аналогией было бы взглянуть на движущийся блендер или взглянуть на край высокого здания. Только для чтения.
Майк