it-swarm-ru.tech

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

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

43
mike

От:

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

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

28
MathewC

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

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

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

31
Keith Smith

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

11
Evan Anderson

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

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

9
Kamil Kisiel

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

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

6
sleske

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

3
Sven