initramfs использует/etc/fstab?

найденный решением - если кому-то еще интересно...

#!/bin/sh -e

RUNWHEN=",H/6"

# The constraint string consists of a sequence of unit constraints. Each unit
# constraint consists of a comma, one of the following letters indicating which
# unit is constrained:
#
#     * y: year.
#     * m: month (in the range 1-12).
#     * d: day of the month (in the range 1-28, 1-29, 1-30, or 1-31, as
#          appropriate for the month in question).
#     * w: day of the week (in the range 0-6, with 0 representing Sunday).
#     * H: hour of the day (in the range 0-23).
#     * M: minute of the hour (in the range 0-59).
#     * S: second of the minute (in the range 0-59). 
#
# and finally one of the following:
#
#     * =n: matches times when the given unit is exactly n.
#     * -n: matches times when the given unit is exactly m, where m+n is one
#           more than the largest value of the unit. (For example, n+m=24 for H,
#           so ,H-1 is equivalent to ,H=23.
#     * /n: matches times when the given unit is divisible by n. 

exec 2>&1 \
rw-add n d1S now1s \
rw-match \$now1s $RUNWHEN wake \
## here comes the interesting part
rw-add \$wake d3H wake \
sh -c '
  echo "@$wake" | tai64nlocal | sed "s/^/next run time: /"
  exec "$@"' arg0 \
rw-sleep \$wake \
thescript
20
28.09.2013, 05:12
3 ответа

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

Без initramfs ядро будет обычно монтировать раздел как только для чтения и затем передавать управление к /sbin/init. initramfs просто принимает эту задачу от ядра, обычно когда корневая файловая система не является нормальным разделом (mdraid, lvm, зашифрованный, и т.д.).

Теперь, кроме фона на initramfs, Вашем /etc/fstab находится в Вашей корневой файловой системе. По сути, когда initramfs запускается, та корневая файловая система не там, и таким образом, это не может добраться до fstab (курица и проблема яйца).
Вместо этого мы должны передать параметр в загрузочные аргументы ядра для initramfs для использования. Обычно это - что-то как root=/dev/sdX. Однако это могло бы также сделать что-то для автоматического выяснения, где корневое устройство, и таким образом, нет никакого параметра вообще. Так как это - просто программное обеспечение (обычно сценарий), это может действительно сделать что-либо, что это хочет для монтирования корневого устройства.

Теперь, столь же установленный ранее, ядро смонтирует реальный корень как только для чтения. initramfs должен сделать точно это. После того как initramfs сделан, системные доходы, загружающиеся точно, как будто не было никаких initramfs вообще, и /sbin/init запускает. Этот init затем запускает все Ваши нормальные сценарии начальной загрузки, и это - задание одного из этих сценариев для чтения /etc/fstab, переключите корень на чтение-запись и смонтируйте все свои другие файловые системы.

15
27.01.2020, 19:44
  • 1
    Так, Вы говорите, что/sbin/init в реальной корневой файловой системе снова повторно смонтировал бы корень с помощью опций в/etc/fstab? –  Ahmed Ghonim 28.09.2013, 16:32
  • 2
    Да. Обычно через простое mount -o remount,rw /. Это не изменит устройство, которое смонтировано, но это изменит опции на монтировании. Из страницы справочника: After this call mount reads fstab (or mtab) and merges these options with options from command line –  Patrick 28.09.2013, 21:00
  • 3
    Как мы передаем параметр в загрузочные аргументы ядра, если мы используем grub2 командную строку? Моя система не показывает меню личинки по некоторым причинам. –  intuited 20.11.2017, 00:37
  • 4
    @intuited, который необходимо задать новому вопросу. Комментарии не являются местом для Q & A. –  Patrick 20.11.2017, 03:31

Это может, или это не может. Поскольку Initramf могут быть созданы различными способами (ядро просто загружает его и выполнения /init который делает что). Однако использование параметра более распространено, поскольку оно позволяет больше гибкости - т.е. если что-то изменяется, можно просто отредактировать запись загрузки, и вещи продолжают работать. Со встроенным корнем hardcoded это не обязательно было бы возможно.

fstab запись может все еще требоваться так или иначе, поскольку она также определяет другие вещи, те, которые монтируют опции (некоторые из которых могут быть изменены на движении), и fsck порядок. Также, даже если это было совершенно лишним (и если бы Initramfs обрабатывает его, это может работать без), я все еще сохранил бы запись там просто для пользы полноты.

2
27.01.2020, 19:44

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

Так, если что-то смонтировано, или не часто это не имеет никакого отношения к/etc/fstab.

initramfs это - только временный rootfs, используемый во время процесса начальной загрузки до "истинного" rootfs, смонтирован, итак, почему initramfs должен быть на/etc/fstab?

1
27.01.2020, 19:44

Теги

Похожие вопросы