Чому ви не можете fsck змонтований розділ?


43

Загальновідомо, що ви ніколи не повинні fsck змонтований розділ. Я можу зрозуміти, як це може легко призвести до пошкодження, якщо файлова система записується fsck (наприклад, використовується опція -a), але чому не можна запускати перевірки лише для читання на встановлених дисках?

Відповіді:


28

Від:

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

«Зверніть увагу , що в цілому це не безпечно для роботи e2fsckна змонтованих файлових системах. Єдиний виняток , якщо -nвказана опція, і -c, -lабо -Lопція не вказана. Однак, навіть якщо це зробити безпечно, результати , що виводяться e2fsckє Невірно, якщо файлова система змонтована. Якщо e2fsckзапитує, чи слід перевіряти встановлену файлову систему, єдина правильна відповідь - «ні». Тільки фахівці, які дійсно знають, що вони роблять, повинні розглянути відповідь на це питання в будь-якому іншому шлях ».


3
Один виняток: якщо файлова система встановлена ​​лише для читання, а fsck також знаходиться в режимі лише для читання, тоді все нормально
Demi

31

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

Існує кілька файлових систем з шашками, які явно розроблені для запуску "он-лайн" (тобто, поки файлова система активна). Новіші версії FFS / UFS роблять це, запускаючи fsck проти недавнього знімка файлової системи (лише для читання, реплика копіювання під час запису). Якщо він виявить проблеми, такі як невідповідності у розподілі бітових карт, він виправляє їх за допомогою системного виклику, а не записом на необроблений диск. Це дозволяє йому координуватись із активною файловою системою.

WAFL NetApp також має он-лайн інструмент перевірки. Напевно, є й інші.


11

Запуск fsck на розділі, встановленому для читання-запису, було б нерозумно, навіть із fsck в режимі лише для читання. Файлова система зміниться під fsck, а дані в пам'яті, які кешують fsck з файлової системи, стануть недійсними (і, таким чином, fsck побачить невідповідність). Ви можете запустити fsck у файловій системі, встановленій лише для читання, у режимі лише для читання та отримати дійсні результати. Запуск fsck у режимі читання / запису у змонтованій лише для читання файловій системі, якщо fsck вносить зміни до файлової системи протягом її запуску, ядро ​​призведе до того, що ядро ​​бачить структури файлової системи несподівано змінюються під нею. Це теж було б погано.


Ви написали "Запуск fsck в режимі читання / запису в змонтованій лише фільтрувальній системі призведе до того, що ядро ​​бачить структури файлової системи несподівано змінюються під ним". Чому структури файлової системи змінюються на встановленій лише для читання фільтри?
guettli

Відповідно до цієї відповіді, fsck на розділі лише для читання нормально, якщо ви перезавантажуєтесь після підопічних: serverfault.com/a/405252/90324
guettli

@guettli - Відповідь, з якою ви пов’язані, говорить майже те саме, що і я. (Я виправив свою орфографічну помилку, BTW. Дякую!) Якщо fsck вносить зміни, коли в ядрі встановлена ​​файлова система, кешована лише для читання, всередині ядра може стати недійсним у світлі змін, внесених fsck. Звичайно, ви можете перезавантажити потім. Ви також можете виявити захоплюючу помилку ядра та панікувати своє ядро, перш ніж ви також отримаєте шанс перезавантажитись.
Еван Андерсон

9

Крім того, що це, ймовірно, знищить вашу пропускну здатність вводу / виводу, якщо файлова система модифікується під час роботи fsck'd, тоді жоден спосіб fsck не міг би відслідковувати зміни та повідомляти про невідповідності.

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


6

Ну, сенс fsck - повідомляти про невідповідності файлової системи, тобто порушувати інваріанти.

Однак багато з цих перевірок включають більше однієї структури ФС. Якщо хтось модифікує FS (записуючи дані), ці структури можуть тимчасово не синхронізуватися. fsck вважав би це непослідовністю, хоча це насправді не проблема. fsck не має можливості визначити, чи невідповідність є лише тимчасовою чи постійною проблемою, яка потребує виправлення. Отже, це може не спрацювати (якщо тільки FS розроблений спеціально для того, щоб дозволити перевірку в Інтернеті. Деякі так, але ext3 цього не робить).


3

Ну, можна. fsck -n / dev / sda1 зробить саме це, принаймні, на ext3. Я тільки тестував його :)


-4

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

Але чому б ви, окрім як перевірити власну смертність? Тому що ваш начальник, безумовно, збирається перевірити його ще раз, коли дізнається, Чому поштовий сервер зараз не розпізнає кореневий диск.


Власне, я думаю, що кращою аналогією було б дивитись на рухомий блендер або дивитись на край високої будівлі. Лише для читання.
Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.