Рейтинг:0

Игнорировать метку при монтировании загрузочного раздела образа ОС в качестве петлевого устройства

флаг ua

Я хотел бы смонтировать загрузочный раздел принадлежащий Ubuntu-21.10-предустановленный сервер-arm64+raspi.img.xz загружен с веб-сайта Raspberry PI.

Распаковка файла образа и монтирование загрузочного раздела с помощью команды вида

mount -o loop, offset = 1048576, sizelimit = 268435456 ubuntu-21.10-preinstalled-server-arm64+raspi.img /var/nfs/ubuntu-21.10-boot

... работает просто отлично. Вы можете увидеть смонтированный образ вместе с /dev/mmcblk0p1 устройство:

гора | загрузка grep
/dev/mmcblk0p1 в /boot/прошивке типа vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img на /var/nfs/ubuntu-21.10-boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset= ascii, короткое имя = смешанное, ошибки = remount-ro)

Однако, когда я добавляю то же крепление к /etc/fstab к уже существующему креплению для /загрузка/прошивка:

LABEL=системная загрузка /boot/firmware vfat по умолчанию 0 1
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img /var/nfs/ubuntu-21.10-boot ext4 loop,offset=1048576,sizelimit=268435456 0 0

... и перезагрузите систему (или запустите гора -а) загрузочный раздел образа монтируется как в /var/nfs/ubuntu-21.10-загрузки как и ожидалось, но и в /загрузка/прошивка и тем самым подменив настоящую прошивку на /dev/mmcblk0p1:

гора | загрузка grep
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img на /var/nfs/ubuntu-21.10-boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset= ascii, короткое имя = смешанное, ошибки = remount-ro)
/var/nfs/ubuntu-21.10-preinstalled-server-arm64+raspi.img в /boot/прошивке типа vfat (rw, relatime, fmask=0022, dmask=0022, codepage=437,iocharset=ascii,shortname=mixed, ошибки = перемонтировать-ро)

Очевидно, это связано с тем, что загрузочный раздел образа помечен системная загрузка который сталкивается с /dev/mmcblk0p1 помечены так же.

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

Я могу придумать следующие обходные пути, чтобы избежать перезаписи прошивки:

  • Избегайте использования fstab и монтируйте вручную в сценарии rc
  • Переименуйте загрузочный раздел файла образа
  • Заменять LABEL=загрузка системы с фактическим устройством, на котором находится прошивка (как предложено в ответе @Tilman ниже)

... но

Есть ли способ предотвратить автоматическое монтирование записи fstab по метке?

Christoffer Soop avatar
флаг ua
Добавил обходной путь из приведенного ниже ответа, но не принял его в качестве ответа, поскольку на самом деле он не отвечает на вопрос, можете ли вы предотвратить запуск механизма событий system.d при добавлении петлевого устройства в fstab.
Рейтинг:0
флаг cn

Пункт LABEL=загрузка системы рассказывает устанавливать смонтировать Любые файловая система с меткой тома системная загрузка на этой точке монтирования. Если вы этого не хотите, не используйте это предложение. Замените его на /dev/mmcblk0p1 что говорит устанавливать монтировать именно это устройство, не обращая внимания на этикетку.

Christoffer Soop avatar
флаг ua
Спасибо, но это предполагает, что мой сценарий знает, что устройство `system-boot` - это `/dev/mmcblk0p1`, что-то, что я надеюсь не принимать как должное или анализировать вывод mount или какой-либо другой команды...
Tilman avatar
флаг cn
Тогда нужно сделать шаг назад.Что определяет, какое устройство вы хотите подключить к `/boot/firmware`? Вы не можете использовать метку, так как вы сделали ее неуникальной. Вы не хотите использовать имя устройства, так как не хотите передавать это знание своему сценарию. Что тогда?
Christoffer Soop avatar
флаг ua
В этом случае я использую предварительно упакованный образ ОС, который я использую как для установки на «хост-машину», которая обслуживает файловую систему NFS для бездисковых клиентов. В настоящее время я использую /boot/firmware для бездисковых клиентов, но было бы лучше использовать загрузочный раздел образа, поскольку тогда можно было бы отделить версию операционной системы хоста от версии ОС клиентов. Я думаю, мой лучший вариант - изменить метку файла изображения. Также может потребоваться предварительное программное обеспечение, чтобы создание пользовательских изображений не казалось натяжкой.
Christoffer Soop avatar
флаг ua
... и тогда проще всего просто смонтировать загрузочный раздел, скопировать его в fs и пропустить всю проблему с меткой, вообще не добавляя загрузочный раздел в fstab. Просто подумал, что будет какой-то способ запретить функцию автоматического монтирования по метке fstab по умолчанию для отдельных строк, но я подозреваю, что то, что я вижу, является непреднамеренным поведением, поскольку петлевое устройство уже смонтировано, когда срабатывает автоматическое монтирование.
sudodus avatar
флаг jp
В общем, безопаснее использовать UUID, чем метку, чтобы определить, что монтировать, потому что он, скорее всего, будет уникальным. Возможно ли это в вашем случае?
Christoffer Soop avatar
флаг ua
@sudodus - вы имеете в виду изменение строки `LABEL=system-boot` по умолчанию в `/etc/fstab`, а не изменение метки раздела, определенного на изображении? Предполагая, что это работает (не понимаю, почему нет), мне все еще нужно выяснить, как написать его с помощью `cloud-init` или Ansible, и это на самом деле не отвечает на первоначальный вопрос... но, конечно, есть вероятность, что по крайней мере решает основную проблему - спасибо!
Christoffer Soop avatar
флаг ua
... и это было то, что ответ говорил в первую очередь.
sudodus avatar
флаг jp
@ChristofferSoop, да, я имею в виду, что переход на `UUID=...` делает его более надежным. (Вы можете найти правильный UUID с помощью команды `lsblk -f`). Обратите внимание, что идентификатор устройства `/dev/...` *не* так надежен, как использование uuid.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.