HDの大容量化が進むにつれて容量の壁が必ず問題になります。最近では2Tの壁がありました。これはPC AT互換機でHDDの区画管理に使われてきたMBR ( Master Boot Record ) の仕様などに起因するものです。MBRはHDDの先頭にある領域であり、ここでパーティションの位置やOS起動するためのブートローダーを管理しています。
パーティションの位置はHDDを一定サイズに分割したセクターという単位を使って開始セクターとその中に含まれるセクター数として管理しています。この管理にはどちらも4バイト ( =32ビット ) の2進数を利用しており通常のHDDのセクターサイズは512バイトであり4バイトの制限から最大2T (=2の32乗×512バイト ) のディスク容量しか扱えません。
そこで2Tを超えるようなHDDを扱えるようGPT ( GUID Partition Table ) と呼ばれる方式が策定されました。GPTでは8バイト ( =64ビット )の2進数を使ってセクターを管理します。したがって最大8Zバイト ( =2の64乗×512バイト ) までの容量を管理出来ます。
LinuxカーネルにはこのGPTに対応するためのカーネルパラメーターが用意されており最新のCentOSなどでは有効になっています。なお、カーネルだけでなくパーティション操作のツールもGPTに対応している必要があります。
2TBを超えるHDなどを増設する場合はその中に作成するパーティションはGPTで管理されなければなりません。以前によく利用されていたfdiskコマンドではGPTのパーティションを作成できず標準で含まれるpartedまたはgdiskを使う必要があります。gdiskはfdiskライクなのでfdiskに慣れている方ならgdiskが違和感なく使えるとおもいます。
■partedの使い方
partedは標準でインストールされています。まずpartedで現状のディスク状態を確認します。私の環境下では約600GBのディスクを積んだサーバであり本来はpartedを使う必要性はありませんが動作確認の意味を込めて下記に記載します。
# df -h Filesystem Size Used Avail Use% マウント位置 /dev/sda6 49G 4.8G 41G 11% / tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/sda1 485M 167M 294M 37% /boot /dev/sda2 145G 190M 137G 1% /nfs1 /dev/sda3 145G 26G 112G 19% /nfs2 /dev/sda5 145G 25G 113G 18% /nfs3 # parted -l モデル: LSI MegaRAID SAS RMB (scsi) ディスク /dev/sda: 585GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 525MB 524MB primary ext4 boot 2 525MB 158GB 157GB primary ext4 3 158GB 315GB 157GB primary ext4 4 315GB 585GB 270GB extended 5 315GB 472GB 157GB logical ext4 6 472GB 525GB 52.4GB logical ext4 7 525GB 533GB 8590MB logical linux-swap(v1) |
例えば新しいHDDを追加した場合はそれが/dev/sdbなどとOSから認識されます。まっさらなHDDをpartedで第一に行うべき操作はラベルを与えることです。ラベルはmsdosもしくはgptを指定します。2TB以上のサイズであればgpt、そうでなければmsdosでOKです。
# parted /dev/sdb (parted) mklabel msdos ( or gpt ) |
このケースでは既存HDDが/dev/sdaとして認識されていますので、これを編集するのですがマウントされている状態では編集ができませんので、まずマウントを解除します。対象パーティションは/dev/sda2です。
# umount /nfs1 |
partedコマンドで/dev/sdaを編集します。
# parted /dev/sda GNU Parted 2.1 /dev/sda を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 |
既存のパーティション( /dev/sda2 )を削除します。削除の際にはデバイス名を指定するのではなく番号のみを指定します。
# parted /dev/sda GNU Parted 2.1 /dev/sda を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 (parted) rm 2 警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です). As a result, it may not reflect all of your changes until after reboot. |
/etc/fstabを編集して起動時に自動マウントしないよう該当箇所をコメントしておきます。OSを再起動後に再度パーティションを確認してみます。
# parted -l モデル: LSI MegaRAID SAS RMB (scsi) ディスク /dev/sda: 585GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 525MB 524MB primary ext4 boot 3 158GB 315GB 157GB primary ext4 4 315GB 585GB 270GB extended 5 315GB 472GB 157GB logical ext4 6 472GB 525GB 52.4GB logical ext4 7 525GB 533GB 8590MB logical linux-swap(v1) |
パーティション番号2が削除されているのがお分かりいただけると思います。ここでパーティション番号2に再度パーティションを作成します。
# parted GNU Parted 2.1 /dev/sda を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 (parted) unit MB ※単位をMBに統一 (parted) print モデル: LSI MegaRAID SAS RMB (scsi) ディスク /dev/sda: 585055MB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1.05MB 525MB 524MB primary ext4 boot 3 157812MB 315098MB 157286MB primary ext4 4 315098MB 585055MB 269957MB extended 5 315100MB 472387MB 157286MB logical ext4 6 472388MB 524816MB 52429MB logical ext4 7 524818MB 533407MB 8590MB logical linux-swap(v1) ※mkpartコマンドでパーティション作成 (parted) mkpart パーティションの種類? primary/プライマリ/logical/論理? primary ファイルシステムの種類? [ext2]? ext4 開始? 525 終了? 157812 警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です). As a result, it may not reflect all of your changes until after reboot. (parted) quit |
OSを再起動後、パーティションテーブルを表示してみます。
# parted -l モデル: LSI MegaRAID SAS RMB (scsi) ディスク /dev/sda: 585GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: msdos 番号 開始 終了 サイズ タイプ ファイルシステム フラグ 1 1049kB 525MB 524MB primary ext4 boot 2 525MB 158GB 157GB primary ext4 3 158GB 315GB 157GB primary ext4 4 315GB 585GB 270GB extended 5 315GB 472GB 157GB logical ext4 6 472GB 525GB 52.4GB logical ext4 7 525GB 533GB 8590MB logical linux-swap(v1) |
パーティション2が追加されました。これで領域は確保されたわけですが未フォーマットなので次のコマンドでフォーマットを行います。
# mkfs -t ext4 /dev/sda2 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 9601024 inodes, 38400000 blocks 1920000 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 1172 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. |
これをmountコマンドでマウントし即座に利用することが可能となります。
# mount -t ext4 /dev/sda2 /new |
但し、再起動するとmountは外れてしまいますので恒久的に利用する場合は/etc/fstabに追記して自動マウントを行います。/etc/fstabに追記する内容としてUUIDを次のコマンドで出力させます。
# blkid /dev/sda2 /dev/sda2: UUID="7d19a93d-22c9-42d7-98cf-7e2aaaf87b60" TYPE="ext4" |
マウントポイントを作成した後に、上記のUUIDを/etc/fstabに追記します。
# mkdir /new # vi /etc/fstab UUID=7d19a93d-22c9-42d7-98cf-7e2aaaf87b60 /new ext4 defaults 1 2 # reboot |
/etc/fstabでは後ろの1、2と数字が並んでいます。1はファイルシステムをdumpする必要があるかを表したもので1であれば有効であり、0なら不要という意味になります。次の2に関してはシステム起動時にチェックを行うかどうかを表したもので、ルートファイルシステムをチェックする場合は1、それ以外の場合は2を指定します。fsckをしない場合は0を指定します。
再起動完了後、次のコマンドで自動マウントがされているか確認してみます。
# mount /dev/sda6 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1 on /boot type ext4 (rw) /dev/sda2 on /new type ext4 (rw) /dev/sda3 on /nfs2 type ext4 (rw) /dev/sda5 on /nfs3 type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) nfsd on /proc/fs/nfsd type nfsd (rw) |