* Disk Management(LVM)

http://www.itmedia.co.jp/enterprise/articles/0709/05/news008.html

Linux Hacks:LVMで楽々ディスク管理 (1/3)

かつてディスク空間の管理は手間も時間もかかり、管理者にとってもユーザーにとってもいらだたしいものだった。しかしLVMを使用すれば、ほとんど苦労することなくディスク空間を増やしたり、減らしたり、管理したりできる。

[Shashank-Sharma,Open Tech Press]

2007年09月05日 01時10分 更新

かつてディスク空間の管理は手間も時間もかかり、管理者にとってもユーザーにとってもいらだたしいものだった。ディスク空間が足りなくなった場合には、Linuxをインストールし直したり、数時間をかけてPartedのようなツールを使用してパーティーションの大きさを変更したりすることもしばしばだった。しかしLVM(Logical Volume Manager)を使用すれば、ほとんど苦労することなくディスク空間を増やしたり、減らしたり、管理したりできる。

LVM入門

LVMの使い方の説明に入る前に、LVMの用語を知っておこう。LVMでは、一般的なパーティーションのことを「PV(Physical Volume、物理ボリューム)」と呼ぶ。そして1つ以上のPVが集まって、「VG(Volume Group、ボリュームグループ)」を構成する。そして各VGは「LV(Logical Volumes、論理ボリューム)」に分割される。

LVは通常のパーティーションと同じように機能し、Ext3などのファイルシステムを入れて、マウントポイントにマウントして使うことができる。VGのことを仮想的なハードディスクだと考え、LVのことを仮想的なハードディスク上の仮想的なパーティーションだと考えても差し支えないだろう。

LVMを始める

LVMを始めるにはまず、lvm2パッケージをインストールする必要がある。DebianユーザーとFedoraユーザーは、それぞれapt-getやyumを使用してlvm2をインストールできる。

LVMは、2.4.xシリーズでLinuxカーネルに統合されたので、今ではほぼすべてのLinuxディストリビューションでサポートされている。FedoraやDebianなどの幾つかのディストリビューションでは、ディストリビューションのインストール時のパーティーション分割の際にLVMを使用できるようになっている。またFedoraやSUSEなどの一部のディストリビューションでは、LVMのボリュームを管理するためのグラフィカルなツールも提供されている。

この記事では、LVMのボリュームを作成して、/homeディレクトリの中にマウントして使用する方法を説明する。なお、わたしのルートパーティーション(/)はsda1で、sda2はスワップ領域となっている。またディスク上に未使用領域が多少残っているので、そこにパーティーションを作成することにする。なおすでに空きパーティーションがある場合には、fdisk(やそのほかのパーティーション分割用ツール)を使用してそのパーティーションのシステムIDをLVMに変更するだけで、VGの作成に進むことができる。

パーティーションを分割するには、目的のディスク――わたしの場合/dev/sda――に対してfdiskを実行する。あるいはグラフィカルなツールの方が使いやすいという場合にはGPartedを使用するとよいだろう。

fdisk /dev/sda

前記のコマンドを実行すると、以下のようなメッセージとコマンドを入力するためのプロンプトが表示される(なお、シリンダの数はあなたの場合には異なる数字が表示されるだろう)。

The number of cylinders for this disk is set to 1958. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

まず、新しいパーティーションを作成するためにnというコマンドを入力する。続いてpを入力してプライマリーパーティーションを作成する。続いて作成したプライマリーパーティーションのパーティーション番号を指定する。続いて入力する最初と最後のシリンダの番号については、デフォルトのままにしておくのがおそらくよいだろう。

以上でプライマリーパーティーションを作成できた。次のステップとして、パーティーションのタイプをLVMに変更しよう。具体的に言うと、パーティーションのシステムIDの値を、新しいパーティーションに対してデフォルトで割り振られる「83」ではなく、「8e」に変更する必要がある。

システムIDの値を変更するためには、fdiskのtコマンドを使用する。目的のパーティーションの番号を選択して、パーティーションのタイプとして「8e」を入力する。最後に[Enter]キーを入力すると、fdiskが変更後のパーティーションタイプ(Linux LVM)を表示する。

システムIDが変更されたことを確かめるには、パーティーションテーブルを確認すればよい。pを入力して、パーティーションテーブルを表示しよう。

Disk /dev/sda: 16.1 GB, 16106127360 bytes 255 heads, 63 sectors/track, 1958 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System /dev/sda1 * 1 1020 8193118+ 83 Linux /dev/sda2 1021 1173 1228972+ 82 Linux swap / Solaris

/dev/sda3 1174 1958 3092512+ 8e Linux LVM

当然ながら前記の情報はあなたの場合には異なるものになるだろう。パーティーションテーブルを保存するためには、wに続けて[Enter]キーを入力する。新しいパーティーションテーブルは、コンピュータの再起動後に使用されるようになる。m

関連キーワード

Linux | ハードディスク | オープンソース | 使いやすい | Linux Hacks

ボリュームグループの作成

1|2|3 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

Linux Hacks:LVMで楽々ディスク管理 (2/3)

[Shashank-Sharma,Open Tech Press]

2007年09月05日 01時10分 更新

前のページへ 1|2|3 次のページへ

VGの作成

ここで、PVとVGについて前述したことを思い出そう。VGは、1つ以上のPVから構成されているということだった。従ってVGを作成する前にPVを初期化する必要がある。そのためにはまず、新しいパーティーションテーブルが使用されることを確実にするために、リブートする必要がある。その後、端末ウインドウを開いてrootユーザーとして、あるいはsudoを使用して以下のようなコマンドを実行しよう。

pvcreate /dev/sda3

これでPVを初期化できた。そこで次に、このPVを使用するVGを作成しよう。VGには、一意の名前を与える必要がある。「vgcreate home2 /dev/sda3」というコマンドを実行すれば、/dev/sda3から構成されるhome2という名前のVGが作成される。

あるいは、複数のPVから構成されるVGを作成することもできる。例えば「vgcreate home3 /dev/sda3 /dev/sda5」とすれば、sda3とsda5という2つのPVから構成されるVGが作成される。VGはまた、複数のハードディスクにまたがることもでき、例えば「vgcreate home4 /dev/sda /dev/sdb」とすれば、2つのハードディスクにまたがったVGが作成される。vgscanコマンドを使用すれば、全VGを表示できる。

以上でVGが作成できたので、次にVGをLVに分割しよう。VG内には複数のLVを作成することもできるし、VGの全領域を使用する単一のLVを作成することもできる。「lvcreate -n downloads --size 1G home2」というコマンドを実行すれば、home2という名前のVGの中に、downloadsという名前の1GバイトのLVが作成される。LVの名前は-nオプションで指定している。

なお以下で述べるようにLVをマウントする際にはLVの名前とVGの名前が両方とも必要になるが、lvdisplayコマンドを使用すればLVの属性を見ることができる。

新しいLVを使い始めるには、まずそのLVのフォーマットとマウントを行う必要がある。LVは/dev/VG名/LV名(ここでは/dev/home2/downloads)として利用可能になっているはずなので、rootユーザーになって「mkfs.ext3 /dev/home2/downloads」というコマンドを実行すれば、LVをExt3ファイルシステムとしてフォーマットできる。

次に、「mkdir /home/downloads」というコマンドを実行して/homeディレクトリの中にディレクトリを作成する。その後、「mount -t ext3 /dev/home2/downloads /home/downloads」というコマンドを実行して、作成したディレクトリにLVをマウントする。マウントポイントの名前は必ずしもLVの名前と同じでなくてもよいが、混乱を避けるために同じ名前を用いた方がよいだろう。なお/etc/fstabに以下のような行を追加しておくと、ブートの際にdownloadsというLVを毎回自動的にマウントさせることができる。

/dev/home2/downloads /home/downloads ext3 defaults 1 2

これでdownloadsというLVにデータを保存できるようになった。

関連キーワード

Linux | ハードディスク | オープンソース | 使いやすい | Linux Hacks

LVの大きさを変更する

前のページへ 1|2|3 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

Linux Hacks:LVMで楽々ディスク管理 (3/3)

[Shashank-Sharma,Open Tech Press]

2007年09月05日 01時10分 更新

前のページへ 1|2|3

LVの大きさを変更する

新しく作成したLVだが、将来的にはやがてその領域も足りなくなると考えておいて間違いはないだろう。そのような場合には、lvextendコマンドを使用してLVを大きくすることができる。

ただしこれを行うにはVGに空き領域がなければならない。とはいえVGに空き領域がないという場合でもあきらめる必要はなく、その場合には次節で紹介する、VGにPVを追加するための作業を先に行なえばよい。

前記の例では、2Gバイトの領域を持つVGの中に1GバイトのLVを作成したので、LVの大きさをもう1Gバイト分大きくすることが可能だ。ただしLVを大きくする前にLVをアンマウントする必要がある。Ext3ファイルシステムはアンマウントしなくても大きさを変更することが可能なのだが、念のために無難な方法で行なっておこう。それではまず「umount /home/downloads」というコマンドを実行してハードディスクをアンマウントしよう。これにより、/etc/fstabにエントリを追加しておいた場合にはLVをアンマウントできる。そうでない場合には、「umount /dev/home2/downloads」を実行すればアンマウントできる。*注:アンマウントしなくてもできました

次に、「lvextend -L +1G /dev/home2/downloads」というコマンドを実行する。成功した場合、LVの大きさが1Gバイト分増えて、以下のようなメッセージが表示されるはずだ。

Extending logical volume downloads to 2.00 GB

Logical volume downloads successfully resized

LVを大きくすることができたことを確認するには、lvdisplayコマンドを実行すればよい。次に、大きくなったLVに合わせてファイルシステムの大きさを変更しよう。「resize2fs /dev/home2/downloads」を実行すれば、LV上のext3ファイルシステムの大きさを変更できるので、後は再びマウントするだけだ。(*注:減らすときにはumountが必須)

lvextendコマンドに似たコマンドに、lvreduceコマンドがある。lvreduceコマンドを使えば、LVの大きさを小さくすることができる。ただしこれを行うことは、LV上のデータが失われる恐れがあるため、リスクが高いと考えられている。lvreduceコマンドを使用するには、あらかじめresize2fsコマンドを使用してLV上のファイルシステムの大きさを変更しておく必要がある。

lvreduce -L -500M /dev/home2/downloads」を実行すれば、LVの大きさを500Mバイト分小さくできる。しかしlvreduceは危険を伴うコマンドであるため、全データのバックアップを取らずにLVの大きさを劇的に小さくするようなことはやめておいた方がよいだろう。

VGを変更する

LVが、VG内のすべての領域を使い尽くしてしまったという場合にはどうすればよいだろうか? その場合には、既存のVGにさらにPVを追加した上で、前述したようにLVを大きくすればよい。

まず始めに、VG内のLVをアンマウントしよう。(*注:アンマウントしなくてもできました)その後「vgextend home2 /dev/sda5 /dev/sda7」というコマンドを実行すれば、home2という名前の既存のVGにsda5とsda7という2つのPVを追加できる(もちろんsda5とsda7はあらかじめ利用可能にしておく必要がある)。前記のコマンドを実行するとhome2というVGはsda3、sda5、sda7から構成されることになる。

VGを削除するためは、VGに含まれているすべてのLVを先に削除しておく必要がある。LVをアンマウントして、「lvremove /dev/home2/downloads」というコマンドを実行すれば、LVとそれに含まれている全データが削除される。その後、vgremoveコマンドを「vgremove home2」のようにして実行すれば、VGを削除できる。

CentOS で LVM 物理/論理ボリュームサイズを縮小する

出典: maruko2 Note.

移動: メニュー, 検索

SourceForge.JP Magazine
SourceForge.JP Magazine
SourceForge.JP Magazine

はじめに

CentOS 5 で、ルートパーティションの使用量が少ないため、ルートパーティションを小さくしようとしたが、ボリュームが LVM で管理されていたため、その時のメモ。 ボリューム名は、インストール時にデフォルトで付けられた名前を使用している。

下記のような構成で、ルート (/) は 5GB ほどしか使用していない状態なので、

/boot 100 MB /dev/sda1 / 18 GB /dev/mapper/VolGroup00-LogVol00 swap 2 GB /dev/mapper/VolGroup00-LogVol01 PV /dev/sda2 VG VolGroup00 20GB

次のようにルート (/) のボリュームサイズと、PV のサイズを小さくする。

/boot 100 MB /dev/sda1 / 8 GB /dev/mapper/VolGroup00-LogVol00 swap 2 GB /dev/mapper/VolGroup00-LogVol01 PV /dev/sda2 VG VolGroup00 10GB

手順としては、次のようになる。

  1. ファイルシステムのサイズを縮小

  2. 論理ボリューム(LV)のサイズを縮小

  3. 物理ボリューム(PV)のサイズを縮小

ファイルシステムのサイズを縮小

マウントした状態ではファイルシステムのサイズを変更することができないため、CentOS の LiveCD で起動する。

LiveCD で起動後、/dev/mapper/VolGroup00-LogVol00 のマウントを解除する。

[root@livecd ~]# umount /dev/mapper/VolGroup00-LogVol00

e2fsck コマンドで、ファイルシステムをチェックする。(このチェックをしないと、次のサイズ変更をすることができない。)

[root@livecd ~]# e2fsck -f /dev/mapper/VolGroup00-LogVol00 e2fsck 2.39 (29-May-2006) 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/mapper/VolGroup00-LogVol00: 92069/4704768 files (1.3% non-contiguous), 1285660/4702208 blocks

resize2fs コマンドで、ファイルシステムのサイズを変更をする。

[root@livecd ~]# resize2fs /dev/mapper/VolGroup00-LogVol00 8G (緒方注: 8GBのサイズにするということ.)

resize2fs 1.39 (29-May-2006) Resizing the filesystem on /dev/mapper/VolGroup00-LogVol00 to 2097152 (4k) blocks. The filesystem on /dev/mapper/VolGroup00-LogVol00 is now 2097152 blocks long.

論理ボリュームのサイズを縮小

lvreduce コマンドで論理ボリュームの縮小をする。

[root@livecd ~]# lvreduce -L 8G /dev/mapper/VolGroup00-LogVol00 (緒方注: 8GBのサイズにするということ.)

WARNING: Reducing active logical volume to 8.00 GB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LogVol00? [y/n]: y Reducing logocal volume LogVol00 to 8.00 GB Logical volume LogVol00 successfully resized

一応 lvdisplay コマンドで LV Size(論理ボリュームサイズ)の確認。

[root@livecd ~]# lvdisplay /dev/mapper/VolGroup00-LogVol00

物理ボリュームのサイズを縮小

物理ボリュームを縮小するための準備

/dev/mapper/VolGroup00-LogVol00 の論理ボリュームサイズを 18GB から 8GB に縮小できたので、次は、物理ボリュームのサイズを変更する。

現在の論理ボリュームと物理ボリュームのサイズを確認。

[root@livecd ~]# pvscan /dev/cdrom: open failed: Read-only file system Attempt to close device '/dev/cdrom' which is not open. PV /dev/sda22 VG VolGroup00 lvm2 [19.88 GB / 9.94 GB free] Total: 1 [19.88 GB] / in use: 1 [19.88 GB] / in no VG: 0 [0 ] [root@livecd ~]# lvscan ACTIVE '/dev/VolGroup00/LogVol00' [8.00 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [1.94 GB] inherit

system-config-lvm コマンドを実行すると、グラフィカルな LVM ツールが起動し論理ボリュームの状態がわかる。

LogVol00 の論理ボリュームサイズを小さくしたので、LogVol00 と LogVol01 の間に Unused Space ができている。

LogVol01 を削除し、再度作成することで次のような状態にする。

lvremove コマンドで LogVol01 を削除しようとしても、削除できない。

[root@livecd ~]# lvremove /dev/mapper/VolGroup00-LogVol01 Can't remove open logical volume "LogVol01"

LogVol01 は SWAP 領域なので swapoff する。

[root@livecd ~]# swapoff /dev/mapper/VolGroup00-LogVol01

lvremove すると、LogVol01 を削除することができる。

[root@livecd ~]# lvremove /dev/mapper/VolGroup00-LogVol01 Do you really want to remove active logical volume LogVol01? [y/n]:y Logical volume "LogVol01" successfully removed

論理ボリューム LogVol01 を作成。

[root@livecd ~]# lvcreate -L 2G -n LogVol01 VolGroup00 /dev/cdrom: open failed: Read-only file system Logical volume "LogVol01" created

mkswap コマンドで SWAP 用にする。

[root@livecd ~]# mkswap /dev/mapper/VolGroup00-LogVol01 Setting up swapspace vrsion 1, size = 2147479 kB

swapon コマンドで SWAP 領域として割り当てる。

[root@livecd ~]# swapon /dev/mapper/VolGroup00-LogVol01

物理ボリュームを縮小

ここまでで、物理ボリューム内の論理ボリュームは次のようになったので、Unused Space を削除する形で物理ボリュームを縮小する。

まずは、物理ボリュームのサイズ確認。

[root@livecd ~]# pvscan PV /dev/sda2 VG VolGroup00 lvm2 [19.88GB / 9.88 GB free] Total: 1 [19.88 GB] / in use: 1 [19.88 GB] / in on FV: 0 [0 ]

pvresize コマンドで、物理ボリュームをリサイズ。

[root@livecd ~]# pvresize --setphysicalvolumesize 10G /dev/sda2 /dev/sda2: cannot resize to 319 extents as 320 are allocated. 0 physical volume(s) resized / 1 physical volumes(s) not resized

小さくしすぎてエラーになったので、MB 指定で少し大きなサイズを指定。

[root@livecd ~]# pvresize --setphysicalvolumesize 10500M /dev/sda2 (注: 10500MBにするということ)

Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volumes(s) not resized

リサイズできたので、確認。

[root@livecd ~]# pvscan PV /dev/sda2 VG VolGroup00 lvm2 [10.25 GB / 256.00 MB free] Total: 1 [10.25 GB] / in use: 1 [10.25 GB] / in on FV: 0 [0 ]

まだ 256 MB 空いているようなので、10244 MB で再リサイズ。

[root@livecd ~]# pvresize --setphysicalvolumesize 10244M /dev/sda2

Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volumes(s) not resized

サイズ確認。

[root@chuo221 ~]# pvscan

PV /dev/sda2 VG VolGroup00 lvm2 [10.00 GB / 0 free] Total: 1 [10.00 GB] / in use: 1 [10.00 GB] / in no VG: 0 [0 ]

(注:ここまでしてgpartedなどでパーティションが小さくなっていなかったので以下の操作を追加)

はてなdiary

間違いだらけの備忘録

[Linux]LVM領域の縮小

file:system-config-lvm_1.png
file:system-config-lvm_2.png
file:system-config-lvm_2.png
Add Star

/bootとLVMで構成済のHDDに空きパーティション(マルチブート用を作成)

環境はubuntu9.04

  1. パーティション縮小

fdiskを使ってのパーティションの削除と作成

# fdisk /dev/sda

コマンド (m でヘルプ): p

ディスク /dev/sda: 60.0 GB, 60011642880 バイト

ヘッド 255, セクタ 63, シリンダ 7296

Units = シリンダ数 of 16065 * 512 = 8225280 バイト

Disk identifier: 0xbf8e740a

デバイス ブート 始点 終点 ブロック Id システム

/dev/sda1 * 1 13 104391 83 Linux

/dev/sda2 14 7296 58500697+ 8e Linux LVM

コマンド (m でヘルプ): d

領域番号 (1-4): 2

コマンド (m でヘルプ): p

ディスク /dev/sda: 60.0 GB, 60011642880 バイト

ヘッド 255, セクタ 63, シリンダ 7296

Units = シリンダ数 of 16065 * 512 = 8225280 バイト

Disk identifier: 0xbf8e740a

デバイス ブート 始点 終点 ブロック Id システム

/dev/sda1 * 1 13 104391 83 Linux

コマンド (m でヘルプ): n

コマンドアクション

e 拡張

p 基本領域 (1-4)

p

領域番号 (1-4): 2

最初 シリンダ (14-7296, 初期値 14):

初期値 14 を使います

Last シリンダ, +シリンダ数 or +size{K,M,G} (14-7296, 初期値 7296):+35G

コマンド (m でヘルプ): p

ディスク /dev/sda: 60.0 GB, 60011642880 バイト

ヘッド 255, セクタ 63, シリンダ 7296

Units = シリンダ数 of 16065 * 512 = 8225280 バイト

Disk identifier: 0xbf8e740a

デバイス ブート 始点 終点 ブロック Id システム

/dev/sda1 * 1 13 104391 83 Linux

/dev/sda2 14 4583 36708525 83 Linux

コマンド (m でヘルプ): w

領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

ディスクを同期させます。

以上

本来は末尾のLVを消すのではなく、別のディスクを用意して

そこにpvmoveで移動するのが筋

http://www.itmedia.co.jp/enterprise/0308/08/epn01.html

http://michilu.com/blog/posts/40/

が、時間がかかるので省略。