-1

Я просто провел небольшой эксперимент: я настроил ванильный Ubuntu Linux, установленный несколько дней назад, с опцией atime mount для root fs. Затем я перезапустил несколько раз, запустив несколько готовых приложений и, наконец, изящно выключил их.
Затем я загрузил машину с какого-либо живого образа и удалил любой файл из Ubuntu, к которому не обращались в последние дни. Затем я попытался перезагрузить Ubuntu. Не получается черный экран при ранней загрузке.

Я повторил эксперимент несколько раз, тщательно проверяя настройки fs, и ввел увеличивающееся прошлое время для сохраняемых файлов. Мне так и не удалось загрузить Ubuntu в Unity.

Какие важные файлы могут отсутствовать, которые необходимы для загрузки, но к которым ранее никогда не обращались?

1 ответ1

2

Какие важные файлы могут отсутствовать, которые необходимы для загрузки, но ранее к ним не обращались?

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

Дело не в том, что что-то обходит функцию atime специально. Время доступа, которое не обновляется, является лишь побочным эффектом предварительного монтирования только для чтения (чтобы сохранить новое время, вам нужно записать его, верно?). Я ожидаю, что это особенно относится к initrd и vmlinuz в /boot , но корневая файловая система изначально также монтируется только для чтения:

Таким образом, ядро инициализирует устройства, монтирует корневую файловую систему, указанную загрузчиком как доступную только для чтения, и запускает Init (/sbin/init) ...

(источник)

Тогда все, что действует как Init (это systemd в Ubuntu), в какой-то момент перемонтирует файловую систему как чтение-запись. Для systemd:

systemd-remount-fs.service - это служба ранней загрузки, которая применяет параметры монтирования, перечисленные в fstab(5) к корневой файловой системе [...]

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


Еще один подводный камень (который, в конце концов, не имеет отношения к вашему делу, но это полезно знать):

От man 8 mount [выделение мое]:

atime

Не используйте функцию noatime, поэтому время доступа к inode определяется настройками ядра по умолчанию. См. Также описания параметров монтирования relatime и strictatime .

relatime

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

Начиная с Linux 2.6.30, ядро по умолчанию соответствует поведению, обеспечиваемому этой опцией (если не указано noatime ), и опция strictatime требуется для получения традиционной семантики. Кроме того, начиная с Linux 2.6.30, время последнего доступа к файлу всегда обновляется, если ему более 1 дня.

Это условие "1 день" вместе с ОС, "установленной несколько дней назад", и с удалением файлов, "к которым не обращались в последние дни", - думаю, все это делает relatime умолчанию несоответствующим вашей проблеме Тем не менее, вы, возможно, подумали, что atime достаточно, чтобы время доступа обновлялось каждый раз; поэтому я подумал, что было бы хорошо объяснить это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .