bashスクリプトを使用してパーティションを作成およびフォーマットする方法はありますか?
fdiskでできると思いますが、bashスクリプトからfdiskシェルにコマンドを送り、fdiskシェルを終了する方法がわかりません。
パーティションを作成してから、bash内からntfsにフォーマットしたいです。
bashスクリプトを使用してパーティションを作成およびフォーマットする方法はありますか?
fdiskでできると思いますが、bashスクリプトからfdiskシェルにコマンドを送り、fdiskシェルを終了する方法がわかりません。
パーティションを作成してから、bash内からntfsにフォーマットしたいです。
回答:
コマンドをfidskにパイピングする前の提案と同様に、このアプローチは後続のメンテナーに詳細を残すのに役立つことがわかりました。sedビットは、fdiskが入力を取得する前にすべてのコメントを取り除きます。
# to create the partitions programatically (rather than manually)
# we're going to simulate the manual input to fdisk
# The sed script strips off all the comments so that we can
# document what we're doing in-line with the actual commands
# Note that a blank line (commented as "defualt" will send a empty
# line terminated with a newline to take the fdisk default.
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
o # clear the in memory partition table
n # new partition
p # primary partition
1 # partition number 1
# default - start at beginning of disk
+100M # 100 MB boot parttion
n # new partition
p # primary partition
2 # partion number 2
# default, start immediately after preceding partition
# default, extend partition to end of disk
a # make a partition bootable
1 # bootable partition is partition 1 -- /dev/sda1
p # print the in-memory partition table
w # write the partition table
q # and we're done
EOF
sfdisk
より自動化に適しているfdisk
sfdisk
sfdisk
スクリプト化されたバージョンです fdisk
それはの一部であるutil-linux
と同じように、fdisk
ので、可用性が同じである必要があります。
ディスク全体を使用する単一のパーティションを持つパーティションテーブルは、次のコマンドで作成できます。
echo 'type=83' | sudo sfdisk /dev/sdX
より複雑なパーティションテーブルについては以下で説明します。
サンプルスクリプトを生成するには、ディスクのいずれかのセットアップを取得します。
sudo sfdisk -d /dev/sda > sda.sfdisk
Lenovo T430 Windows 7 / Ubuntuデュアルブートのサンプル出力:
label: dos
label-id: 0x7ddcbf7d
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 3072000, type=7, bootable
/dev/sda2 : start= 3074048, size= 195430105, type=7
/dev/sda3 : start= 948099072, size= 28672000, type=7
/dev/sda4 : start= 198504446, size= 749594626, type=5
/dev/sda5 : start= 198504448, size= 618891264, type=83
/dev/sda6 : start= 940277760, size= 7821312, type=82
/dev/sda7 : start= 817397760, size= 61437952, type=83
/dev/sda8 : start= 878837760, size= 61437500, type=83
スクリプトをファイルに保存したら、次の方法でスクリプトを適用できますsdX
。
sudo sfdisk /dev/sdX < sda.sfdisk
以下のためsfdisk
の入力、あなただけのデバイス名、およびタイプの使用ラインを省略することができます。
start= 2048, size= 3072000, type=7, bootable
それらは存在する場合は無視され、デバイス名はコマンドライン引数から取得されます。
いくつかの説明:
label
:パーティションテーブルのタイプ。dos
(MBR)は、広くサポートされている古いものでgpt
、新しい光沢のあるものです。unit
:sector
サポートのみ。通常、1セクターは512バイトです。cat /sys/block/sda/queue/hw_sector_size
参照してください:https : //unix.stackexchange.com/questions/2668/finding-the-sector-size-of-a-partitiondevice
:情報提供のみパーティションライン:
start
:パーティションが始まるディスク内のオフセット。
start
非常に良いデフォルトがあり、しばしば省略できます:
start
は2048、つまり1Mb(2048 + 512)で、これはディスク互換性のデフォルトですstart
デフォルトで最初の未割り当て位置size
:man sfdisk
言う:The default value of size indicates "as much as possible"
。したがって、単一のパーティションを使用してディスクを埋めるには、次のようにします。/dev/sda : start=2048, type=83
type
:各パーティションエントリのブートセクタに格納されるマジックバイト。可能な値:https : //en.wikipedia.org/wiki/Partition_typeこの例では、次のことがわかります。
7
(sda1
、2
および3
):Windowsがサポートするファイルシステム。プリインストールされたWindowsスタッフとLenovoリカバリパーティション。sudo blkid
ラベルはそれらを識別するのに役立ちます。5
(sda4
):拡張プライマリパーティション。他の論理パーティションが含まれます(MBRを持つプライマリパーティションは4つしか持てないため)83
(sda5
、7
、および8
):Linuxはサポートしてパーティションが。私にとってはhome
、Ubuntuのバージョンが異なる1つ、および2つのルート82
(sd6
):スワップfdisk
またsfdisk
、I
コマンドを使用してスクリプトを読み取ることもできます。このコマンドは、対話型fdisk
セッション中にスクリプトを「ソース」化し、パーティションを書き込む前にさらにカスタマイズできます。
Ubuntu sfdisk
16.04、2.27.1でテスト済み。
フォーマットせずにパーティションをフォーマットし、画像ファイルを作成します sudo
これは、sfdisk
ハードディスクを爆破せずに使用することを学ぶ良い方法です:https : //stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-disk-image-without-root- privilege / 52850819#52850819
fdisk
stdinから読み取りますので、適切なコマンドを入力するだけです。たとえば、次のコマンドは、パーティションテーブルがあればそれをクリアし、単一のパーティションを持つ新しいテーブルを作成します。ディスク全体:
(
echo o # Create a new empty DOS partition table
echo n # Add a new partition
echo p # Primary partition
echo 1 # Partition number
echo # First sector (Accept default: 1)
echo # Last sector (Accept default: varies)
echo w # Write changes
) | sudo fdisk
入力した内容を記録して、再現できるように、必要なタスクを実行することをお勧めします。
printf
なく、使用することをお勧めしecho
ます。
あなただけのコマンドのカップル、使用イントロでそれを行うことができます\ n個の代わりに、複数のエコーの。
echo -e "o\nn\np\n1\n\n\nw" | fdisk /dev/sda
\n
後に必要w
ですか?
echo
(しない限り、自動的に改行の行を終了する-n
オプションが使用されている)
printf 'o\nn\np\n1\n\n\nw' | fdisk /dev/sda
このスクリプトは、fdiskを使用して、他の人の回答に基づいてパーティトンを作成します。
スクリプトで次を変更します。
NUM_PARTITIONS = 5
PARTITION_SIZE = "+ 10G"
スクリプトの後に使用例を示します。
#!/bin/bash
if [ $# -eq 0 ]
then
echo "input the device"
exit
fi
NUM_PARTITIONS=5
PARTITION_SIZE="+10G"
SED_STRING="o"
TAIL="p
w
q
"
NEW_LINE="
"
LETTER_n="n"
EXTENDED_PART_NUM=4
TGTDEV=$1
SED_STRING="$SED_STRING$NEW_LINE"
for i in $(seq $NUM_PARTITIONS)
do
if [ $i -lt $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
if [ $i -eq $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE"
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
if [ $i -gt $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
done
SED_STRING="$SED_STRING$TAIL"
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
$SED_STRING
EOF
で実行:
sudo sh mk_partition.sh / dev / sdxxx
#!/bin/sh
hdd="/dev/hda /dev/hdb /dev/hdc"
for i in $hdd;do
echo "n
p
1
w
"|fdisk $i;mkfs.ext3 "$i1";done
このスクリプトを使用できます。hdd
定義されている場所に独自のパーティションを定義してください。1
との間には2つの空白がありw
ます。デフォルト値を取得するために存在する必要があります。