fdisk – 单行分区

你可以在一个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

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