[CentOS7.4] partedコマンドでWindows(ntfs)とLinux(ext4)のパーティションを自動で作成する

こんにちは、じんないです。

partedコマンドを使って、WindowsとLinuxのパーティションを自動的に切る方法を紹介します。

WindowsとLinuxのデュアルブートが可能な環境で、ページファイルやログの吐き出し先にそれぞれのローカルドライブが欲しいなぁと思うときがあるかもしれません。

Windowsの標準機能ではLinuxのファイルシステム(ext4)をフォーマットできませんが、LinuxからはWindowsのファイルシステム(ntfs)をフォーマットすることができます。

パーティション操作ではfdiskコマンドがメジャーですが、対話形式のため台数が多い場合は面倒です。

今回は、非対話形式でパーティション操作が可能なpartedコマンドを使っていきます。

partedコマンドも本来は対話形式ですが、-sオプションを追加することで非対話形式での操作が可能となります。

注意事項

パーティション操作を誤ると、最悪の場合OSの起動ができなくなる恐れがあります。

仮想マシンなどでシミュレーションの上、実施することをおススメします。

想定環境とシナリオ

1本のローカルディスクからWindowsとLinuxのパーティションを切り出します。

パーティションサイズはそれぞれ20GB。

OSはWindows 10とCentOS 7.4を想定しています。

1つずつコマンドを確認し、最後に自動化するシェルスクリプトを紹介します。

まずはディスクを確認する

lsblk コマンドで、ディスク情報を確認します。

[root@jinna-i ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk
sr0     11:0    1  1024M  0 rom
pdisk0 222:0    0 488.3G  0 disk /

240GBのディスクが sda で認識されています。これが対象のディスクです。実パスは/dev/sdaになります。

デバイス名はお使いの環境に合わせて読み替えてください。

パーティションを切ってみる

ディスクの確認ができたところで、早速パーティションを切っていきます。

Windows用のパーティションを切る

まずは、Windows用に20GBのパーティションを切ります。

コマンド例は以下のとおり。

parted -s -a optimal /dev/sda -- mkpart primary ntfs 1MiB 20481MiB

-a optimal でアライメントの最適化をしてくれる(らしい)

パーティションを切るときはmkpartコマンドをつなげます。

-- mkpart [part-type] [fs-type] [start] [end]

[part-type]は新規でつくる場合はprimaryでいいです。拡張の場合はextendedを指定します。

[fs-type]はWindowsで使うのでntfs。ここで指定してもntfsでフォーマットしてくれる訳ではないので注意です。

[start][end]は開始と終了位置です。デフォルトはMB(10進接頭辞)です。ここではMiB(2進接頭辞)を使いました。

OMiBとかで指定すると警告が出るので、セクタサイズの倍数をオフセットしておきましょう。

セクタサイズはparted -lとかで確認できます。

Linux用のパーティションを切る

次はLinux用に20GBのパーティションを切ります。

コマンド例は以下のとおり。

parted -s -a optimal /dev/sda -- mkpart primary ext4 20482MiB 40962MiB

[fs-type]はLinux用にext4を指定します。

当たり前ですが[start][end]は先に作ったパーティションと被らないようにします。

無事に切り終わったらもう一度lsblkを実行して確認します。

[root@jinna-i ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk
├sda1   8:1    0    20G  0 part ★Windows用のパーティション
└sda2   8:2    0    20G  0 part ★Linux用のパーティション
sr0     11:0    1  1024M  0 rom
pdisk0 222:0    0 488.3G  0 disk /

フォーマットする

ファイルシステムとして使うにはフォーマットしないといけません。

ntfsフォーマットを実行するにはntfsprogsというパッケージが必要なのでインストールします。

yum -y install ntfsprogs

  • ntfsフォーマット

mkfs.ntfs -Q -L Volume /dev/sda1

-Qでクイックフォーマット、-Lでラベルの付与ができます。

  • ext4フォーマット

mkfs.ext4 /dev/sda2

フォーマットができたら、Windows、Linuxそれぞれで認識ができているか確認しましょう。

自動化するスクリプトを作成する

ここまでの流れを自動化するシェルスクリプトを作成します。

台数が多いと以下の感じで進められると大変助かります。

  1. 自動ログイン
  2. パーティション作成
  3. フォーマット
  4. 自動シャットダウン

自動ログインの設定は、/etc/gdm/custom.confdaemonセクションで設定します。

※root権限で実行されるのでパスワードの指定は不要です。

[root@jinna-i ~]# vi /etc/gdm/custom.conf
    :
[daemon]
TimedLoginEnable=true
TimedLogin=user1 ★自動ログインするユーザーを指定 
TimedLoginDelay=0
    :

パーティション作成 / フォーマット用スクリプトの作成

スクリプトの例を紹介しておきます。適宜変更してみてください。

ここでは/usr/local/sbin/kitting.shとして作成します。

#!/bin/bash

## create partition
sudo parted -s -a optimal /dev/sda -- mkpart primary ntfs 1MiB 20481MiB
sudo parted -s -a optimal /dev/sda -- mkpart primary ext4 20482MiB 40962MiB

## install ntfs format package
sudo yum -y install ntfsprogs

## format partition
sudo mkfs.ntfs -Q -L Volume /dev/sda1
sudo mkfs.ext4 /dev/sda2

sudo shutdown -h now

user1は一般ユーザーなので、sudoをノンパスで使えるようにしてあげる必要があります。

下記は/etc/sudoers.d/の設定例です。

user1     ALL=(ALL)       NOPASSWD: ALL

ご覧のとおりALLで許可しています。

セキュリティ的に好ましくないので、実際では特定のコマンドのみsudoを使えるように絞っておきましょう。

あとは、user1がログインしたときに/usr/local/sbin/kitting.shを実行してやればOKです。

ログオンスクリプトのキック方法は以下の記事で紹介していますので、参考にしてください。

[CentOS 7.4] GNOME環境にログインした時だけ実行されるスタートアップスクリプトを書く

ではまた。

参考

第13章 パーティション – Red Hat Customer Portal
GNU partedの罠 | Everyday Deadlock

SNSでもご購読できます。