我一直在 Ubuntu 14.04.5 LTS 上使用以下 bash 脚本为嵌入式系统创建可启动 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,但之后启动失败并出现以下输出,并且进入紧急 shell:
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
missing codepage or helper program, or other error
在紧急 shell 中,blkid
命令按预期显示分区,其与/boot/grub/grub.cfg
和中的 UUID 匹配/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
或命令?命令来自版本 的 Ubuntu ,但其选项使用具有 grub 的嵌入式文件系统中的目录,那么,是否会因此而出现一些不一致?grub-install
grub-install
2.02-2ubuntu8.13
2.02.beta2-4