diskpart
update 2010-10-22
概要
-
diskpartはディスク、パーティション、またはボリュームの管理を行なうユーティリティである。
-
「ディスクの管理:diskmgmt.msc」と同じことをコマンドで操作できる。
-
「ディスクの管理」では3つのpartitionまでは自動的にプライマリpartitionになってしまうが、diskpartを使えば最初
のpartitionから論理パーティションを作成することもできる。
-
スクリプトを使用することができる。(後述の「スクリプト処理例 : システム予約領域のマウント」参照)
ここでは「ベーシックディスク」での主なディスク管理例(作成と削除)を記述した。
※プライマリ領域を4つ作成すると、あとは領域を作成できない。したがって4つを超える領域を作成する場合は4つ目の領域を拡張領域として作成して拡張領
域内に論理領域を作成する。
※論理領域は拡張領域内にしか作成できない。
※diskpartでは拡張領域をpartition 0 とあらわす。
USBメモリのpartition作成時の注意事項
diskpart および 「ディスクの管理(diskmgmt.msc)」では 1つのプライマリpartition の作成しかできない。
複数のpartitionを作成したい場合は Gparted などのフリーソフトを使用する。(後述参照)
作成例 1
3つのプライマリ領域と1つの論理領域を作成する。
※ //より右の記述はコメントである。

DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> list partition //partitionを確認する
DISKPART> create partition primary size=50000 //50GBのプライマリ領域を作成
DISKPART> format fs=ntfs label="part1" quick
//ntfsでクイックフォーマット
DISKPART> create partition primary size=30000
DISKPART> format fs=ntfs label="part2" quick
DISKPART> create partition primary size=20000
DISKPART> format fs=ntfs label="part3" quick
DISKPART> create partition extended size=100000
//拡張領域を作成。sizeを指定しなければ残りの領域全てを割り当てる。
DISKPART> create partition logical size=10000
//論理領域を作成
DISKPART> format fs=ntfs label="part4" quick
DISKPART> select partition 1
DISKPART> active //アクティブにする
-----
上記で作成した領域をすべて削除する場合は下記のようになる。
DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> list partition //partitionを確認する
DISKPART> select partition 4
DISKPART> delete partition
DISKPART> select partition 0
DISKPART> delete partition
DISKPART> select partition 3
DISKPART> delete partition
DISKPART> select partition 2
DISKPART> delete partition
DISKPART> select partition 1
DISKPART> delete partition
DISKPART> list partition //partitionを確認する
作成例 2
1つのプライマリ領域と1つの論理領域を作成する。

DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> list partition //partitionを確認する
DISKPART> create partition primary size=50000 //50GBのプライマリ領域を作成
DISKPART> format fs=ntfs label="part1" quick
//ntfsでクイックフォーマット
DISKPART> create partition extended size=100000
//拡張領域を作成。sizeを指定しなければ残りの領域全てを割り当てる。
DISKPART> create partition logical size=10000
//論理領域を作成
DISKPART> format fs=ntfs label="part2" quick
DISKPART> select partition 1
DISKPART> active //アクティブにする
作成例 3
論理領域だけを作成する。

DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> list partition //partitionを確認する
DISKPART> create partition extended size=100000
//拡張領域を作成。sizeを指定しなければ残りの領域全てを割り当てる。
DISKPART> create partition logical size=10000
//論理領域を作成
DISKPART> format fs=ntfs label="part1" quick
領域の拡張
拡張できるためには次の条件が必要である。
- 拡張したい領域に連続した「未割り当て領域」が存在すること。
- ファイルシステムがNTFSであること。
現在の(動作中の)システム パーティションまたはブート パーティションを拡張することはできない。
※インストール用DVD(またはシステム修復CD)で起動すれば操作できる。
「作成例 1」のpartition 2 を拡張するものとする。
DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> list partition //partitionを確認する
DISKPART> select partition 3
DISKPART> delete partition //partition 3 を削除して「未割り当て領域」にする
DISKPART> select partition 2
DISKPART> extend // size を指定しない場合は連続した「未割り当て領域」のすべてを使用して拡張される
DISKPART> list partition //partitionの番号が変化しているので確認する

MBRのclean処理
(zeroで埋める)

DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> clean //MBRをzeroで埋める
MBRをcleanにしたあとの表示は次のようになる。
ディスクは初期化されていない状態なので、領域は「未割り当て」(パーティションがない状態)となっている。


参考 : Linuxの場合は、デバイスが sdb であるとすれば次のように ddコマンドを使用してMBRをゼロで埋める。
dd if=/dev/zero of=/dev/sdb bs=512 count=1
Disk全領域のclean処理(zero
で埋める)

DISKPART> list disk //diskを確認する
DISKPART> select disk 0
DISKPART> clean all //ディスク全領域をzeroで埋める。
※処理時間がかかる(100GBで30分程度)
※処理中は経過表示などは何も表示されないので「ディスクを正常にクリーンな状態にしました」というメッセージが表示されるまで待つこと。
Clean処理の画面例

clean または clean all を行なうとディスクのパーティション テーブル情報はクリアされている。
したがって、HDDを「ディスクの管理」で表示すると、パーティション スタイル(パーティション テーブル)を作成するダイアログが表示される。
ディスクは「初期化されていません」と表示されている。(つまり、パーティション テーブル情報がありません、という状態になっている)
パーティションは「未割り当て」になっている。(つまり、何も無いcleanな状態になっている)
この状態ではフォルダやファイルを作成することが出来ないのでファイル エクスプローラには表示されない。
ディスクを使用出来る状態にするには、パーティション スタイル(パーティション テーブル)を作成して、領域を作成してフォーマットする必要がある。

参考 : Linuxの場合は、デバイスが sdb であるとすれば次のように ddコマンドを使用して全領域をゼロで埋める。
dd if=/dev/zero of=/dev/sdb
diskpartでclean処理が出来ない場合の対応
clean処理が出来ないデバイスはWindows環境では使えなくなる。
この場合はLinux環境でGPartedを使用して「デバイス」/「パーティションテーブルの作成」で msdos パーティションテーブルとして初期化すれば使えるようになる。
USBメモリの複数partition作成時の注意事項
複数partitionを作成、操作する場合は Gparted などのフリーソフトを使用する。
diskpart や 「ディスクの管理」では2番目以降のpartitionを正しく操作できない。
下記の例のように Gpartedで作成した partition 2 および partition 3 を 識別できずに partition 0 と認識している。

「ディスクの管理」でも partition 2 および partition 3 のドライブレター、ラベル、ドライブ情報が正しく表示されていない。

Gparted では正しく表示されている。

スクリプト処理例 : HDD0の初期化とパーティション作成
※このサンプルを実験として安易に実行しないこと!(HDD0が初期化されてしまう)
下記のテキストをメモ帳で作成して、ファイル名:createpartitions.txt として保存する。
コマンドプロンプト(管理者)にて diskpart /s createpartitions.txt を実行するとHDD0が初期化されてパーティションが作成される。
rem BIOS/MBRベース環境の領域作成のサンプル
rem HDD0を初期化する
select disk 0
clean
rem アクティブなSystem 領域を作成する
create partition primary size=350
format quick fs=ntfs label="System"
assign letter="S"
active
rem Windows領域を作成する
create partition primary
rem 回復パーティション用に残しておく最小領域を指定しておく
shrink minimum=5000
format quick fs=ntfs label="Windows"
assign letter="W"
rem Recovery 領域作成
create partition primary
format quick fs=ntfs label="Recovery image"
assign letter="R"
set id=27
rem 処理結果を表示
list volume
rem コマンドプロンプトを終了する
exit
スクリプト処理例 : USBメモリを初期化してfat32ファイルシステムの領域を作成する
下記のスクリプトを usb-format.cmd ファイルとして作成して実行する。
※USBメモリはディスク1 として認識されているものとしている。
select disk 1
clean
create partition primary
format quick fs=fat32 label="usb"
assign letter="S"
exit
スクリプト処理例 : システム予約領域のマウント
下記のスクリプトを mapdrive.cmd ファイルとして作成して実行すれば「システム予約領域(System Reserved)」をマウントすることができる。
スクリプトではシステム予約領域を "システムで予約済み" という文字列で判定していいる。(名前が異なる場合は、この判定を編集して使用すること)
@Echo Off
echo LIST VOLUME > "%TEMP%\DISKPARTSCRIPT.TXT"
DISKPART /S "%TEMP%\DISKPARTSCRIPT.TXT" > "%TEMP%\FOUNDVOLUMES.TXT"
For /F "tokens=2" %%I in ('FindStr /C:"システムで予約済み" "%TEMP%\FOUNDVOLUMES.TXT"') Do Call :PARSE %%I
DEL /Q "%TEMP%\DISKPARTSCRIPT.TXT"
DEL /Q "%TEMP%\FOUNDVOLUMES.TXT"
GoTo :EOF
:PARSE
If "%1"=="" GoTo :EOF
set FREEDRIVELETTER=NONE
for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if not exist %%p:\nul set FREEDRIVELETTER=%%p
if %FREEDRIVELETTER% == NONE goto :NOFREEDRIVES
rem echo Assigning Volume %1 To %FREEDRIVELETTER%:
echo System Reserved パーティションを %FREEDRIVELETTER%:ドライブ としてマウントしました。エクスプローラでアクセスできます。
echo SELECT VOLUME %1 > "%TEMP%\DISKPARTMOUNTSCRIPT.TXT"
echo ASSIGN LETTER=%FREEDRIVELETTER% >> "%TEMP%\DISKPARTMOUNTSCRIPT.TXT"
echo SELECT VOLUME %1 > "%TEMP%\DISKPARTUNMOUNTSCRIPT.TXT"
echo REMOVE >> "%TEMP%\DISKPARTUNMOUNTSCRIPT.TXT"
DISKPART /S "%TEMP%\DISKPARTMOUNTSCRIPT.TXT" > NUL
DEL /Q "%TEMP%\DISKPARTMOUNTSCRIPT.TXT"
echo ----------
echo %FREEDRIVELETTER%:ドライブをアンマウントするには任意のキー(たとえば Spaceキー)を押してください。
PAUSE > NUL
DISKPART /S "%TEMP%\DISKPARTUNMOUNTSCRIPT.TXT" > NUL
echo アンマウントしました。
DEL /Q "%TEMP%\DISKPARTUNMOUNTSCRIPT.TXT"
SHIFT
GoTo :PARSE
GOTO :EOF
:NOFREEDRIVES
echo ドライブレターを割り当てることができません。
end of list