1

Я делаю проект на моем Raspberry Pi, где я пытаюсь, чтобы мой корневой раздел существовал на флэш-накопителе. Несколько флэш-накопителей, на самом деле. Поэтому все, что мне нужно сделать, чтобы перейти с одного рабочего места на другое, это подключить новый USB и перезагрузить компьютер.

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

Может ли это работать? Разве загрузочные разделы заботятся только о нескольких простых кусочках корня, которые можно легко сохранить одинаковыми для всех, или же эти два эволюционируют вместе и запутываются?

Я использую Raspian и намереваюсь использовать несколько версий корневой системы для одной и той же загрузки (по одной).

1 ответ1

1

Да, насколько мне известно, это вполне возможно!

Что вы хотите сделать, это скопировать корневой раздел на USB-накопитель, а затем изменить /etc/fstab и /boot/cmdline.txt чтобы он загружался с внешнего диска вместо второго раздела на SD-карте.

Если найден учебник, но, к сожалению, он не на английском, поэтому я постараюсь объяснить процедуру своими словами.

  1. Перезагрузите Pi с единственным внешним диском, являющимся USB-накопителем (таким образом, мы избегаем использования разных номеров дисков при каждой загрузке, поскольку уникальные идентификаторы дисков невозможны, если вы захотите поменять USB-накопители позже).

  2. Получить номер диска через sudo blkid . Должен быть только один, который выглядит так: /dev/sda1 .

  3. С помощью команды mount мы можем увидеть, была ли она автоматически смонтирована. Если его нет в списке, перейдите к следующему шагу. Если это так, запустите sudo umount /dev/sda1 (исправьте разные номера, если они не совпадают), чтобы размонтировать USB-накопитель.

  4. Затем мы хотим отформатировать USB-накопитель, чтобы иметь правильную файловую систему для корневого раздела Debian, которая предпочтительно является ext4 . Вы можете сделать это, выполнив команду: sudo mkfs.ext4 /dev/sda1 .

  5. После этого нам нужно (повторно) подключить USB-накопитель во временную папку, чтобы скопировать корневой раздел с SD-карты. Мы делаем это, запустив: sudo mount /dev/sda1 /mnt . (Если команда жалуется на то, что /mnt не существует, создайте папку с таким именем, выполнив: sudo mkdir /mnt и попробуйте снова.

  6. Теперь пришло время скопировать все данные из корневого раздела, сначала переключившись в верхний каталог с помощью: cd / а затем выполнив эту команду tar : sudo tar cf - * --exclude /mnt/* | ( cd /mnt; sudo tar xfp -) . Вероятно, это не самое компактное решение, но оно сработало для меня. Имейте в виду, что это может занять некоторое время, в зависимости от скорости вашей SD-карты и USB-накопителя.

  7. Затем нам нужно изменить /etc/fstab который содержит диски, которые должны быть смонтированы при загрузке, запустив sudo nano /mnt/etc/fstab . ( Обратите внимание, что это на флешке, так как мы добавили /mnt .) Вам нужно изменить соответствующие строки, чтобы они выглядели так:

/dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/sda1 / ext4 defaults,noatime 0 0

  1. Наконец, мы должны указать загрузочному разделу на SD-карте загрузиться с USB-накопителя. Но сначала, вероятно, хорошей идеей будет сделать резервную копию файла, который мы собираемся изменить сейчас, прежде чем мы сделаем это, выполнив команду : sudo cp /boot/cmdline.txt /boot/cmdline.txt.save ,

  2. Запустите sudo nano /boot/cmdline.txt чтобы ввести nano для изменения параметров загрузки в первом разделе SD-карты. В основном нам нужно изменить запись для корневого раздела на USB-накопитель. Учебник предлагает это ввести там (1 строка):

    dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2

    Вы можете прочитать, что означают эти параметры здесь.

    Теперь сохраните и выйдите из nano и при следующей перезагрузке ваш Raspberry Pi должен загрузиться с USB-накопителя, но, конечно, SD-карта все еще требуется, как вы уже упоминали.

Пока USB-накопитель является единственным (кроме SD-карты) при загрузке, это должно работать. У вас должно быть что-то динамическое, и я не вижу другого способа обращения к диску, кроме использования /dev/diskX .

Изменить: я забыл упомянуть, что вам нужно дублировать USB-накопитель после того, как вы закончите, или сделать те же шаги с другими установками на другие диски. Если версия Raspian, включая установленные пакеты, одинакова, я не вижу причин, почему это не должно работать.

Раздел /boot довольно простой, и строка, которую я упомянул в 9. - это практически все, что он делает. Ему просто нужно передать его на правильный раздел с правильной файловой системой, и он должен работать.

Я надеюсь, что это было полезно для вас.


Для немецкоязычных людей я оставлю ссылку на источник здесь: Источник.

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