Временно отключить расширение файловой системы во время первой загрузки

13

Я хотел бы создать собственный образ Raspberry Pi на основе Raspbian Lite, который уже настроен с правильной локалью, часовым поясом и т. Д. К сожалению для меня, текущие выпуски образов Raspbian автоматически изменяют размер файловой системы, а затем перезагружаются.

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

Отредактированный для уточнения эффектов должен быть обратимым; то есть я хочу, чтобы мой настроенный образ расширялся при первой загрузке.

patricktokeeffe
источник
Возможно, это не идеальное решение, но вы рассматривали возможность использования небольшой карты 4 ГБ, где это не представляет такой проблемы.
Стив Робиллард
2
Интересная идея .. Запись на маленькую карточку, эффективно ограничивающая размер. Я бы предпочел прямое решение, но это достойная альтернатива. Спасибо
patricktokeeffe
2
Это довольно раздражает. Я очень уверен, что это делается с помощью простого скрипта raspi-configзагрузки, который запускается при первой загрузке, и его легко отключить. Я могу посмотреть, но мне придется загрузить новое изображение, последнее, что у меня есть, с мая. Возвращайтесь через несколько часов.
Златовласка

Ответы:

13

Существует механизм, состоящий из двух частей, который несет ответственность за это на Распбиане; Скорее всего, лучшая идея - позаботиться об обеих частях, если они включены.

Во-первых, оригинал /boot/cmdline.txtвключает это:

init=/usr/lib/raspi-config/init_resize.sh

Обращаясь к сценарию с этим путем в корневом разделе, который будет использоваться в качестве процесса инициализации при загрузке. Без этого бита значение по умолчанию будет встроено в ядро /sbin/init, которое в Raspbian является символической ссылкой /lib/systemd/systemd.

После удаления этой части cmdline.txtсистема должна нормально загрузиться.

Что на самом деле делает этот скрипт, так это изменяет размер раздела на SD-карте. Это отличный процесс от изменения размера файловой системы в разделе 1, что и происходит дальше.

Таким образом, система немедленно перезагружается в обычном режиме (то есть через systemd), и init.dсценарий запускается на раннем этапе, который должен быть удален из второго раздела:

/etc/init.d/resizefs_once

И символическая ссылка на него, которая также должна быть удалена:

/etc/rc3.d/S01resizefs_once

Вы можете сохранить копию для последующего использования, если хотите, но raspi-configможете создать ее заново для вас (она встроена в raspi-configскрипт оболочки). Если он действительно работает, он удаляет себя, так что это больше не повторится.

Он также изменяет размер файловой системы во вновь измененном разделе.

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

Если вы позже используете raspi-configдля расширения файловой системы, он сразу же изменяет размер раздела, а затем устанавливает скрипт инициализации (как уже упоминалось).

Редактировать cmdline.txtпервый раздел просто на любом компьютере, так как это раздел VFAT. Для удаления init.dфайла требуется система, которая может обращаться к файловым системам ext4 и редактировать их.

Вместо этого обе задачи можно выполнить с самим файлом изображения перед записью карты; смонтировать и изменить образ Raspbian в системе GNU / Linux см. здесь . Есть параллельная Q & A для Windows .

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


  1. Хотя сообщение об ошибке из этого сценария, возможно, вводит в заблуждение эти термины, утверждая, что ему не удалось изменить размер корневой файловой системы , тогда как на самом деле не удалось изменить размер раздела с корневой файловой системой. Выполнение одного не делает автоматически другого.
Златовласка
источник
1
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Ганима
Отключение @ goldilock init=/usr/lib/raspi-config/init_resize.shот /boot/cmdline.txtработ на Ubuntu Mate тоже кажется вполне достаточным. У меня есть изображение помощника ubuntu размером 4 ГБ, которое было перенесено на SD-карту емкостью 32 ГБ, и оно содержит размеры разделов при исходном размере изображения. Также /etc/init.d/resizefs_onceи /etc/rc3.d/S01resizefs_onceне существует после первой загрузки на Ubuntu Mate.
сит
Просто для подтверждения, позволит ли восстановление файла cmdline.txtи, init.dи rc3.dфайла, и ссылки при следующей загрузке изменить все размеры самостоятельно, или мне придется запускать raspi-configи запускать его вручную?
Oxwivi
@Oxwivi Должно быть, да. Я разъяснил весь этот пост и сделал четкий комментарий об этом в конце.
Златовласка
Да спасибо. Также следует отметить, что IDK, начиная с какой версии, но, по крайней мере, самой последней версии, не содержит ссылок на скрипт изменения размера, которые вы упомянули снаружи cmdline.txt. Я загрузил образ Raspbian с помощью systemd-nspawnи все еще получал журналы ошибок, пытаясь изменить размер после удаления cmdline.txtобъекта.
Oxwivi