скрипт для создания загрузочного usb

Я использовал следующий сценарий bash в Ubuntu 14.04.5 LTS для создания загрузочного USB-диска для встроенной системы, который работал нормально:

# Partition disk.
/usr/bin/sudo /bin/umount /dev/sdc1 /dev/sdc2
/usr/bin/sudo /sbin/parted -s -- /dev/sdc mklabel msdos
/usr/bin/sudo /sbin/parted -s -- /dev/sdc mkpart primary 2048s 5244928s
/usr/bin/sudo /sbin/parted -s -- /dev/sdc set 1 boot on
/usr/bin/sudo /sbin/parted -s -- /dev/sdc mkpart primary 5246976s -977920s
/usr/bin/sudo /sbin/parted -s -- /dev/sdc quit
/usr/bin/sudo /sbin/partprobe /dev/sdc
/usr/bin/sudo /bin/umount /dev/sdc1 /dev/sdc2
/usr/bin/sudo /sbin/mkfs.ext4 -L rootfs /dev/sdc1
/usr/bin/sudo /sbin/mkfs.ext4 -L var /dev/sdc2
/usr/bin/sudo /sbin/partprobe /dev/sdc
/bin/sync

# Copy filesystem.
/usr/bin/udisksctl mount -b /dev/sdc1
/usr/bin/sudo /bin/cp -a ${ROOTFS_DIR}/. ${ROOTFS_MOUNTPOINT}
/usr/bin/udisksctl mount -b /dev/sdc2
/usr/bin/sudo /bin/cp -a ${VAR_DIR}/. ${VAR_MOUNTPOINT}
/bin/sync

# Upload bootloader.
/usr/bin/udisksctl mount -b /dev/sdc1
/usr/bin/sudo /usr/sbin/grub-install --no-floppy --directory=${ROOTFS_MOUNTPOINT}/usr/lib/grub/i386-pc --locale-directory=${ROOTFS_MOUNTPOINT}/usr/share/locale --boot-directory=${ROOTFS_MOUNTPOINT}/boot /dev/sdc
/bin/sync
/usr/bin/sudo /usr/bin/eject /dev/sdc

Вывод fdisk для сгенерированного USB-диск:

Disk /dev/sdc: 14.9 GiB, 16022241280 bytes, 31293440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x22953b4d

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdc1  *       2048  5244928  5242881  2.5G 83 Linux
/dev/sdc2       5246976 30315520 25068545   12G 83 Linux

Недавно я перешел на Ubuntu 18.04, но теперь grub загружает ядро ​​linux и initramfs, хотя после этого происходит сбой загрузки со следующим выводом, и он сбрасывается в аварийную оболочку:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
missing codepage or helper program, or other error

В аварийной оболочке команда blkid показывает ожидаемые разделы, которые соответствуют UUID в /boot/grub/grub.cfg и /etc/fstab:

/dev/sdb1: LABEL="rootfs" UUID="5556accb-3244-47d0-8042-aaad74dd3950" TYPE="ext4" PARTUUID="22953b4d-01"
/dev/sdb2: LABEL="var" UUID="6ee3b764-77dB-481d-9564-fbfabb590933" TYPE="ext4" PARTUUID="22953b4d-02"

Поскольку я уже возникли некоторые другие проблемы в Ubuntu 18.04, такие как поведение, отличное от losetup, другой формат вывода для fdisk и т. д. Должен ли я предоставить дополнительные опции команд для команд mkfs.ext4 или grub-install в сценарии? Команда grub-install взята из Ubuntu с версией 2.02-2ubuntu8.13, но в ее опциях используются каталоги из встроенной файловой системы, которая имеет grub 2.02.beta2-4, поэтому могут быть некоторые несоответствия из-за этого?

1
задан 1 May 2019 в 10:37

1 ответ

Оказывается, mkfs.ext4 было причиной, так как команда в Ubuntu 18.04 новее, чем mount er во встроенной системе, вызывая следующую ошибку во время загрузки:

EXT4-fs (mmcblk1p2): couldn't mount RDWR because of unsupported optional features (400)

На основе этот поток и эта информация , я отключил функцию metadata_csum со следующей опцией при создании файловой системы, и система загрузилась нормально:

/usr/bin/sudo /sbin/mkfs.ext4 -O ^metadata_csum -L 'rootfs' /dev/sdc1
0
ответ дан 1 May 2019 в 10:37

Другие вопросы по тегам:

Похожие вопросы: