ディスクの確認と fdisk による新しい Linux パーティションの作成
このステップでは、利用可能なディスクとそのパーティションテーブルを確認する方法を学びます。次に、強力なコマンドラインツールである fdisk ユーティリティを使用して、セカンダリディスクに新しいパーティションを作成します。実際の運用環境では、パーティションの変更は慎重に行う必要があります。誤操作はデータ損失につながる可能性があるためです。この実験では、メインの OS ディスク(/dev/sda)を保護するため、専用の仮想ディスク /dev/sdb を使用します。
まず、システムに接続されているすべてのブロックデバイス(ディスクとパーティション)の概要を確認しましょう。lsblk コマンドを使用すると、ツリー形式で分かりやすく表示されます。
lsblk
出力には、プライマリシステムディスク(vda)や、この実験用の仮想ディスクを表すループデバイス(loop13)など、利用可能なディスクが表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
loop13 7:13 0 2G 0 loop
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
└─vda3 252:3 0 39.8G 0 part /
ループデバイス(シンボリックリンクを介して /dev/sdb としてアクセス可能)は 2GB の仮想ディスクであり、まだパーティションが作成されていないことがわかります。次に、fdisk を使用して /dev/sdb のパーティションテーブルをより詳細に確認します。-l フラグを指定すると、指定したデバイスのパーティションテーブルをリスト表示して終了します。fdisk でディスクレベルの情報を確認するには root 権限が必要なため、sudo を使用します。
sudo fdisk -l /dev/sdb
出力には、ディスクのサイズ、セクタ、識別子などの詳細が表示されます。まだパーティションがないため、下部のデバイスリストは空になります。
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
注意:このディスクを初めて使用する場合、新しい DOS ディスクラベルの作成に関するメッセージが表示されることがあります。
次に、fdisk を対話モードで起動し、新しいパーティションを作成します。このプロセスでは、一連の 1 文字コマンドを使用します。次のコマンドを実行して /dev/sdb の管理を開始します。
sudo fdisk /dev/sdb
fdisk ユーティリティが起動し、Command (m for help): というプロンプトが表示されます。以下の手順に従って慎重に操作してください。
- 新しいパーティションの作成:
n と入力して Enter を押します。
- パーティションタイプの選択: パーティションタイプ(基本パーティションまたは拡張パーティション)を選択するよう求められます。デフォルトは基本パーティション(
p)なので、そのまま Enter を押して確定します。
- パーティション番号の選択: 最初のパーティションなので、デフォルトは
1 です。Enter を押して確定します。
- 最初のセクタの指定: デフォルト値はディスク上の最初の利用可能なセクタです。通常はこれが正しい選択です。Enter を押して確定します。
- 最後のセクタまたはサイズの指定: セクタ数を計算する代わりに、人間が読みやすいサイズを指定できます。ここでは 500MB のパーティションを作成します。
+500M と入力して Enter を押します。
- メモリ上のパーティションテーブルの表示: 保存する前に、変更内容を確認するのが良い習慣です。
p と入力して Enter を押し、新しいパーティション構成を確認します。/dev/sdb1 という新しいデバイスが表示されるはずです。
- 変更をディスクに書き込む: ここまでの変更はまだメモリ上にしかありません。ディスクのパーティションテーブルに保存するには、
w と入力して Enter を押します。これにより変更が書き込まれ、fdisk が終了します。
対話セッションの概要は以下の通りです。
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x54041549.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, default 4194303): +500M
Created a new partition 1 of type 'Linux' and of size 500 MiB.
Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54041549
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1026047 1024000 500M 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).
パーティションテーブルを書き込んだ後、カーネルがすぐにパーティションテーブルを再読み込みできなかったというメッセージが表示されることがあります。これはループデバイスを操作しているときによくある現象です。partprobe コマンドを実行して、OS カーネルにパーティションテーブルの再読み込みを要求します。
sudo partprobe
次に、lsblk を再度実行して、システムが新しいパーティションを認識しているか確認します。
lsblk /dev/sdb
出力には、ループデバイスとその新しいパーティションが表示されます。ループデバイスの設定上、パーティションは loop13p1 として表示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13 7:13 0 2G 0 loop
└─loop13p1 259:0 0 500M 0 part
パーティションは loop13p1 として表示されていますが、この実験を円滑に進めるには /dev/sdb1 としてアクセスできる必要があるため、パーティションのシンボリックリンクを作成します。まず、実際のパーティションデバイスを特定します。
PARTITION_DEVICE=$(lsblk -lno NAME /dev/sdb | grep p1 | head -1)
echo "Partition device: /dev/$PARTITION_DEVICE"
次に、パーティションのシンボリックリンクを作成します。
sudo ln -s /dev/$PARTITION_DEVICE /dev/sdb1
/dev/sdb1 が機能することを確認します。
lsblk /dev/sdb1
出力に、パーティションが /dev/sdb1 としてアクセス可能であることが示されます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13p1 259:0 0 500M 0 part
これで、/dev/sdb 上に新しい 500MB の Linux パーティションを作成し、/dev/sdb1 としてアクセスできるように設定できました。