写了个小脚本,想实现用 dd 制作可启动 U 盘时创建一个能被 Windows 识别的剩余空间大小的分区 ;
之所以要这样做是因为原本不加什么参数的情况下 dd, 会在 U 盘开始的部分 (并不是 2048 扇区), 创建两个分区,就像这样:
Device Boot Start End Sectors Size Id Type
/dev/sdb1 3780 11339 7560 3.7M ef EFI (FAT-12/16/32)
/dev/sdb2 * 11340 9078783 9067444 4.3G 17 Hidden HPFS/NTFS
U 盘大小是 8 GB 的话,后面就还剩余很大一部分空间,在 Linux 下直接新建分区当然没问题,问题是 Windows 不认你在这边新建的分区 ;
问了下别人有说是 Windows 只认你第一个分区 (像在默认情况下确实只认这里的 EFI 分区), 于是想到了跳过一部分再 dd.
脚本的核心部分是这样的:
if $spare_size -gt 0 ]; then
parted --script $2 mklabel msdos
parted --script $2 mkpart primary 2048s $((${spare_size}*2))s
mkfs.ntfs -f -L data ${2}1
dd if=$1 of=$2 bs=1024 seek=$spare_size
else
echo "error: $2 has no enough space"
exit 1
usage
fi
然而,最后,脚本没错误,但是并没有实现我想要的,最后数据是能顺利写入,但是并没有预想的 3 个分区出现
因此,有没有别的办法????