Вопрос или проблема
У нас есть старая физическая машина с дистрибутивом Ubuntu 20.04, и у этой физической машины всего 103GB /root раздела
и 10GB подкачки
. В настоящее время мы использовали до 45GB. Мы хотим создать загрузочный ISO-образ из текущей установки.
Также мы пытались создать образ, используя указанные ниже пакеты. При выполнении этих пакетов мы сталкиваемся с ошибкой – “размер filesystem.squashfs превышает 4GB”. Затем мы проверили, что файл файловой системы занимает более 8GB. Таким образом, мы не можем создать образ файла. Есть ли какие-либо другие пакеты/инструменты для создания образа из текущей установки? Спасибо!
1.remastersys – respin – https://itectec.com/ubuntu/ubuntu-build-the-own-ubuntu-iso/
2.distroshare image builder – https://github.com/Distroshare/distroshare-ubuntu-imager
Вот скрипт. Обратите внимание на примечания.
Вам нужно будет поместить его на USB, чтобы сделать его загрузочным. Balena etcher подойдет для iso. iso будет в папке LIVE_BOOT, созданной скриптом. Используйте balena etcher и USB-накопитель или внешний жесткий диск достаточно большого объема, чтобы разместить образ на чем-то полезном. Вы также можете смонтировать как устройство обратной связи. В Интернете есть хорошие инструкции по установке живой системы и/или созданию постоянной системы.
Сохраните скрипт в текстовом файле и выполните его. Назовите текстовый файл чем-то вроде makelive, затем “chmod +x makelive”, затем “./makelive”
Вы также можете заранее изменить названия вещей, изменив переменные сразу под примечаниями. Приятного использования!
#!/bin/bash
# Создаст загрузочный iso из текущей установленной системы Debian
#
# Убедитесь, что эти пакеты установлены перед запуском этого скрипта
# Зависимости: rsync live-boot systemd-sysv debootstrap squashfs-tools xorriso isolinux syslinux-efi grub-pc-bin grub-efi-amd64-bin grub-efi-ia32-bin mtools dosfstools resolvconf
#
# Запустите скрипт от имени root или под su в терминале
# Переменные для имени компьютера, имени iso и метки объема
HOSTNAME=debian-live
ISONAME=debian-live
LABEL=DEBLIVE
mkdir -p $HOME/LIVE_BOOT $HOME/LIVE_BOOT/chroot &&
rsync -aAXv --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,$HOME/LIVE_BOOT/*} /* $HOME/LIVE_BOOT/chroot &&
printf "" > $HOME/LIVE_BOOT/chroot/etc/fstab && printf "" > $HOME/LIVE_BOOT/chroot/etc/resolv.conf &&
echo "$HOSTNAME" > $HOME/LIVE_BOOT/chroot/etc/hostname &&
mkdir -p $HOME/LIVE_BOOT/{staging/{EFI/BOOT,boot/grub/x86_64-efi,isolinux,live},tmp} &&
mksquashfs $HOME/LIVE_BOOT/chroot $HOME/LIVE_BOOT/staging/live/filesystem.squashfs -e boot &&
cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* $HOME/LIVE_BOOT/staging/live/vmlinuz && cp $HOME/LIVE_BOOT/chroot/boot/initrd.img-* $HOME/LIVE_BOOT/staging/live/initrd &&
touch $HOME/LIVE_BOOT/staging/isolinux/isolinux.cfg &&
printf "UI vesamenu.c32\n\nMENU TITLE Boot Menu\nDEFAULT linux\nTIMEOUT 600\nMENU RESOLUTION 640 480\nMENU COLOR border 30;44 #40ffffff #a0000000 std\nMENU COLOR title 1;36;44 #9033ccff #a0000000 std\nMENU COLOR sel 7;37;40 #e0ffffff #20ffffff all\nMENU COLOR unsel 37;44 #50ffffff #a0000000 std\nMENU COLOR help 37;40 #c0ffffff #a0000000 std\nMENU COLOR timeout_msg 37;40 #80ffffff #00000000 std\nMENU COLOR timeout 1;37;40 #c0ffffff #00000000 std\nMENU COLOR msg07 37;40 #90ffffff #a0000000 std\nMENU COLOR tabmsg 31;40 #30ffffff #00000000 std\n\nLABEL linux\n MENU LABEL Debian Live [BIOS/ISOLINUX]\n MENU DEFAULT\n KERNEL /live/vmlinuz\n APPEND initrd=/live/initrd boot=live\n\n LABEL linux\n MENU LABEL Debian Live [BIOS/ISOLINUX] (nomodeset)\n MENU DEFAULT\n KERNEL /live/vmlinuz\n APPEND initrd=/live/initrd boot=live nomodeset\nEOF" > $HOME/LIVE_BOOT/staging/isolinux/isolinux.cfg &&
touch $HOME/LIVE_BOOT/staging/boot/grub/grub.cfg &&
printf "insmod part_gpt\ninsmod part_msdos\ninsmod fat\ninsmod iso9660\n\ninsmod all_video\ninsmod font\n\nset default=\"0\"\nset timeout=30\n\n# Если у X возникают проблемы с обнаружением экранов, попробуйте с/без nomodeset.\n\nmenuentry \"Debian Live [EFI/GRUB]\" {\n search --no-floppy --set=root --label $LABEL\n linux (\$root)/live/vmlinuz boot=live\n initrd (\$root)/live/initrd\n}\n\nmenuentry \"Debian Live [EFI/GRUB] (nomodeset)\" {\n search --no-floppy --set=root --label $LABEL\n linux (\$root)/live/vmlinuz boot=live nomodeset\n initrd (\$root)/live/initrd\n}\nEOF" > $HOME/LIVE_BOOT/staging/boot/grub/grub.cfg &&
cp $HOME/LIVE_BOOT/staging/boot/grub/grub.cfg $HOME/LIVE_BOOT/staging/EFI/BOOT/ &&
touch $HOME/LIVE_BOOT/tmp/grub-embed.cfg &&
printf "if ! [ -d \"\$cmdpath\" ]; then\n # В некоторых микропрограммах GRUB имеет неправильный cmdpath, когда загружается с оптического диска.\n # https://gitlab.archlinux.org/archlinux/archiso/-/issues/183\n if regexp --set=1:isodevice '^(\([^)]+\))\/?[Ee][Ff][Ii]\/[Bb][Oo][Oo][Tt]\/?$' \"\$cmdpath\"; then\n cmdpath=\"\${isodevice}/EFI/BOOT\"\n fi\nfi\nconfigfile \"\${cmdpath}/grub.cfg\"\nEOF" > $HOME/LIVE_BOOT/tmp/grub-embed.cfg &&
cp /usr/lib/ISOLINUX/isolinux.bin "${HOME}/LIVE_BOOT/staging/isolinux/" && cp /usr/lib/syslinux/modules/bios/* "${HOME}/LIVE_BOOT/staging/isolinux/" &&
cp -r /usr/lib/grub/x86_64-efi/* "${HOME}/LIVE_BOOT/staging/boot/grub/x86_64-efi/" &&
grub-mkstandalone -O i386-efi --modules="part_gpt part_msdos fat iso9660" --locales="" --themes="" --fonts="" --output="$HOME/LIVE_BOOT/staging/EFI/BOOT/BOOTIA32.EFI" "boot/grub/grub.cfg=$HOME/LIVE_BOOT/tmp/grub-embed.cfg" &&
grub-mkstandalone -O x86_64-efi --modules="part_gpt part_msdos fat iso9660" --locales="" --themes="" --fonts="" --output="$HOME/LIVE_BOOT/staging/EFI/BOOT/BOOTx64.EFI" "boot/grub/grub.cfg=$HOME/LIVE_BOOT/tmp/grub-embed.cfg" &&
(cd $HOME/LIVE_BOOT/staging && dd if=/dev/zero of=efiboot.img bs=1M count=20 && mkfs.vfat efiboot.img && mmd -i efiboot.img ::/EFI ::/EFI/BOOT && mcopy -vi efiboot.img $HOME/LIVE_BOOT/staging/EFI/BOOT/BOOTIA32.EFI $HOME/LIVE_BOOT/staging/EFI/BOOT/BOOTx64.EFI $HOME/LIVE_BOOT/staging/boot/grub/grub.cfg ::/EFI/BOOT/) &&
xorriso -as mkisofs -iso-level 3 -o "${HOME}/LIVE_BOOT/$ISONAME.iso" -full-iso9660-filenames -volid "$LABEL" --mbr-force-bootable -partition_offset 16 -joliet -joliet-long -rational-rock -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-boot isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table --eltorito-catalog isolinux/isolinux.cat -eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot -isohybrid-gpt-basdat -append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B ${HOME}/LIVE_BOOT/staging/efiboot.img "${HOME}/LIVE_BOOT/staging"
chmod 755 $HOME/LIVE_BOOT/$ISONAME.iso
rm -r $HOME/LIVE_BOOT/staging/
rm -r $HOME/LIVE_BOOT/chroot/
rm -r $HOME/LIVE_BOOT/tmp/
Ответ или решение
Создание загрузочного ISO-образа из текущей установки Ubuntu, особенно версии 20.04, — это важный шаг, позволяющий создать резервную копию системы и упростить восстановление в случае неполадок. Рассмотрим, как это можно сделать, принимая во внимание возникшую проблему с превышением размера файла filesystem.squashfs
4 ГБ.
Понимание проблемы
Вы упомянули, что пытались использовать пакеты, такие как remastersys
и distroshare image builder
, для создания ISO-образа. Однако вы столкнулись с ошибкой, связанной с ограничением размера файловой системы, которое не позволяет создавать образы более 4 ГБ. Это связано с тем, что squashfs
поддерживает большие файлы, но многие инструменты, использующие squashfs
, вероятно, не могут обработать файлы такого размера должным образом.
Для решения вашей задачи мы можем воспользоваться альтернативным подходом с использованием более мощных инструментов, таких как xorriso
, которые могут создавать образы без ограничений, связанных с squashfs
.
Процесс создания загрузочного ISO-образа
Шаг 1: Установка необходимых пакетов
Перед тем как начать, убедитесь, что у вас установлены все необходимые инструменты. Используйте следующую команду для установки:
sudo apt update
sudo apt install rsync live-boot systemd-sysv debootstrap squashfs-tools xorriso isolinux syslinux-efi grub-pc-bin grub-efi-amd64-bin grub-efi-ia32-bin mtools dosfstools resolvconf
Шаг 2: Создание скрипта для автоматизации процесса
Сохраните следующий скрипт под именем makelive
и сделайте его исполняемым:
#!/bin/bash
# Создание загрузочного ISO-образа из установленной системы Ubuntu
HOSTNAME=ubuntu-live
ISONAME=ubuntu-live
LABEL=UBUNTU_LIVE
mkdir -p $HOME/LIVE_BOOT $HOME/LIVE_BOOT/chroot
rsync -aAXv --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,$HOME/LIVE_BOOT/*} /* $HOME/LIVE_BOOT/chroot
printf "" > $HOME/LIVE_BOOT/chroot/etc/fstab
printf "" > $HOME/LIVE_BOOT/chroot/etc/resolv.conf
echo "$HOSTNAME" > $HOME/LIVE_BOOT/chroot/etc/hostname
mkdir -p $HOME/LIVE_BOOT/{staging/{EFI/BOOT,boot/grub/x86_64-efi,isolinux,live},tmp}
mksquashfs $HOME/LIVE_BOOT/chroot $HOME/LIVE_BOOT/staging/live/filesystem.squashfs -e boot
cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* $HOME/LIVE_BOOT/staging/live/vmlinuz
cp $HOME/LIVE_BOOT/chroot/boot/initrd.img-* $HOME/LIVE_BOOT/staging/live/initrd
cat << EOF > $HOME/LIVE_BOOT/staging/isolinux/isolinux.cfg
UI vesamenu.c32
MENU TITLE Boot Menu
DEFAULT linux
TIMEOUT 600
LABEL linux
MENU LABEL Ubuntu Live
KERNEL /live/vmlinuz
APPEND initrd=/live/initrd boot=live
EOF
# Конфигурация GRUB
cat << EOF > $HOME/LIVE_BOOT/staging/boot/grub/grub.cfg
set default="0"
set timeout=30
menuentry "Ubuntu Live" {
linux /live/vmlinuz boot=live
initrd /live/initrd
}
EOF
# Создание ISO
xorriso -as mkisofs -o "${HOME}/LIVE_BOOT/$ISONAME.iso" \
-full-paths -volid "$LABEL" \
--mbr-force-bootable -partition_offset 16 \
-boot-info-table -boot-load-size 4 \
--eltorito-boot isolinux/isolinux.bin -eltorito-catalog isolinux/isolinux.cat \
--eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot \
-isohybrid-gpt-basdat -append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B "${HOME}/LIVE_BOOT/staging"
rm -r $HOME/LIVE_BOOT/staging/
rm -r $HOME/LIVE_BOOT/chroot/
Шаг 3: Запуск скрипта
Запустите следующую команду, чтобы сделать скрипт исполняемым и запустить его:
chmod +x makelive
sudo ./makelive
Шаг 4: Создание загрузочной флешки
Для создания загрузочной флешки из созданного ISO-образа вы можете использовать программу Balena Etcher:
- Загрузите и откройте Balena Etcher.
- Выберите созданный ISO-образ.
- Выберите USB-накопитель и нажмите "Flash".
Заключение
Создание загрузочного ISO-образа из текущей установки Ubuntu 20.04 — это важный процесс для резервного копирования и восстановления системы. Используя предложенный подход и скрипт, вы сможете успешно создать образ и решить проблему с размером файловой системы. Не забывайте регулярно делать резервные копии для минимизации потерь данных и времени в случае неполадок.