你可以在一个USB磁盘中使用fdisk命令在一行中创build一个分区。
fdisk命令本质上是交互式的,但是我想使用fdisk命令在一行中自动创build分区。
尝试自动化fdisk是可能的,但是维护起来并不容易。 正如其他答案所指出的那样, parted或sfdisk都可以做你想做的事情,而且更容易自动化。
用parted在一行中创build一个分区:
parted -a optimal /dev/usb mkpart primary 0% 4096MB
就像在这个UNIX SE文章中看到的一样 。 每个部分都是不言而喻的,但以下是mkpart的定义:
mkpart [ part-type fs-type name ] 开始 结束
方括号中的内容是可选的,但是您可能希望primary用于您的部分types , 从 0% 开始并以4096MB结束,或者您的USB 4096MB容量很大。
sfdisk的input可以说比fdisk的input更容易理解,但它是为自动化而devise的。
#!/bin/sh # Example Usage: create_sd /dev/sdb DRIVE=$1 dd if=/dev/zero of=$DRIVE bs=1024 count=1024 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` echo DISK SIZE - $SIZE bytes CYLINDERS=`echo $SIZE/255/63/512 | bc` echo CYLINDERS - $CYLINDERS { echo ,9,0x0C,* echo ,,,- } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE mkfs.vfat -F 32 -n "boot" ${DRIVE}1 mke2fs -j -L "rootfs" ${DRIVE}2
来自“Linux日报” ,尽pipe不符合一线要求,但它显示了如何完成。
您可能需要使用parted命令而不是fdisk。
sfdisk也有一个非交互模式,从stdin读入分区信息。 虽然parted更灵活。
改用sfdisk 。
sfdisk手册页有点令人困惑,下面是一些关于如何使用sfdisk自动化分区设置的具体示例 。 例如,您可以通过sfdisk -l从一个驱动器保存分区信息,然后直接将其转储到新驱动器。
擦除所有内容,并创build一个分区:
dev='/dev/sdb' sudo umount "$dev" printf "o\nn\np\n1\n\n\nw\n" | sudo fdisk "$dev" sudo mkfs.ext4 "${dev}1"
另见: https : //superuser.com/questions/332252/creating-and-formating-a-partition-using-a-bash-script