22
LVMを縮小してみた 吉田@板橋 2009/8/8

Lvmを縮小してみた

Embed Size (px)

Citation preview

Page 1: Lvmを縮小してみた

LVMを縮小してみた

吉田@板橋

2009/8/8

Page 2: Lvmを縮小してみた

背景

• 某rpm系ディストリビューションをデフォルトでインストールするとハードディスクがLVMで構成される

2

Page 3: Lvmを縮小してみた

LVMの利点

• http://ja.wikipedia.org/wiki/論理ボリュームマネージャ

• 複数PVによるボリュームグループ上に、1つのPVを超えるような論理ボリューム (LV) を作成し、扱う事が可能となる。

• ディスク管理上の上限である7パーティション を超えた数の論理ボリューム (LV) を作成可能となる。

• 論理ボリューム (LV) の動的拡張・縮小が可能となる。

– 当然のことながら、LVの上に構築されるファイルシステムが動的拡張・縮小を

サポートしていない場合、ファイルシステムの拡張・縮小や再構成のためにシステム停止が必要となる。

• 物理ボリュームの追加による論理ボリュームの拡張性の維持が可能。

– 但し、ハードウェアの構成やOSの対応によっては、物理ボリュームの追加時にシステム停止が必要となる。

• ソフトウェアミラーやソフトウェアによるストライピングが可能。

3

Page 4: Lvmを縮小してみた

LVMで構築済のシステムに 別OSを入れたい

• Disk初期化して再インストール –既存システムを消したくない→×

• Gparted –起動オプションでLVMのボリュームを与えることは可能

– PVの縮小が出来ない→×

• e2fsadm – LVM1(kernel2.4)用のツール

–現在LVM2(Kernel2.6)用には無さそう→×

4

Page 5: Lvmを縮小してみた

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

Page 6: Lvmを縮小してみた

ググってみた(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

Page 7: Lvmを縮小してみた

ググってみた(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

Page 8: Lvmを縮小してみた

リサイズ実施 • 事前準備

• ライブ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

Page 9: Lvmを縮小してみた

初期状態 • 初期状態

– 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

Page 10: Lvmを縮小してみた

初期状態(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

Page 11: Lvmを縮小してみた

ファイルシステム(/)をリサイズ • ファイルシステムチェック

• リサイズ実行

# 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

Page 12: Lvmを縮小してみた

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

Page 13: Lvmを縮小してみた

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

Page 14: Lvmを縮小してみた

system-config-lvmで 実際の状態を確認

• 原因:末尾にSwap用の領域(LogVol01)がある 14

Page 15: Lvmを縮小してみた

おもむろに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

Page 16: Lvmを縮小してみた

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

Page 17: Lvmを縮小してみた

パーティションの再確保(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

Page 18: Lvmを縮小してみた

パーティションの再確保(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

Page 19: Lvmを縮小してみた

パーティションの再確保(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

Page 20: Lvmを縮小してみた

空き領域に別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

Page 21: Lvmを縮小してみた

# 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

Page 22: Lvmを縮小してみた

参考

• 平さんのページ

– 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