fdiskコマンドでパーティション分割

　lpic101範囲のパーティション分割の理解を深めるために、fdiskコマンドでパーティション分割をやってみることにした。

#環境
最初はDockerでやろうとしたけど、Dockerコンテナ内からではディスクの操作が出来なかったので仮想マシンでやることにした。

ホストOS： Ubuntu 16.04.6 LTS
仮想マシン: vagrant 2.2.6, VirtualBox 5.1.38_Ubuntur122592
ゲストOS: CentOS7

#fdiskコマンドでパーティション情報の表示
##fdisk -l デバイス名
デバイス名のパーティション情報を表示する。デバイス名を省略すると「/proc/partitions」に書かれているパーティション情報が表示される。

~~~
[vagrant@localhost ~]$ sudo fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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
Disk label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    83886079    41942016   83  Linux
[vagrant@localhost ~]$ cat /proc/partitions
major minor  #blocks  name

   8        0   41943040 sda
   8        1   41942016 sda1
~~~

##fdisk -s デバイス名
指定したデバイスのブロック数を表示。

~~~
[vagrant@localhost ~]$ sudo fdisk -s /dev/sda 
41943040
~~~

#fdiskコマンドでパーティション操作
##fdisk デバイス名
対話モードで実行。

~~~
[vagrant@localhost ~]$ sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help):
~~~

### パーティション作成
nでパーティションの作成。ハードディスクは4つまでのパーティションに分けることができる。現在は/dev/sda1が全て使っているのでNo free sectors availableと出力されて、新しくパーティションを作成できない。
/dev/sda: 42.9 GB
/dev/sda1: (83886079 - 2048) × 512 = 42948623872 ≒ 42.9 GB

~~~
Command (m for help): n   
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
No free sectors available
~~~

まずパーティションを削除する。dが削除。

~~~
Command (m for help): d       
Selected partition 1
Partition 1 is deleted

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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
Disk label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): 
~~~

パーティション作成。

~~~
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-83886079, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +1G   
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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
Disk label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     2099199     1048576   83  Linux

Command (m for help): 
~~~

1Gぶん割り当てられた。

###拡張領域を作成
先ほどは基本領域でパーティションを作成した。次は拡張領域で作成する。拡張領域の中に論理パーティションを複数作成できる。

~~~
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (2-4, default 2): 2
First sector (2099200-83886079, default 2099200): 2099200
Last sector, +sectors or +size{K,M,G} (2099200-83886079, default 83886079): +3G
Partition 2 of type Extended and of size 3 GiB is set

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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
Disk label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     2099199     1048576   83  Linux
/dev/sda2         2099200     8390655     3145728    5  Extended

~~~

###論理パーティションの作成
作成した拡張領域に論理パーティションを作成していく。

~~~
Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (2101248-8390655, default 2101248): 2101248
Last sector, +sectors or +size{K,M,G} (2101248-8390655, default 8390655): +1G
Partition 5 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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
Disk label type: dos
Disk identifier: 0x0009ef88

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     2099199     1048576   83  Linux
/dev/sda2         2099200     8390655     3145728    5  Extended
/dev/sda5         2101248     4198399     1048576   83  Linux
~~~

作成が完了したら、wで保存。保存せずに終了するとパーティションは変更されない。

~~~
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
~~~

#終わりに
実際に手を動かすと覚えやすいので、これからもこの方法で知識を身に付けていこうと思います！
次回はマウント、スワップ領域の作成、シンボリックリンクをつくってみる。