SSブログ

[増刊号 003] LV自由自在 [UNIX環境]

貧乏性なのか、ディスク領域を無駄にしたくない性分なので、インストールイメージを置いておく場所は目一杯サイズを絞りたいです。そこで、今日はLinuxのlogical volumeを操作する方法を学びました。

また、Linuxではファイルシステムを縮める操作と論理ボリュームを縮める操作は別であることに加え、論理ボリュームを切り詰める際にはその中にあるファイルシステムのサイズがいくつであるかを確認しない(原理的にできないですね)ようなので、間違ったサイズにしてしまうとデータを失ったりファイルシステムの構造を壊してしまうことになりかねません。

そういう事態になる前に、消えてもいいインストールイメージで論理ボリュームを切り詰める練習する事も兼ねています。(元に4回くらい失敗しています。)

話戻って、やりたいことは以下のとおりです。
なお、イメージの対象としてOracle 11g(お試し版)を使いましたが、他でもやり方は一緒です。

1. イメージが入る十分大きなファイルシステムを作成する
2. イメージ展開後、余分なファイルシステムを縮める
3. ファイルシステムを保持している論理ボリュームを切り詰める

上記の目的であれば、インストールイメージ以外でも使えます。

1. イメージが入る十分大きなファイルシステムを作成する
Oracleはzipされているので、ダウンロードしたサイズが入る領域では不足です。多めに作成しなければなりません。まずは、十分なサイズの論理ボリュームを作成してフォーマットします。今回は2GBで作成しました。

# lvcreate --size 2G --name oracle11.1 system
# mke2fs /dev/system/oracle11.1
ke2fs 1.41.11 (14-Mar-2010)
...
lock size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
...
フォーマットしたらしかるべき場所にマウントして展開します。これは普通にやってください。
# mount /instimgs/Oracle11.1
# cd /instimgs/Oracle11.1
# unzip /tmp/linux_11gR1_database_1013.zip
2. イメージ展開後、余分なファイルシステムを縮める
展開できるだけ十分大きなサイズを割り当てたので、以下のように余分な領域があります。(以下、作業ディレクトリは展開した場所です。)
# df Oracle11.1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/system-oracle11.1 2064208 1869288 90064 96% /instimgs/Oracle11.1
この結果から90MB位返せます。ext
fsのリサイズコマンド(resize2fs)では、リサイズ後のサイズを指定しなければならないため、それを計算します。dfコマンドの出力か
ら、"1K-blocks"と"Available"(斜字体)を利用して計算します。
# expr 2064208 - 90064
1974144
このサイズにリサイズします。その前にfsckをかけるよう指定があるかもしれません。指示にしたがってください。
# e2fsck -f /dev/system/oracle11.1
e2fsck 1.41.11 (14-Mar-2010)
...
/dev/system/oracle11.1: 2953/131072 files (16.3% non-contiguous), 475558/524288blocks

# resize2fs /dev/system/oracle11.1 1974144K
resize2fs 1.41.11 (14-Mar-2010)
Resizing the filesystem on /dev/system/oracle11.1 to 493536 (4k) blocks.
The filesystem on /dev/system/oracle11.1 is now 493536 blocks long.
リサイズの単位(今回はK)を忘れないでください。

resize2fsの結果から、4kb単位で数えて493536ブロックになっている(斜字体)ことが分かります。またリサイズ後のfsckからも同様のことが分かります。
# e2fsck -f /dev/system/oracle11.1
e2fsck 1.41.11 (14-Mar-2010)
...
/dev/system/oracle11.1: 2953/131072 files (16.3% non-contiguous), 475558/493536blocks
3. ファイルシステムを保持している論理ボリュームを切り詰める
最後に論理ボリュームを切り詰めます。
論理ボリュームはextentという単位で追加・削除ができますので、そのサイズを調べます。
この部分はあまり深く追求していないので、間違っていたらコメントでご指摘いただければ助かります。

ボリュームグループにPhysical Extent(PE)という項目があるので、それを見てください。
# vgdisplay|grep 'PE Size'
PE Size 4.00 MiB
わたしのボリュームグループは4MB単位のようです。つまり論理ボリュームは4MB単位での増減が可能なようです。

直前にファイルシステムが使用しているサイズを確認しています(493536 (4k))ので、これが入るextent数がわかればOKです。まずは4KB単位を4MB単位に変換します。
# expr 493536 % 1024
992
# expr 493536 / 1024 + 1
482
最初の計算式で493536を1024で割った余りをだしています。ここが0でない場合は4MB単位では収まらない半端がある(つまり481.96875
(4m)のような)ことを示します。次の式は493536
(4k)を4MB単位に変換した場合のブロック数を計算しています。1を足しているのは、前の式で端数が出ていますので、それを入れる分を加えています。
余りが0であれば、1を足す必要はありません。

以上はコマンドが整数しか扱えないexprを使ったために面倒なことをしていますが、電卓で計算して小数になったら切り上げる、というやり方の方がカンタンです。(手元に電卓無いもので...)

最後に論理ボリュームを切り詰めて、ファイルシステムが壊れていないかを確認します。
# lvreduce -f --extents 482 /dev/system/oracle11.1
...
# e2fsck -f /dev/system/oracle11.1
...
/dev/system/oracle11.1: 2953/131072 files (16.3% non-contiguous), 475558/493536blocks
切り詰めすぎたりすると、fsckで問題を見つけてくれる場合があります。

# ようやくまともにできた。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。