パーティションとファイルシステム

パーティションとは、1つのハードディスク上で、論理的に分割された各領域のことです。

1つのハードディスクは、最低1つ以上のパーティションで構成されます。

パーティションを作成する際に、昔からよく使われるツールとして、fdisk があります。

この fdisk でパーティションを作成するだけでは、実際にシステム上で使うことはできません。

ファイルシステムは、OS がファイルを管理するための枠組みであり、OS がパーティションを利用するためには、そのパーティション上にファイルシステムを作成する必要があります。

ファイルシステムを作成する際に、よく使われるツールとしては、mkfs があります。

mkfs でファイルシステムを作成してからようやくパーティションをデバイスとして OS 上にマウントできるようになります。

サーバのディスク構成

運用中のサーバに新しいハードディスクを追加した後、使えるようにするためには、パーティションとファイルシステムを作成する必要があります。

Linux 系システムにおいて、ハードディスクのデバイス名は、/dev/sd* のように認識されます。

OS 領域として既に使われているディスクは、/dev/sda として認識されているので、この状態で、ディスクを 2本増設した場合のデバイス名は、/dev/sdb/dev/sdc になります。

HDD デバイス名 容量 用途 現在のファイルシステム
HDD1 sda 10G OS 用 EXT4
HDD2 sdb 20G DATA 用
HDD3 sdc 20G DATA 用

ここでは、OS として Ubuntu を使っているサーバにハードディスク HDD2HDD3 を 2本増設し、fdisk を使ってパーティションを作成した上で、mkfs でファイルシステムを作成しています。

そうすると、作成されたファイルシステムを OS にマウントしてデータ保存領域として使えるようになります。

OS によって fdisk を実行したときの表示画面が少し違うだけで、やり方はほぼ同じなので、必ずしも Ubuntu じゃなくて、RHEL・CentOS 等の OS でもこの手順を参考にして使えると思います。

現状確認

まずは、df -h を使って、ファイルシステム情報を確認します。

現在のファイルシステム情報確認Raw Code(S)Raw Code(T)
# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu14--vg-root  8.5G  1.8G  6.4G  22% /
none                           4.0K     0  4.0K   0% /sys/fs/cgroup
udev                           990M  4.0K  990M   1% /dev
tmpfs                          201M  492K  200M   1% /run
none                           5.0M     0  5.0M   0% /run/lock
none                          1001M     0 1001M   0% /run/shm
none                           100M     0  100M   0% /run/user
/dev/sda1                      236M   72M  152M  33% /boot

fdisk -l を使ってパーティション情報を確認します。

/dev/sda は、10GB として認識され、使われていますが、/dev/sdb/dev/sdc は、20GB として認識されているものの、パーティションが作成されていない状態であることがわかります。

パーティション情報確認Raw Code(S)Raw Code(T)
# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 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: 0xa14583c7

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *      2048   499711   497664  243M 83 Linux
/dev/sda2       501758 20969471 20467714  9.8G  5 Extended
/dev/sda5       501760 20969471 20467712  9.8G 8e Linux LVM

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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 /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 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 /dev/mapper/ubuntu14--vg-root: 8.8 GiB, 9403629568 bytes, 18366464 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 /dev/mapper/ubuntu14--vg-swap_1: 1 GiB, 1073741824 bytes, 2097152 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

各デバイスのタイプとマウントポイントをツリー構造で確認したいときには、lsblk コマンドが便利です。

sdbsdc が単純にディスクとして認識されていて、パーティション作られていないことがわかります。

デバイス・マウントポイント ツリー確認Raw Code(S)Raw Code(T)
# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                       8:0    0   10G  0 disk
├sda1                    8:1    0  243M  0 part /boot
├sda2                    8:2    0    1K  0 part
└sda5                    8:5    0  9.8G  0 part
  ├ubuntu14--vg-root   252:0    0  8.8G  0 lvm  /
  └ubuntu14--vg-swap_1 252:1    0    1G  0 lvm  [SWAP]
sdb                       8:16   0   20G  0 disk
sdc                       8:32   0   20G  0 disk
sr0                      11:0    1 1024M  0 rom

パーティション作成

Step 1. パーティション作成

sdb に対して、fdisk を使ってパーティションを作成します。

ここでは、デフォルトで Linux タイプのパーティションを作成していますが、パーティションタイプの種類を確認したい方は、l (エル) を押して確認してください。

  • line 10 : Help 表示
  • line 43 : 新規パーティション作成
  • line 44 : プライマリパーティションを設定
  • line 48 ~ 50 : HDD 全体を一つのパーティションとして作成
  • line 54 : 作成したパーティション情報確認
  • line 66 : 特に問題なければ、設定情報を書き込む
HDD2 : sdb パーティション作成Raw Code(S)Raw Code(T)
# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.1).
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 0xc5757487.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


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): 【デフォルトのまま Enter】
First sector (2048-41943039, default 2048): 【デフォルトのまま Enter】
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): 【デフォルトのまま Enter】

Created a new partition 1 of type 'Linux' and of size 20 GiB.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0xc5757487

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 41943039 41940992  20G 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

同じように、sdc に対して、fdisk を使ってパーティションを作成します。

HDD3 : sdc パーティション作成Raw Code(S)Raw Code(T)
# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.25.1).
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 0x2616c755.

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): 【デフォルトのまま Enter】
First sector (2048-41943039, default 2048): 【デフォルトのまま Enter】
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): 【デフォルトのまま Enter】

Created a new partition 1 of type 'Linux' and of size 20 GiB.

Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 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: 0x2616c755

Device     Boot Start      End  Sectors Size Id Type
/dev/sdc1        2048 41943039 41940992  20G 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Step 2. 作成されたパーティション情報確認

後は、パーティションが作成されたか確認します。

新しいパーティションとして /dev/sdb1/dev/sdc1 が作成されました。

パーティション作成確認Raw Code(S)Raw Code(T)
# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 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: 0xa14583c7

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *      2048   499711   497664  243M 83 Linux
/dev/sda2       501758 20969471 20467714  9.8G  5 Extended
/dev/sda5       501760 20969471 20467712  9.8G 8e Linux LVM

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0xc5757487

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 41943039 41940992  20G 83 Linux

Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 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: 0x2616c755

Device     Boot Start      End  Sectors Size Id Type
/dev/sdc1        2048 41943039 41940992  20G 83 Linux

Disk /dev/mapper/ubuntu14--vg-root: 8.8 GiB, 9403629568 bytes, 18366464 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 /dev/mapper/ubuntu14--vg-swap_1: 1 GiB, 1073741824 bytes, 2097152 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

lsblk コマンドで各デバイスタイプとマウントポイントのツリー構造を確認します。

新しいパーティションとして /dev/sdb1/dev/sdc1 が作成されていることがわかります。

デバイス・マウントポイント ツリー確認Raw Code(S)Raw Code(T)
# lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                       8:0    0   10G  0 disk
├sda1                    8:1    0  243M  0 part /boot
├sda2                    8:2    0    1K  0 part
└sda5                    8:5    0  9.8G  0 part
  ├ubuntu14--vg-root   252:0    0  8.8G  0 lvm  /
  └ubuntu14--vg-swap_1 252:1    0    1G  0 lvm  [SWAP]
sdb                       8:16   0   20G  0 disk
└sdb1                    8:17   0   20G  0 part
sdc                       8:32   0   20G  0 disk
└sdc1                    8:33   0   20G  0 part
sr0                      11:0    1 1024M  0 rom

ファイルシステム作成

新しく作成したパーティションを実際にマウントして使うためには、ファイルシステムを作成する必要があります。

ファイルシステムの種類には、いろいろありますが、Unix・Linux 系システムでよく使われるのは、ext4NFSXFS 等があります。

各ファイルシステムは、特徴を持っており、例えば、OpenStack の Object Storage である Swift のデータ領域は、画像・動画などのメタデータ情報を保存する必要があるため、ファイルシステムとして XFS が推奨されています。

ファイルシステムの種類・概要については、以下を参照してください。

ここでは、例として、ext4XFS ファイルシステムを作成します。

ファイルシステム作成 その1. EXT4 ファイルシステム作成

以下の例では、パーティション /dev/sdb1/dev/sdc1ext4 ファイルシステムで作成します。

EXT4 ファイルシステム作成Raw Code(S)Raw Code(T)
# mkfs.ext4 /dev/sdb1
mke2fs 1.42.10 (18-May-2014)
Creating filesystem with 5242624 4k blocks and 1310720 inodes
Filesystem UUID: 65164419-3cae-432c-8ca6-1d5f0d8f2853
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


# mkfs.ext4 /dev/sdc1
mke2fs 1.42.10 (18-May-2014)
Creating filesystem with 5242624 4k blocks and 1310720 inodes
Filesystem UUID: 5de718ee-ba90-4a28-9616-fcb2a126e136
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

ファイルシステム作成 その2. XFS ファイルシステム作成

以下の例では、パーティション /dev/sdb1/dev/sdc1XFS ファイルシステムで作成します。

XFS ファイルシステム作成Raw Code(S)Raw Code(T)
# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1              isize=256    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

マウント

これで、/dev/sdb1/dev/sdc1 を OS 上にマウントできるようになりました。

例として、ext4 で作成されたファイルシステムをマウントします。

以下のコマンドでマウントできます。

ファイルシステムマウントRaw Code(S)Raw Code(T)
# mkdir -p /mnt/sdb1
# mkdir -p /mnt/sdc1

# mount /dev/sdb1 /mnt/sdb1
# mount /dev/sdc1 /mnt/sdc1

# df -hT
Filesystem                    Type      Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu14--vg-root ext4      8.5G  1.8G  6.4G  22% /
none                          tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
udev                          devtmpfs  990M  4.0K  990M   1% /dev
tmpfs                         tmpfs     201M  500K  200M   1% /run
none                          tmpfs     5.0M     0  5.0M   0% /run/lock
none                          tmpfs    1001M     0 1001M   0% /run/shm
none                          tmpfs     100M     0  100M   0% /run/user
/dev/sda1                     ext2      236M   72M  152M  33% /boot
/dev/sdb1                     ext4       20G   33M   20G   1% /mnt/sdb1
/dev/sdc1                     ext4       20G   33M   20G   1% /mnt/sdc1

df -hT

df コマンドのオプションとして T を指定すると各マウントポイントのファイルシステムを確認できます。

以上、Ubuntu : パーティション、及びファイルシステム作成 でした。