Дивина з lazytime

Ядро Linux з версії 4 принесло опцію lazytime на зміну дефолтного relatime. Кинувся було її використовувати, але зіткнувся з незрозумілим поведінкою і, чесно кажучи, здався. А даремно.

Коротенько нагадаю навіщо люди ламають голову про параметри до файлових систем типу noatime / relatime / lazytime. З усіх відміток часу найцікавіша - atime. Ваша операційна система оновлює дану позначку часу у всіх файлів, які випробували на собі операцію відкриття і читання їх вмісту. Виходить, що ви "читання" перетворюєте в "запис". Додайте сюди ситуацію з новомодними SSD, які гарнішими з кожним днем, але як і раніше не сильно люблять коли на них багато пишуть. У SSD, в порівнянні з HDD, перезапис осередку змушує перезаписувати цілий блок. У будь-якому випадку, SSD або HDD, користувачі і адміністратори намагалися поліпшити швидкодію файлової і всієї системи в цілому.

Дуже давно багато хто любив відключати оновлення atime через параметр noatime в / etc / fstab. Але, так скажемо, noatime - це грубий спосіб, так як деякі програми орієнтувалися на atime.

Relatime був покликаний елегантніше вирішити питання з оновленням atime. Relatime оновлював atime тільки якщо бачив оновлення відміток часу ctime (зміна атрибутів) і mtime (зміна вмісту). Здається все. Виявилося, що relatime не сумісний з POSIX специфікацією.

Розробник ext4 Theodore (Ted) Ts'o представив опцію lazytime, яка atime, образно кажучи, тримала в пам'яті (in-memory inode). Всіх зайців вбили одним махом. Для конкретного файлу є актуальна atime в пам'яті, а на диск atime приземляється рідше.

І ось тут з'являється дивина. Справа в тому, що lazytime підносили як якесь еволюційний розвиток вирішення проблеми з atime. Думка працювала так: була груба опція noatime, потім реалізували relatime і ось народилася lazytime. Іншими словами, ти або використовуєш noatime, або relatime або lazytime.

Кинувся і я ліпити lazytime направо і наліво всюди де ядро ​​стало старше 4 версії. І? Команда mount після рестарту показувала що параметри relatime і lazytime присутні ОБИДВА одночасно! Спочатку погрішив на криві руки, потім подумав про параметр defaults, який гіпотетично міг містити в собі і relatime. Але коли прибрав defaults в / etc / fstab і став конкретно вказувати у розділу щось типу rw, lazytime і після рестарту все одно магічним чином з'являвся додатково relatime, став чухати свою ріпу. Соромно зізнатися, але провину взяв на себе і закинув питання, плюнувши на все. Lazytime залишив де його приліпив, але на появу солодкої парочки relatime, lazytime забив болт.

Але люди стали звертатися за допомогою і що ти за фахівець такий, який може тільки розвести руками і зізнатися в своїй не розумінні ситуації? Почав гуглити і нагугліть!

The lazytime flag is independent of strictatime / relatime / noatime. And the default is relatime. So when you replaced noatime with lazytime, it's not surprising that you saw the relatime mount option being set.
-- Ted Ts'o

Прапор lazytime не залежить від strictatime / relatime / noatime. І за замовчуванням йде relatime. Тому коли ви noatime замініть на lazytime, то не дивуйтеся встановленої relatime. Нуёпттвоюмать! Чому відразу за часів перших анонсів lazytime не проясниться цей момент? Lazytime це такий relatime де atime в пам'яті? Коротше купа питань, а відповідей немає. Нам залишається просто не дивуватися парочці relatime, lazytime і жити далі!

Схожі статті