скажем Fedora и Ubuntu?
… Обе из которых в настоящее время являются системными операционными системами.
Что происходит в системных операционных системах
родной механизм
Systemd использует различные виды устройств. .mount
модульные файлы дают команду монтировать тома. .swap
модульные файлы инструктируют его сообщать ядру о разделах подкачки. ( .service
Единичные файлы инструктируют его, как запускать сервисы. И так далее.) Это родные механизмы systemd. Чтобы принять их, сама systemd разветвляет дочерние процессы, которые выполняют соответствующие системные вызовы.
Если вы используете systemctl
команду (с --all
) в такой операционной системе systemd, она расскажет вам о загруженных .swap
модулях. Например:
dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap загружен активный активный / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap загружен активный активный / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b33a44
dev-sda5.swap загружен активный активный / dev / sda5
Он также расскажет вам о .mount
подразделениях.
Системный администратор может на самом деле писать такие .swap
файлы модулей вручную, точно так же, как может писать xe .service
, .socket
и другие файлы модулей вручную. Сама systemd просто ищет файлы модулей в файловой системе. Они его родной механизм.
Можно даже заставить systemd показать вам, что находится в этих единичных файлах и где в файловой системе их можно найти:
$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Автоматически генерируется systemd-fstab-generator
[Единица измерения]
SourcePath = / и т.д. / Fstab
Документация = man: fstab (5) man: systemd-fstab-generator (8)
[Обмен]
Что = / DEV / диск / по-UUID / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Параметры = SW
$
автоматически сгенерированные файлы юнитов
Можно написать их от руки. Обычно, однако, такие .mount
и .swap
файлы модулей автоматически генерируются программами, известными как генераторы . Два таких генератора есть systemd-fstab-generator
и systemd-gpt-auto-generator
. Они оба запускаются рано в процессе начальной загрузки и в ответ на systemctl daemon-reload
команду, и (как вы можете видеть выше) они генерируют целую загрузку файлов модулей в недокументированный подкаталог в /run/systemd/
. Сам systemd просто использует эти сгенерированные файлы модулей .
Прежний генератор читает /etc/fstab
, распознавая несколько расширений systemd для этого формата файла. Как я указал в ответ комментарии, традиционно раздел подкачки имеет тип монтирования из sw
и как один обнаружат , что другие операционные системы распознают подкачки записей в этой таблице. Но программное обеспечение Linux взяло альтернативный способ распознавания типа VFS вместо этого, ища swap
как тип VFS. systemd-fstab-generator
здесь не исключение, и именно так оно интерпретируется /etc/fstab
при преобразовании его в нативные механизмы.
Последний генератор обрабатывает таблицу разделов EFI, которая находится на том же диске, на котором находится системный раздел EFI, и ищет записи таблицы разделов EFI, которые имеют различные общеизвестные идентификаторы GUID типа раздела . Одним из таких идентификаторов GUID является обычный идентификатор GUID, назначаемый разделам подкачки Linux; и если systemd-gpt-auto-generator
найдет раздел с этим GUID (который удовлетворяет критериям, указанным в systemd doco), он создаст .swap
для него блок; не /etc/fstab
участвует вообще .
Конечно, у этого процесса есть много побочных эффектов. Например, поскольку /etc/fstab
первичный ключ к таблице отсутствует, записи могут иметь повторяющиеся поля «spec» и «file» (то есть «что» и «где»). В нативном механизме systemd, тем не менее, поле «файл» (то есть «где») является уникальным ключом для .mount
единиц, встроенным в имена единиц. Никакие две .mount
единицы не могут делиться этим. Для .swap
единиц измерения поле «spec» (т.е. «что») является уникальным ключом для единиц измерения. Никакие две .swap
единицы не могут поделиться этим. Поэтому не все записи в нем /etc/fstab
обязательно конвертируются в собственные механизмы и будут работать, особенно если люди делают такие вещи, как перечисление одной и той же точки монтирования для двух разных целей или один и тот же раздел подкачки двумя разными способами.
Точно так же, поскольку он переведен /etc/fstab
на собственный механизм, а собственный механизм systemd имеет другие способы активации модулей , его поведение несколько отличается от поведения несистемных операционных систем. По .mount
умолчанию устройство автоматически активируетсяsystemd-udevd
даже после начальной загрузки в ответ на появление смонтированного запоминающего устройства. Или он может быть указан в качестве Wants=
или Requires=
некоторых .service
или .socket
единиц, это означает , что она будет (пером) активируется , когда они есть. Есть даже RequiresMountsFor=
.
установщик программ и системный путь
Традиционно программы установки операционной системы и администратор systemd после перенастройки системы записывают sw
записи в /etc/fstab
. И вот как натив .mount
и .swap
единицы в конечном итоге автоматически генерируются. Утилита установки / конфигурирования «знает», куда был помещен файл подкачки, потому что в своем пользовательском интерфейсе системный администратор сделал какой-то выбор и пишет /etc/fstab
для соответствия. Иногда этот выбор мне нужен, чтобы сделать раздел подкачки как часть установки. ; иногда это просто использовать раздел подкачки, который вы уже нашли на диске. (установщики тоже смотрят на типы разделов).
Но у системных людей есть представление об операционных системах, которые автоматически конфигурируют себя из практически пустого /etc
дерева, так называемых систем без состояний , и именно в этом и заключаются такие механизмы, как генератор, который читает таблицу разделов EFI. В плане системных пользователей нет /etc/fstab
и, действительно, нет постоянных данных конфигурации /etc
вообще, и все эти вещи выводятся из содержимого таблицы разделов на диске , при каждой загрузке и при каждом systemctl daemon-reload
. В настоящее время они продвигают программы установки операционной системы, чем не пишут/etc/fstab
.
Конечно, в традиционной схеме у каждой операционной системы может быть свой собственный раздел подкачки, и они не могут касаться разделов подкачки друг друга. И действительно, если вы используете hibernate на диск через раздел подкачки и ожидаете возможности мультизагрузки с другой операционной системой во время гибернации ( что является очень плохой идеей, потому что так легко вызвать повреждение файловой системы ), это будет необходимо.
В схеме systemd, даже если операционная система еще не так, как это предполагают люди, работающие с systemd, и «не имеет состояния», вышеупомянутые генераторы работают; и, таким образом, все разделы подкачки (на ESP / корневом диске) с требуемым типом раздела автоматически используются всеми системными операционными системами. Поскольку они будут совместно использовать все автоматически обнаруживаемые разделы подкачки, на самом деле не нужно создавать один раздел подкачки для каждой установленной операционной системы.
дальнейшее чтение