1 ストレージ・デバイスの構成

この章では、ディスク・パーティションとスワップ領域を構成および管理する方法について説明します。

ストレージおよびストレージ管理機能を備えたOracle Linux製品の詳細は、次のガイドを参照してください。

ディスク・パーティションの操作

ディスク・ドライブのパーティション化では、ディスク・ドライブをパーティションと呼ばれる1つ以上の予約済領域に分割し、これらのパーティションに関する情報をディスクのパーティション表に格納します。オペレーティング・システムは、ファイル・システムを含むことができる個別のディスクとして各パーティションを処理します。

Oracle Linuxでは、rootファイル・システム用に1つのパーティションが必要です。通常、他の2つのパーティションがスワップ領域とブート・ファイル・システムに使用されます。x86およびx86_64システムでは、通常、ブート時にシステムBIOSがディスクの最初の1024シリンダのみにアクセスできます。ディスク上のこの領域に個別のブート・パーティションを構成すると、GRand Unified Bootloader (GRUB)ブート・ローダーが、カーネル・イメージおよびシステムのブートに必要な他のファイルにアクセスできるようになります。

追加のパーティションを作成して、バックアップの簡略化、システム・セキュリティの強化、および開発サンドボックスやテスト領域のセットアップなどの他のニーズを満たすことができます。通常、頻繁に変更されるデータ(ユーザー・ホーム・ディレクトリ、データベース、ログ・ファイル・ディレクトリなど)は、バックアップを容易にするために個別のパーティションに割り当てられます。

マスター・ブート・レコード(MBR)を使用するハード・ディスクのパーティション化スキームでは、最大4つのプライマリ・パーティションを作成できます。5つ以上のパーティションが必要な場合は、プライマリ・パーティションの1つを最大11個の論理パーティションに分割できます。論理パーティションを含むプライマリ・パーティションは拡張パーティションと呼ばれます。マスター・ブート・レコード(MBR)スキームは、最大2TBのサイズのディスクをサポートします。

GUIDパーティション表(GPT)があるハード・ディスクには最大128個のパーティションを構成でき、拡張パーティションや論理パーティションという概念はありません。ディスク・サイズが2TBを超える場合はGPTを構成する必要があります。

fdiskコマンドを使用してMBRの作成と管理を行うことができます。GPTを作成する場合は、partedコマンドを使用します。

ノート:

ブロック・ストレージ・デバイスをパーティション化するときは、プライマリ・パーティションと論理パーティションを1MB (1048576バイト)境界に配置してください。パーティション、ファイル・システム・ブロックまたはRAIDストライプが不適切に配置され、基礎となるストレージのセクターまたはページの境界と重なる場合、デバイス・コントローラは、適切な配置が使用されている場合の2倍の数のセクターまたはページを変更する必要があります。この推奨事項は、ハード・ディスク・ドライブ(spinning rust)、ソリッド・ステート・ドライブ(SSD)、ストレージ・アレイ上の論理ユニット番号(LUN)、ホストRAIDアダプタなど、ほとんどのブロック・ストレージ・デバイスに適用されます。

fdiskユーティリティによるパーティション表の管理

注意:

fdiskを使用して構成するディスク上のパーティションが現在マウントされている場合は、ディスクに対してfdiskユーティリティを実行する前にパーティションをアンマウントします。同様に、パーティションがスワップ領域として使用中の場合は、swapoffコマンドを使用してそのパーティションを無効にします。

データが含まれるディスクに対してfdiskユーティリティを実行するには、事前にデータを別のディスクまたはメディアにバックアップします。

fdiskユーティリティを使用してGPTハード・ディスクを管理することはできません。

fdiskユーティリティは、次を実行する場合に使用します。

  • パーティション表を作成します。

  • 既存のパーティション表を表示します。

  • パーティションを追加および削除します。

または、fdiskユーティリティのテキストベースのグラフィカル・バージョンであるcfdiskユーティリティを使用することもできます。

fdiskユーティリティをインタラクティブに使用するか、またはコマンドライン・オプションと引数を使用してパーティションを指定できます。fdiskをインタラクティブに実行する場合は、ディスク・デバイスの名前のみを引数として指定します。たとえば:

sudo fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):

出力メッセージにある強力な推奨事項に基づいて、Commandプロンプトでcと入力してDOS互換モードをオフにし、uと入力してセクターを使用し、pコマンドを使用してパーティション表を表示します。

Command (m for help): c
DOS Compatibility flag is not set

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 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 identifier: 0x0002a95d

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    83886079    41430016   8e  Linux LVM

前の出力例は、/dev/sdaが42.9GBのディスクであることを示しています。最新のハード・ディスクでは論理ブロック・アドレス指定(LBA)がサポートされているため、トラックごとのヘッドおよびセクターの数に関する情報は重要ではなく、誤りである可能性があります。ディスクの先頭からの各パーティションの開始オフセットと終了オフセットが、セクターの単位で表示されます。デバイス・サマリーの後にパーティション表が表示され、次の情報が表示されます。

Device

パーティションに対応するデバイス。

Boot

GRUBブート・ローダーがシステムをブートするのに必要なファイルをパーティションに含める場合は、*を指定します。ブート可能にできるパーティションは1つのみです。

StartおよびEnd

セクター内の開始オフセットと終了オフセット。すべてのパーティションは1MB境界に配置されます。

Blocks

1KBブロック内のパーティションのサイズ。

IdおよびSystem

パーティション・タイプ。通常、Oracle Linuxでは次のパーティション・タイプが使用されます。

5 Extended

最大4つの論理パーティションを含めることができる拡張パーティション。

82 Linux swap

スワップ領域パーティション。

83 Linux

LVMで管理されないファイル・システム用のLinuxパーティション。これがデフォルトのパーティション・タイプです。

8e Linux LVM

LVMで管理されるLinuxパーティション。

nコマンドは新規パーティションを作成します。たとえば、2つのLinuxパーティションの内、1つはサイズが5GBで、もう1つはディスクの残りの領域を占有する場合、そのパーティション表エントリを/dev/sdcに作成するには、次のようにします。

sudo fdisk -cu /dev/sdc
...
Command (m for help): n
Command action
    e    extended
    p    primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-25165823, default 2048):  2048
Last sector, +sectors or +size{K,M,G} (2048-25165823, default 25165823): +5G

Command (m for help): n
Command action
    e    extended
    p    primary partition (1-4)
p
Partition number (1-4): 2
First sector (10487808-25165823, default 10487808): <Enter>
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-25165823, default 25165823): <Enter>
Using default value 25165823

Command (m for help): p

Disk /dev/sdc: 12.9 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders, total 25165824 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 identifier: 0xe6d3c9f6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    10487807     5242880   83  Linux
/dev/sdc2        10487808    25165823     7339008   83  Linux

tコマンドを使用すると、パーティションのタイプを変更できます。たとえば、パーティション2のパーティション・タイプをLinux LVMに変更するには、次のようにします。

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e

Command (m for help): p
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    10487807     5242880   83  Linux
/dev/sdc2        10487808    25165823     7339008   8e  Linux LVM

新しいパーティション表を作成した後は、wコマンドを使用して表をディスクに書き込み、fdiskを終了します。

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

Calling ioctl() to re-read partition table.
Syncing disks.

かわりにqと入力すると、変更をディスクにコミットせずにfdiskが終了します。

詳細は、cfdisk(8)およびfdisk(8)の各マニュアル・ページを参照してください。

partedプログラムによるパーティション表の管理

注意:

partedプログラムを使用して構成するディスク上のパーティションが現在マウントされている場合は、ディスクに対してpartedを実行する前にパーティションをアンマウントします。同様に、パーティションがスワップ領域として使用中の場合は、swapoffコマンドを使用してそのパーティションを無効にします。

partedプログラムは、fdiskユーティリティよりも高度なプログラムで、GPTディスクを含めて、より多くのディスク・ラベル・タイプをサポートし、より大きなコマンドセットを実装しています。

データが含まれるディスクに対してpartedユーティリティを実行するには、事前にデータを別のディスクまたはメディアにバックアップします。

partedプログラムは、次を実行する場合に使用します。

  • ディスクにラベルを付けます。

  • パーティション表を作成します。

  • 既存のパーティション表を表示します。

  • パーティションを追加、変更および削除します。

partedは、インタラクティブに使用するか、またはコマンドライン引数を指定できます。partedをインタラクティブに実行する場合は、ディスク・デバイスの名前のみを引数として指定します。たとえば:

sudo parted /dev/sda
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

printコマンドは、パーティション表を表示します。

(parted) print                                                           
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  525MB   524MB   primary  ext4         boot
 2      525MB   42.9GB  42.4GB  primary               lvm

mklabelコマンドは新規パーティション表を作成します。

parted /dev/sdd
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label on /dev/sdd will be destroyed
and all data on this disk will be lost. Do you want to continue?
Yes/No? y
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label on /dev/sdd will be destroyed
and all data on this disk will be lost. Do you want to continue?
Yes/No? y

通常は、ディスク・デバイスがGPTをサポートするかどうかに応じて、Oracle Linuxシステムのディスク・ラベル・タイプをgptまたはmsdosに設定します。既存のディスク・ラベルの上書きを確認するよう求められます。

mkpartコマンドは新規パーティションを作成します。

(parted) mkpart
Partition name? []? <Enter>
File system type? [ext2]? ext4
Start? 1
End? 5GB

msdosラベルが付いたディスクの場合は、パーティション表タイプも入力するよう求められます(可能なタイプはprimaryextendedまたはlogicalです)。Oracle Linuxシステムでは、通常、ファイル・システム・タイプがfat16fat32ext4またはlinux-swapのいずれかに設定されます。

パーティションにbtrfsext*ocfs2またはxfsファイル・システムを作成する場合は、ファイル・システムとしてext4を指定します。

GB (ギガバイト)などの単位を指定しないかぎり、パーティションの開始オフセットと終了オフセットはMB単位とみなされます。

Endでディスクの終わりを指定するには、-0の値を入力します。

新規パーティションを表示するには、printコマンドを使用します。

(parted) print
Number   Start   End     Size    File system  Name  Flags
1        1049kB  5000MB  4999MB  ext4

partedプログラムを終了するには、quitと入力します。

ノート:

mklabelmkpartなどの様々なpartedコマンドが、変更をディスクに即時にコミットします。fdiskユーティリティと異なり、変更を保存せずに終了するオプションはありません。

詳細は、parted(8)マニュアル・ページを参照するか、またはinfo partedコマンドを入力してオンライン・ユーザー・マニュアルを表示してください。

デバイスへのパーティション表のマッピング

kpartxユーティリティを使用して、パーティション表およびパーティション・イメージを含むブロック・デバイスまたはファイルのパーティションをマップできます。kpartxはパーティション表を読み取り、パーティションのデバイス・ファイルを/dev/mapperに作成します。各デバイス・ファイルは、デバイス上またはイメージ・ファイル内のディスク・ボリュームまたはディスク・パーティションを表します。

-lオプションは、たとえば、インストール・イメージ・ファイル内で検出したパーティションをリストします。

sudo kpartx -l system.img
loop0p1 : 0 204800 /dev/loop0 2048
loop0p2 : 0 12288000 /dev/loop0 206848
loop0p3 : 0 4096000 /dev/loop0 212494848
loop0p4 : 0 2 /dev/loop0 16590848

この出力は、ドライブ・イメージに4つのパーティションが含まれ、最初の列は/dev/mapperに作成できるデバイス・ファイルの名前であることを示します。

-aオプションは、デバイス・マッピングを作成します。

sudo kpartx -a system.img
sudo ls /dev/mapper
control  loop0p1  loop0p2  loop0p3  loop0p4

パーティションにファイル・システムが含まれる場合は、パーティションをマウントし、パーティションに含まれるファイルを表示できます。たとえば:

sudo mkdir /mnt/sysimage
sudo mount /dev/mapper/loop0p1 /mnt/sysimage
sudo ls /mnt/sysimage
config-2.6.32-220.el6.x86_64
config-2.6.32-300.3.1.el6uek.x86_64
efi
grub
initramfs-2.6.32-220.el6.x86_64.img
initramfs-2.6.32-300.3.1.el6uek.x86_64.img
...
sudo umount /mnt/sysimage

-dオプションは、デバイス・マッピングを削除します。

sudo kpartx -d system.img
sudo ls /dev/mapper
control

詳細は、kpartx(8)マニュアル・ページを参照してください。

スワップ領域について

Oracle Linuxでは、プロセスで現在使用しているテキスト(コード)やデータのページを格納する十分な物理メモリーがない場合に、スワップ領域が使用されます。さらに多くのメモリーが必要な場合は、非アクティブなページがディスク上のスワップ領域に書き込まれ、物理メモリーが解放されます。ただし、スワップ領域への書込みはシステム・パフォーマンスにマイナスの影響があるため、スワップ領域を増加することは、メモリー不足の効果的な解決策ではありません。スワップ領域はディスク・ドライブに配置され、アクセス時間は物理メモリーより大幅に遅くなります。スワップが頻繁に使用される場合は、スワップ領域ではなく、物理メモリーをさらに追加してください。

スワップ領域は、ファイル・システムのスワップ・ファイルまたは個別のスワップ・パーティションに構成できます。専用のスワップ・パーティションのほうが高速である一方、スワップ・ファイルのサイズ変更のほうが簡単です。システムに必要なスワップ領域の大きさが判明している場合は、スワップ・パーティションを構成します。それ以外の場合は、スワップ・ファイルの使用を開始して、システムに必要な大きさが判明したときにスワップ・パーティションを作成します。

スワップ領域使用量の表示

システムのスワップ領域の使用量を表示するには、/proc/swapsの内容を調査します。

cat /proc/swaps
Filename                Type        Size      Used   Priority
/dev/sda2               partition   4128760   388    -1
/swapfile               file        999992    0      -2

この例では、/dev/sda2の4GBのスワップ・パーティションと、/swapfileの1GBのスワップ・ファイルの両方が使用されています。Priority列では、スワップ・ファイルではなく、スワップ・パーティションに優先的にスワップされることを示しています。

次の例のように、/proc/meminfoを表示したり、freetopvmstatなどのユーティリティを使用してスワップ領域の使用量を表示することもできます。

grep Swap /proc/meminfo
SwapCached:          248 kB
SwapTotal:       5128752 kB
SwapFree:        5128364 kB
sudo free | grep Swap
Swap:      5128752        388    5128364

スワップ・ファイルの作成および使用

ノート:

Brtfsファイル・システムがサポートされていない環境にスワップ・ファイルを構成します。

スワップ・ファイルを作成して使用するには:

  1. ddコマンドを使用して、必要なサイズのファイルを作成します(たとえば、ブロック・サイズ1KB、ブロック数100万)。

    sudo dd if=/dev/zero of=/swapfile bs=1024 count=1000000
  2. ファイルをスワップ・ファイルとして初期化します。

    sudo mkswap /swapfile
  3. スワップ・ファイルへのスワップを有効にします。

    sudo swapon /swapfile
  4. システムの次回再起動以降に使用されるように、スワップ・ファイルについて/etc/fstabにエントリを追加します。

    /swapfile       swap       swap       defaults       0 0

スワップ・パーティションの作成および使用

スワップ・パーティションを作成して使用するには:

  1. fdiskを使用してタイプ82 (Linux swap)のディスク・パーティションを作成するか、partedを使用して必要なサイズのlinux-swapタイプのディスク・パーティションを作成します。

  2. パーティション(たとえば、/dev/sda2)をスワップ・パーティションとして初期化します。

    sudo mkswap /dev/sda2
  3. スワップ・パーティションへのスワップを有効にします。

    sudo swapon /swapfile
  4. システムの次回再起動以降に使用されるように、スワップ・パーティションについて/etc/fstabにエントリを追加します。

    /dev/sda2       swap       swap       defaults       0 0

スワップ・ファイルまたはスワップ・パーティションの削除

スワップ・ファイルまたはスワップ・パーティションを使用対象から削除するには:

  1. スワップ・ファイルまたはスワップ・パーティションに対するスワップを無効にします。たとえば:

    sudo swapoff /swapfile
  2. スワップ・ファイルまたはスワップ・パーティションのエントリを/etc/fstabから削除します。

  3. (オプション)今後使用しない場合は、スワップ・ファイルまたはスワップ・パーティションを削除します。