UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - 2TB以上のHDを使う




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)



 
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.