Задача: сделать USB стик с Ubuntu, но так, что бы состояние сохранялось. Между перезагрузкам.
Забегая вперёд, это делается, но с одним ограничением: ядро не меняется. Но под мои задачи этого достаточно.
Итак, для начала, информации в интернете достаточно, но чёткого пошагового плана я не находил. И вот ресурсы, которыми я пользовался:
- Полезные ссылки:
- Говноссылки (я информацию от туда перерабатывал, но это пустая трата времени):
- https://itectec.com/ubuntu/ubuntu-how-to-get-a-live-usb-to-use-a-partition-for-persistence/
- http://compizomania.blogspot.com/2019/10/live-usb-persistent-ubuntu.html
- https://www.linuxuprising.com/2019/08/rufus-creating-persistent-storage-live.html
- https://www.howtogeek.com/howto/14912/create-a-persistent-bootable-ubuntu-usb-flash-drive/
Мне же ещё хотелось обойтись только стандартными утилитами. Но я позволю себе, как лентяю, пользоваться GParted, благо устанавливается он в Manjaro/ArchLinux в одну команду.
Из всех вышеперечисленных ссылок, по сути, достаточно только вдумчивого чтения одной: LiveUsbPendrivePersistent. Всё остальное - от лукавого. Но для общего развития почитать можно.
Первым шагом качаем ISO образ Ubuntu, пусть у нас это будет 20.04:
wget https://mirror.linux-ia64.org/ubuntu-releases/20.04.3/ubuntu-20.04.3-desktop-amd64.iso
Вторым шагом, берём USB флешку, я брал на 16Gb с USB3 интерфейсом - особо одарённые флешки такие тормозные, что загрузка с них даже не начинается. Имейте это в виду.
На флешке любым удобным методом создаём два раздела:
- FAT32, Primary, гигов на 4-5 и обязательно задаём метку UBUNTU
- EXT4, Primary, на всю котлету и обязательно задаём метку casper-rw
Очередность разделов тоже имеет роль, по крайней мере в минимизации объёма гимора. Да, ради этой же цели, используйте MBR вместо GPT для нашей флехи.
Для раздела UBUNTU не забываем задать флаг boot
:
Далее, монтируем раздел UBUNTU, у меня он примонтировался в /run/media/hatred/UBUNTU/
с этим и будем работать. В общем виде этот путь на многих современных системах можно записать в обобщённом виде:
/run/media/$USER/UBUNTU
Аналогично монтируем и сам образ ISO, который мы скачали, для этого в каталоге с ним выполним команды:
mkdir mount
sudo mount -o loop ubuntu-20.04.3-desktop-amd64.iso mount
cd mount
А теперь, согласно документации, копируем необходимые файлы на флешку:
cp -a .disk casper dists install pool preseed /run/media/hatred/UBUNTU/
cp -a isolinux /run/media/hatred/UBUNTU/syslinux # copy and rename
mv /run/media/hatred/UBUNTU/syslinux/isolinux.cfg /run/media/hatred/UBUNTU/syslinux/syslinux.cfg
mv /run/media/hatred/UBUNTU/syslinux/isolinux.bin /run/media/hatred/UBUNTU/syslinux/syslinux.bin
В ISO образе у нас есть символьные ссылки, FAT32 их не поддерживает, поэтому будут предупреждения, которые нужно просто проигнорировать.
ISO образ теперь можно отключить.
Для того, что бы флешка могла загрузиться, нужно установить Bootloader. В качестве оного используется syslinux и его части мы уже стянули с ISO образа, и для начала нужно их откорректировать:
- Открываем
/run/media/hatred/UBUNTU/syslinux/txt.cfg
для редактирования - Заменяем все вхождения “/cdrom” пустой строкой ("")
- Копируем первую
label
секцию и вставляем её самой первой, после чего:- Аргумент
label
заменяем имя наpersistent
, можно любое другое, но сейчас работаем с этим - Аргумент
menu label
заменяем на что-то человеко-понятное и описательное, например: “^Use Ubuntu in persistent mode” - К строке
append
необходимо добавить аргументpersistent
, лучшее место для этого - передinitrd=...
- Аргумент
- Аргумент для
default
стоит заменить наpersistent
, что бы наша флешка грузилась с сохранением состояния автоматически.
Собственно шаг 3.3 и говорит загрузочным скриптам попытаться найти раздел с именем casper-rw
, примонтировать его и использовать как оверлей для сохранения состояния файловой системы.
В моём случае полная конфигурация получилась такой:
default persistent
label persistent
menu label ^Use Ubuntu in persistent mode
kernel /casper/vmlinuz
append file=/preseed/ubuntu.seed persistent initrd=/casper/initrd quiet splash ---
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz
append file=/preseed/ubuntu.seed initrd=/casper/initrd quiet splash ---
label live-nomodeset
menu label ^Try Ubuntu without installing (safe graphics)
kernel /casper/vmlinuz
append file=/preseed/ubuntu.seed initrd=/casper/initrd quiet splash nomodeset ---
label live-install
menu label ^Install Ubuntu
kernel /casper/vmlinuz
append file=/preseed/ubuntu.seed only-ubiquity initrd=/casper/initrd quiet splash ---
label live-install-nomodeset
menu label ^Install Ubuntu (safe graphics)
kernel /casper/vmlinuz
append file=/preseed/ubuntu.seed only-ubiquity initrd=/casper/initrd quiet splash nomodeset ---
label memtest
menu label Test ^memory
kernel /install/mt86plus
label hd
menu label ^Boot from first hard disk
localboot 0x80
На этом с конфигурацией загрузчика мы закончили, теперь нужно его и поставить. Для этого нам нужны пакеты syslinux и mtools:
sudo pacman -S syslinux mtools
Ну и отключаем наш раздел с Ubuntu, можно мышкой по меняюшкам или:
umount /run/media/hatred/UBUNTU/
Да, нужно посмотреть, что за устройство соответствует этому разделу. Например, через dmesg или через mount до отключения раздела. У меня это /dev/sdc1
, но напишу в обобщённом виде, дабы не затереть чего:
# X меняем на нужную букву
sudo syslinux /dev/sdX1
Делаем магию (да, олдфаговая привычка):
sync
sync
sync
Извлекаем флешку и идём грузиться.
Enjoy!