LVMを縮小してみた 吉田@板橋 2009/8/8
LVMを縮小してみた
吉田@板橋
2009/8/8
背景
• 某rpm系ディストリビューションをデフォルトでインストールするとハードディスクがLVMで構成される
2
LVMの利点
• http://ja.wikipedia.org/wiki/論理ボリュームマネージャ
• 複数PVによるボリュームグループ上に、1つのPVを超えるような論理ボリューム (LV) を作成し、扱う事が可能となる。
• ディスク管理上の上限である7パーティション を超えた数の論理ボリューム (LV) を作成可能となる。
• 論理ボリューム (LV) の動的拡張・縮小が可能となる。
– 当然のことながら、LVの上に構築されるファイルシステムが動的拡張・縮小を
サポートしていない場合、ファイルシステムの拡張・縮小や再構成のためにシステム停止が必要となる。
• 物理ボリュームの追加による論理ボリュームの拡張性の維持が可能。
– 但し、ハードウェアの構成やOSの対応によっては、物理ボリュームの追加時にシステム停止が必要となる。
• ソフトウェアミラーやソフトウェアによるストライピングが可能。
3
LVMで構築済のシステムに 別OSを入れたい
• Disk初期化して再インストール –既存システムを消したくない→×
• Gparted –起動オプションでLVMのボリュームを与えることは可能
– PVの縮小が出来ない→×
• e2fsadm – LVM1(kernel2.4)用のツール
–現在LVM2(Kernel2.6)用には無さそう→×
4
LVMと関連要素 • 物理ディスク
• パーティション
• PV(Physical Volume)
• VG(Volume Group)
• LV(Logical Volume)
• ファイルシステム 物理ディスク(/dev/sda)
/dev/sda1 (/boot)
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00
LV Name: LogVol00
LV Name: LogVol01
ファイルシステム ext3:/
swap
5
ググってみた(1)
• ディスクの拡張をしている事例は多いが、縮小している事例は少ない
• http://d.hatena.ne.jp/jbking/20061213/p1
物理LVMパーティションを縮小(Shrink)したい。 LVやPVを縮めるんじゃなくてパーティション自体を縮めたい!!! 結論:無理。 現時点ではfdiskでパーティション削除&作成方法しかないみたい。最新のGNU Parted(ver.1.8.1)も対応してない。なのでもちろんGPartedもQtPartedも駄目。唯一、WinHEXを使ってパーティションテーブルを書き換えた人がいた
が、素人にはお薦めできない。http://www.linuxquestions.org/questions//showthread.php?p=2524620#post2524620
6
ググってみた(2) • http://pantora.net/pages/linux/lvm/3/
– 平さんのページ
PVのリサイズ Fedora Core 5 以降、Red Hat Enterprise Linux 4 Update 4 以降から PV をオンラインでリサイズする pvresize コマンドが新しく加わりました。もしもLUNのオンラインリサイズを行えるストレージ(/dev/sdb)をお使いの場合、PVのリサイズを行うことが可 能です。
LVのリサイズ LVのサイズは変更することができます。拡大も縮小も行なえます。
ファイルシステムのリサイズ Linuxで一般的に使われているLinux ext2、Linux ext3、ReiserFSなどのファイルシステムは、(リサイズ機能を)すでにサポートしています。
7
リサイズ実施 • 事前準備
• ライブCDで起動
– マウントしないでディスク操作をする必要が有る
– そもそも空きパーティションが無い
• 今回はUbuntu9.04を使用
• synapticでuniverseリポジトリを追加後、system-config-lvmを追加インストール
– ubuntu8.10のsystem-config-lvmは起動時にクラッシュして使えず。
– universeリポジトリ: Debian (等)から持ってきたubuntu用パッケージ集
# aptitude install lvm2
# aptitude update # aptitude install system-config-lvm
8
初期状態 • 初期状態
– 60GBのディスクに某ディストリビューションがデフォルトインストール
# fdisk -l /dev/sda デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 208844 104391 83 Linux /dev/sda2 208845 117210239 58500697+ 8e Linux LVM # pvscan PV /dev/sda2 VG VolGroup00 lvm2 [55.78 GB / 32.00 MB free] Total: 1 [55.78 GB] / in use: 1 [55.78 GB] / in no VG: 0 [0 ] # vgscan /dev/sda2 Found volume group "VolGroup00" using metadata type lvm2 # lvscan INACTIVE '/dev/VolGroup00/LogVol00' [53.81 GB] inherit INACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inherit
9
初期状態(2) OS起動状態
• 1 GiB = 230 B = 1,073,741,824 B / 1 MiB = 220 B = 1,048,576 B
– http://ja.wikipedia.org/wiki/ギビバイト 物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
# cat /etc/fstab /dev/VolGroup00/LogVol00 / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 /dev/VolGroup00/LogVol01 swap swap defaults 0 0 # df Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 ext3 54690180 4217448 47649772 9% / # cat /proc/meminfo | grep SwapTotal SwapTotal: 2031608 kB
LV Name: LogVol00 53.81GiB
LV Name:LogVol01 1.94GiB ファイルシステム
ext3:/:52.16GiB swap 1.94GiB
10
ファイルシステム(/)をリサイズ • ファイルシステムチェック
• リサイズ実行
# e2fsck -f /dev/VolGroup00/LogVol00 e2fsck 1.41.4 (27-Jan-2009) /dev/VolGroup00/LogVol00: ***** FILE SYSTEM WAS MODIFIED ***** /dev/VolGroup00/LogVol00: 189222/14123008 files (0.5% non-contiguous), 1497076/14114816 blocks
# resize2fs /dev/mapper/VolGroup00-LogVol00 10240M resize2fs 1.41.4 (27-Jan-2009) Resizing the filesystem on /dev/mapper/VolGroup00-LogVol00 to 2621440 (4k) blocks. The filesystem on /dev/mapper/VolGroup00-LogVol00 is now 2621440 blocks long.
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
LV Name: LogVol00 53.81GiB
LV Name:LogVol01 1.94GiB ファイルシステム
ext3:/:10GiB swap 1.94GiB
11
LVをリサイズ
# lvreduce -L 11G /dev/VolGroup00/LogVol00 WARNING: Reducing active logical volume to 11.00 GB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LogVol00? [y/n]: y Reducing logical volume LogVol00 to 11.00 GB Logical volume LogVol00 successfully resized
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
LV Name: LogVol00 11GiB
LV Name:LogVol01 1.94GiB ファイルシステム
ext3:/:10GiB swap 1.94GiB
12
PVをリサイズ(1)
• 失敗
# pvresize --setphysicalvolumesize 10240M /dev/sda2 /dev/sda2: cannot resize to 1151 extents as later ones are allocated. 0 physical volume(s) resized / 1 physical volume(s) not resized
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
LV Name: LogVol00 11GiB
LV Name:LogVol01 1.94GiB ファイルシステム
ext3:/:10GiB swap 1.94GiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
13
system-config-lvmで 実際の状態を確認
• 原因:末尾にSwap用の領域(LogVol01)がある 14
おもむろにswapを消す • 本来は末尾のLVを消すのではなく、別のディスクを用意して
• そこにpvmoveで移動するのが筋のようだ
• http://www.itmedia.co.jp/enterprise/0308/08/epn01.html
• http://michilu.com/blog/posts/40/
• が、時間がかかるので省略。
# lvremove /dev/VolGroup00/LogVol01 Do you really want to remove active logical volume "LogVol01"? [y/n]: y Logical volume "LogVol01" successfully removed
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 55.78GiB
LV Name: LogVol00 11GiB
LV Name:LogVol01 1.94GiB ファイルシステム
ext3:/:10GiB swap 1.94GiB
15
PVをリサイズ(2)
• 失敗、領域が微妙に足りない?
• MB単位で指定して、成功
# pvresize --setphysicalvolumesize 11G /dev/sda2 /dev/sda2: cannot resize to 351 extents as 352 are allocated. 0 physical volume(s) resized / 1 physical volume(s) not resized
# pvresize --setphysicalvolumesize 11264M /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2 PV Name: /dev/sda2 VG Name: VolGroup00 11GiB
LV Name: LogVol00 11GiB ファイルシステム ext3:/:10GiB
PV Name: /dev/sda2 VG Name: VolGroup00 11GiB
16
パーティションの再確保(1) • fdiskで領域を切り直す
# fdisk /dev/sda コマンド (m でヘルプ): p ディスク /dev/sda: 60.0 GB, 60011642880 バイト ヘッド 255, セクタ 63, シリンダ 7296 Units = シリンダ数 of 16065 * 512 = 8225280 バイト Disk identifier: 0x0078f6c1 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 7296 58500697+ 8e Linux LVM
17
パーティションの再確保(2)
コマンド (m でヘルプ): d 領域番号 (1-4): 2 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 最初 シリンダ (14-7296, 初期値 14): 初期値 14 を使います Last シリンダ, +シリンダ数 or +size{K,M,G} (14-7296, 初期値 7296): +12G 物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2:12GiB PV Name: /dev/sda2 VG Name: VolGroup00 11GiB
LV Name: LogVol00 11GiB ファイルシステム ext3:/:10GiB
PV Name: /dev/sda2 VG Name: VolGroup00 11GiB
18
パーティションの再確保(3)
コマンド (m でヘルプ): p ディスク /dev/sda: 60.0 GB, 60011642880 バイト ヘッド 255, セクタ 63, シリンダ 7296 Units = シリンダ数 of 16065 * 512 = 8225280 バイト Disk identifier: 0x0078f6c1 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1581 12594960 83 Linux コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 警告: 領域テーブルの再読込みがエラー 16 で失敗しました: Device or resource busy。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。
19
空き領域に別OSのインストール • 新規パーティション(例:/dev/sda3)に/を確保
– swapも単独パーティションに確保
– grubは新規パーティション(例:/dev/sda3)先頭にインストール
• インストール完了後、元インストールされていたOS上で
– fstabでswap設定
– /boot/grub/menu.lstの設定
• 別OSがLinuxの場合:(例/dev/sda3)上の/boot/grub/menu.lstを参考に追記
• またはチェインロードの設定をする
/dev/sda1 ext3: /boot: 100MiB
/dev/sda2:12GiB
LV :LogVol00 11GiB
ext3:/: 10GiB
PV : /dev/sda2 VG : VolGroup00 11GiB
/dev/sda3 別OSの/
/dev/sda5 swap: 共通使用
/dev/sda6, /dev/sda7.. さらに別OS
物理ディスク(/dev/sda)
20
例
# cat /etc/fstab /dev/VolGroup00/LogVol00 / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 #/dev/VolGroup00/LogVol01 swap swap defaults 0 0 /dev/sda5 swap swap defaults 0 0 /boot/grub/menu.lst追加例 title HogeLinux Grub (2.6.xx) root (hd0,2) chainloader +1 title HogeLinux (2.6.xx) root (hd0,2) kernel /boot/vmlinuz-2.6.xx ro root=LABEL=/ initrd /boot/initrd-2.6.xx.img
21
参考
• 平さんのページ
– http://pantora.net/pages/linux/lvm/3/
• system-config-lvm
– http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a090configlvm.html
• 物理LVMパーティションのリサイズ
– http://d.hatena.ne.jp/jbking/20061213/p1
• LVM関連コマンドのman
22