##はじめに
yum upgrade
の際に、/bootパーテーションの容量が足りず、アップグレードが失敗た。回避策として、古いカーネルを削除して容量を空ける方法もあるが、対処療法の為根本解決にはならない。
調べても/bootパーテーションを拡張する方法があまりちゃんと載ってなかったので、まとめてみた。
なお、今回ファイルシステムはext3
を前提とする。参考にしたサイトはxfs
前提。
ext3
の場合は、resize2fs
を使う
##概要
ファイルシステムは、一つのディスク(/dev/sda)に全て収まっている状態とする。
/boot(/dev/sda1)
swap(/dev/sda2)
LVM(/dev/sda3)
の構成を前提としている。ここで、別で作成した論理パーテーション(/dev/sdb
とする)をLVMに追加し、既に既存であるLVMのパーテション(/dev/sda3
)のデータをたらしく追加したLVMのパーテーション(/dev/sdb1
)に移す。
ここで、/dev/sda3
を既存のLVMから外すと、既存ディスクには大きく空きサイズが確保される事になる。あとは、パーテーションを作成し直して、resize2fs
でパーテーションサイズを拡張する事で、無事/boot
パーテーションが拡張される。
##環境
- CentOS
- ext3 (ファイルシステム)
##参考
##状況
/bootパーテーションが不足してエラーになる場合、以下のようなメッセージが表示される。
$ sudo yum upgrade
Transaction Check Error:
installing package grub-1:0.97-99.el6.x86_64 needs 4KB on the /boot filesystem
installing package kernel-2.6.32-696.el6.x86_64 needs 29MB on the /boot filesystem
Error Summary
Disk Requirements:
At least XXMB more space needed on the /boot filesystem.
##手順
- 拡張ディスクを追加する
- 拡張ディスクにLVMパーテションを作成する
- 物理ボリュームを追加した拡張ディスクに作成する
- ボリュームグループ名を確認し、作成した物理ボリュームを加える
- 既存の物理ボリュームら新規に作成した物理ボリュームにデータを移動する
- 既存の物理ボリュームをボリュームグループから削除する
- 既存の物理ボリュームのパーテションを再作成しつつ拡張する
- 再起動し拡張したパーテーションを認識させる
- 再作成した/bootパーテションをresize2fsで拡張する
拡張ディスクの追加は環境によりまちまちなので、割愛。今回自分はVagrant(VirtualPC)環境でディスクを追加した。(Vagrantでディスクの新規追加)
追加したディスクは/dev/sdb
として進める。
$ sudo fdisk -l # ディスクの追加状況の確認
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b1774
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 4507647 2048000 82 Linux swap / Solaris
/dev/sda3 4507648 81919999 38706176 8e Linux LVM
Disk /dev/mapper/rootvg01-lv01: 39.6 GB, 39631978496 bytes, 77406208 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
追加ディスク(/dev/sdb)上にパーテーションを作成する。この時、パーテーションのサイズは、移行元のパーテーション(今回は/dev/sda3)より大きくないといけない。
sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
コマンド (m でヘルプ): n #パーテーション領域の作成
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #プライマリパーティション
パーティション番号 (1-4, default 1): #パーテーション番号
最初 sector (2048-104857599, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-104857599, 初期値 104857599):
初期値 104857599 を使います
Partition 1 of type Linux and of size 50 GiB is set
コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): 8e #パーテーションの種類はLVM
Changed type of partition 'Linux' to 'Linux LVM'
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
物理ボリュームを作成
$ sudo pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
ボリュームグループ名を確認し、作成した物理ボリュームをボリュームグループに加える
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
rootvg01 1 2 0 wz--n- 29.96g 44.00m
$ sudo vgextend rootvg01 /dev/sdb1
Volume group "rootvg01" successfully extended
既存の物理ボリューム(/dev/sda3
)から新規に作成した物理ボリューム(/dev/sdb1
)にデータを移動し、既存の物理ボリュームはボリュームグループから外す。
$ sudo pvmove /dev/sda3 /dev/sdb1
/dev/sda2: Moved: 0.1%
/dev/sda2: Moved: 8.1%
/dev/sda2: Moved: 32.6%
/dev/sda2: Moved: 78.2%
/dev/sda2: Moved: 100.0%
$ sudo vgreduce rootvg01 /dev/sda3
Removed "/dev/sda3" from volume group "rootvg01"
既存の物理ボリュームのパーテションを再作成する。
まずは、/boot
のみにする。
$ 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.
コマンド (m でヘルプ): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b1774
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 4507647 2048000 82 Linux swap / Solaris
/dev/sda3 4507648 81919999 38706176 8e Linux LVM
コマンド (m でヘルプ): d
パーティション番号 (1-3, default 3):
Partition 3 is deleted
コマンド (m でヘルプ): d
パーティション番号 (1,2, default 2):
Partition 2 is deleted
コマンド (m でヘルプ): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b1774
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 411647 204800 83 Linux
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
次に/boot
パーテーションをアンマウントし、/boot
パーテーションとSWAPを再作成します。この時、/boot
は拡張したいサイズに変更します。
$ sudo fdisk /dev/sda
・
・
コマンド (m でヘルプ): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b1774
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 411647 204800 83 Linux
コマンド (m でヘルプ): d # 既存パーテーションは削除
Selected partition 1
Partition 1 is deleted
コマンド (m でヘルプ): n # 新規に作成する
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p # プライマリーパーテーション
パーティション番号 (1-4, default 1):
最初 sector (2048-209715199, 初期値 2048): # 開始位置は変えない
初期値 2048 を使います
# ここがポイント
Last sector, +sectors or +size{K,M,G} (2048-209715199, 初期値 209715199): +1000M
Partition 1 of type Linux and of size 1000 MiB is set # 確保したいサイズを指定
# 今回は1G(1000M)
コマンド (m でヘルプ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
パーティション番号 (1-4, default 1):
最初 sector (2048-209715199, 初期値 2048):
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-209715199, 初期値 209715199): +1000M
Partition 1 of type Linux and of size 1000 MiB is set
コマンド (m でヘルプ): n # SWAPも作成する
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p # プライマリパーティション
パーティション番号 (2-4, default 2):
最初 sector (2050048-209715199, 初期値 2050048):
初期値 2050048 を使います
# swap は 1000M
Last sector, +sectors or +size{K,M,G} (2050048-209715199, 初期値 209715199):+2048000
Partition 2 of type Linux and of size 1000 MiB is set
コマンド (m でヘルプ): t # パーテーション種別を変更する
パーティション番号 (1-3, default 3): 2
Hex code (type L to list all codes): 82 # Liux swap に変更する。
Changed type of partition 'Linux' to 'Linux swap / Solaris'
コマンド (m でヘルプ): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b1774
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 4507647 2048000 8e Linux LVM
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
ここで再起動する。拡張したパーテーションを認識させるには、再起動が必要。
再起動が終わったら、/boot
パーテションをresize2fsで拡張する。
$ sudo e2fsck -f /dev/sda1 # 先 e2fsck での整合性チェックが必要
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 79976/1175040 files (28% non-contiguous), 523701/4692744 blocks
$ resize2fs /dev/sda1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sda1 to 9935604 (4k) blocks.
The filesystem on /dev/sda1 is now 9935604 blocks long.
以上、/boot
パーテーションの拡張方法でした。