Contenu connexe
Similaire à Lvmを縮小してみた (20)
Plus de koedoyoshida (12)
Lvmを縮小してみた
- 3. LVMの利点
• http://ja.wikipedia.org/wiki/論理ボリュームマネージャ
• 複数PVによるボリュームグループ上に、1つのPVを超えるような論理ボリューム
(LV) を作成し、扱う事が可能となる。
• ディスク管理上の上限である7パーティション を超えた数の論理ボリューム (LV) を
作成可能となる。
• 論理ボリューム (LV) の動的拡張・縮小が可能となる。
– 当然のことながら、LVの上に構築されるファイルシステムが動的拡張・縮小を
サポートしていない場合、ファイルシステムの拡張・縮小や再構成のために
システム停止が必要となる。
• 物理ボリュームの追加による論理ボリュームの拡張性の維持が可能。
– 但し、ハードウェアの構成やOSの対応によっては、物理ボリュームの追加時
にシステム停止が必要となる。
• ソフトウェアミラーやソフトウェアによるストライピングが可能。
3
- 4. LVMで構築済のシステムに
別OSを入れたい
• Disk初期化して再インストール
– 既存システムを消したくない→×
• Gparted
– 起動オプションでLVMのボリュームを与えることは
可能
– PVの縮小が出来ない→×
• e2fsadm
– LVM1(kernel2.4)用のツール
– 現在LVM2(Kernel2.6)用には無さそう→×
4
- 5. LVMと関連要素
• 物理ディスク
• パーティション
• PV(Physical Volume)
• VG(Volume Group)
• LV(Logical Volume)
• ファイルシステム
物理ディスク(/dev/sda)
/dev/sda1 /dev/sda2
LV Name: LV Name:
(/boot) PV Name: /dev/sda2
LogVol00 LogVol01
VG Name: VolGroup00
ファイルシステム swap
ext3:/
5
- 6. ググってみた(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#post
2524620
6
- 7. ググってみた(2)
• http://pantora.net/pages/linux/lvm/3/
– 平さんのページ
ファイルシステムのリサイズ
Linuxで一般的に使われているLinux ext2、Linux ext3、ReiserFSなどの
ファイルシステムは、(リサイズ機能を)すでにサポートしています。
LVのリサイズ
LVのサイズは変更することができます。拡大も縮小も行なえます。
PVのリサイズ
Fedora Core 5 以降、Red Hat Enterprise Linux 4 Update 4 以降から
PV をオンラインでリサイズする pvresize コマンドが新しく加わりました。
もしもLUNのオンラインリサイズを行えるストレージ(/dev/sdb)をお使
いの場合、PVのリサイズを行うことが可 能です。 7
- 8. リサイズ実施
• 事前準備
• ライブCDで起動
– マウントしないでディスク操作をする必要が有る
– そもそも空きパーティションが無い
• 今回はUbuntu9.04を使用
# aptitude install lvm2
• synapticでuniverseリポジトリを追加後、system-config-lvmを追加インストール
– ubuntu8.10のsystem-config-lvmは起動時にクラッシュして使えず。
# aptitude update
# aptitude install system-config-lvm
– universeリポジトリ: Debian (等)から持ってきたubuntu用パッケージ集
8
- 9. 初期状態
• 初期状態
– 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
- 10. 初期状態(2) OS起動状態
# 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
• 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 /dev/sda2
ext3: PV Name: /dev/sda2 LV Name: LogVol00 LV Name:LogVol01
/boot: VG Name: VolGroup00 53.81GiB
1.94GiB
100MiB 55.78GiB ファイルシステム swap
ext3:/:52.16GiB 1.94GiB
10
- 11. ファイルシステム(/)をリサイズ
• ファイルシステムチェック
# 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 /dev/sda2
ext3: PV Name: /dev/sda2 LV Name: LogVol00 LV Name:LogVol01
/boot: VG Name: VolGroup00 53.81GiB
1.94GiB
100MiB 55.78GiB ファイルシステム swap
ext3:/:10GiB 1.94GiB
11
- 12. 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 /dev/sda2
ext3: PV Name: /dev/sda2 LV Name: LogVol00 LV Name:LogVol01
/boot: VG Name: VolGroup00 11GiB
1.94GiB
100MiB 55.78GiB ファイルシステム swap
ext3:/:10GiB 1.94GiB
12
- 13. 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 /dev/sda2
ext3: PV Name: /dev/sda2
/dev/sda2 LV Name: LogVol00 LV Name:LogVol01
/boot: VG Name: /dev/sda2
PV Name: VolGroup00 11GiB
1.94GiB
100MiB 55.78GiB VolGroup00 ファイルシステム
VG Name:
55.78GiB swap
ext3:/:10GiB 1.94GiB
13
- 15. おもむろに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 /dev/sda2
ext3: PV Name: /dev/sda2 LV Name: LogVol00 LV Name:LogVol01
/boot: VG Name: VolGroup00 11GiB
1.94GiB
100MiB 55.78GiB ファイルシステム swap
ext3:/:10GiB 1.94GiB
15
- 16. PVをリサイズ(2)
# 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
• MB単位で指定して、成功
物理ディスク(/dev/sda):60GB≒55.9GiB
/dev/sda1 /dev/sda2
ext3: PV Name: /dev/sda2 LV Name: LogVol00
/boot: VG Name: VolGroup00 11GiB
100MiB 11GiB ファイルシステム
ext3:/:10GiB
16
- 17. パーティションの再確保(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
- 18. パーティションの再確保(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 /dev/sda2:12GiB
ext3: PV Name: /dev/sda2 LV Name: LogVol00
/boot: VG Name: VolGroup00 11GiB
100MiB 11GiB ファイルシステム
ext3:/:10GiB
18
- 19. パーティションの再確保(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
- 20. 空き領域に別OSのインストール
• 新規パーティション(例:/dev/sda3)に/を確保
– swapも単独パーティションに確保
– grubは新規パーティション(例:/dev/sda3)先頭にインストール
• インストール完了後、元インストールされていたOS上で
– fstabでswap設定
– /boot/grub/menu.lstの設定
• 別OSがLinuxの場合:(例/dev/sda3)上の/boot/grub/menu.lstを参
考に追記
• またはチェインロードの設定をする
物理ディスク(/dev/sda)
/dev/sda1 /dev/sda2:12GiB /dev/sda3 /dev/sda5 /dev/sda6,
ext3: PV : /dev/sda2 LV :LogVol00 別OSの/ swap: /dev/sda7..
/boot: VG : 11GiB 共通使用 さらに別OS
100MiB VolGroup00
ext3:/:
11GiB 10GiB
20
- 21. 例
# 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
- 22. 参考
• 平さんのページ
– 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