如何在Windows中识别多分区U盘

写了个小脚本,想实现用 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 个分区出现

因此,有没有别的办法????

没太明白你的意思,你是要在 win 同时显示多个 U 盘分区呢还是要将 linux live 系统装到第二分区而不影响 win 识别第一分区?

只要显示剩余空间创建的那个分区就好了,然后后面(两个分区)用来放置DVD的数据。再说了,Windows 本来就不支持多分区 U 盘。之前在群里不是有人说Win只认第一个分区嘛!我这不就计算出dd以后该剩余多少空间,然后首先创建这个大小的分区再跳过前面分区的空间再dd的嘛!

有两个方法:
1、U 盘创建两个分区,第一个分区设置成 win 能识别的格式。第二个分区用 unetbootin 写入即可。
2、这个比较高端,U 盘量产,自己百度去吧