Xen Domain-Uの容量追加

既存のドメインUの20Gハードディスク容量の追加する方法
(1)追加領域のファイル作成
(2)設定ファイルを編集(xvdbとしてマウント)
(3)Domain-Uの起動
(4)追加した領域のファイルシステム作成
(5)既存論理ボリュームへの追加



以下、ホストOSでの設定
[root@centos ~]# dd if=/dev/zero of=/var/lib/xen/images/add-vol.img bs=1 count=0 seek=21474836480
[root@centos ~]# vi /etc/xen/domu.conf
※以下を編集
disk = [ "tap:aio:/var/lib/xen/images/domu.img,xvda,w","tap:aio:/var/lib/xen/images/add-vol.img,xvdb,w" ]


[root@centos ~]# xm create -c /etc/xen/domu.conf


以下、ゲストOS(Domain-U)での設定
[root@domu ~]# fdisk /dev/xvdb


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


Disk /dev/xvdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes


バイス Boot Start End Blocks Id System


コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-2610, default 1): 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2610, default 2610): 2610


コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました


コマンド (m でヘルプ): w
領域テーブルは交換されました!


[root@domu ~]# pvcreate /dev/xvdb
[root@domu ~]# vgextend VolGroup00 /dev/xvdb
[root@domu ~]# lvextend -L+19.8G /dev/VolGroup00/LogVol00
[root@domu ~]# resize2fs /dev/VolGroup00/LogVol00


ディスク領域の確認
[root@domu ~]# df -h

quotaを使用しないディレクトリ単位の容量制限

quotaを利用した容量制限はよく見かけるのでもっと手軽に容量制限したい場合の方法。

以下の流れで設定を行う。


(1)ディスクスペース用のファイル作成(このファイルサイズだけ容量制限する)
(2)ファイルシステムの作成
(3)マウントスペースの作成
(4)ファイルシステムのマウント


○5Gの容量制限ディレクトリを/home/aaaに作成する場合
[root@centos ~]# dd if=/dev/zero of=/home/aaa.fs bs=1G count=5
[root@centos ~]# mke2fs /home/aaa.fs
[root@centos ~]# mkdir /home/aaa
[root@centos ~]# mount -o loop /home/aaa.fs /home/aaa


※起動時に自動的にマウントする場合
[root@centos ~]# vi /etc/fstab
/home/aaa.fs /home/aaa ext2 defaults 0 0

Xen Domain-Uバックアップ(2) バックアップ

前回までにHDDにスナップショット用空き領域(10G)が作成できたので、その領域にスナップショット領域を作成しXen Domain-Uのイメージファイルのバックアップを取得する。

※スナップショットについて

ファイルシステム内でリンク情報を保持し、オリジナルファイルに変更があった場合は変更箇所のブロックだけスナップショット領域にデータを退避するため、安全なバックアップを取得することができる。

スナップショット中の変更データがスナップショット領域を超えるとスナップショットを保持できなくなるため、設定する容量については注意が必要。



以下の流れでバックアップを取得する
1)10Gのスナップショット領域を作成
2)作成したスナップショット領域をマウント
3)バックアップデータのコピー
4)スナップショット領域のアンマウント
5)スナップショット領域の削除


で以下コマンド
※予めマウント先のディレクトリ(/mnt/snap-vol)は作成しておく
[root@centos ~]# lvcreate -s -L 10G -n snap-vol /dev/VolGroup00/LogVol00
[root@centos ~]# mount /dev/VolGroup00/snap-vol /mnt/snap-vol
[root@centos ~]# rsync -av /mnt/snap-vol/etc/xen/*.config [バックアップディレクトリ]/config/
[root@centos ~]# rsync -av /mnt/snap-vol/var/lib/xen/*.image [バックアップディレクトリ]/image/
[root@centos ~]# umount /mnt/snap-vol
[root@centos ~]# lvremove /dev/VolGroup00/snap-vol


日次で定時バックアップをとるため同じ内容で以下のシェルを作成し、cronで設定。
※バックアップは一日分としバックアップ取得日前日のファイルは削除する


[xendomu-backup.sh]
#!/bin/sh


DATE=`/bin/date '+%Y%m%d%H%M'`
OLDDATE=`/bin/date --date '1 day ago' +%Y%m%d`
BACKDIR=/mnt/backup


mkdir -p $BACKDIR/domu-$DATE


/usr/sbin/lvcreate -s -L 10G -n snap-vol /dev/VolGroup00/LogVol00
mount /dev/VolGroup00/snap-vol /mnt/snap-vol


/usr/bin/rsync -a /mnt/snap-vol/etc/xen/*.config $BACKDIR/xenbk-$DATE/
/usr/bin/rsync -a /mnt/snap-vol/var/lib/xen/images/*.image $BACKDIR/xenbk-$DATE/


umount /mnt/snap-vol
/usr/sbin/lvremove -f /dev/VolGroup00/snap-vol

if [ $DATE!=$OLDDATE ]; then
rm -rf $BACKDIR/domu-$OLDDATE
fi

Xen Domain-Uバックアップ(1)

 Xen Domain-Uを稼働しながらバックアップを取得するためLVMのスナップショット機能を利用してバックアップを取得する。
 CentOSをデフォルトでインストールした場合、HDDのディスクサイズはすべて論理ボリュームに割り当てられてしまうため、スナップショット領域を作成するための空き容量が不足している。(以下、参照)


# /usr/sbin/lvcreate -s -L 8G -n xensnap /dev/VolGroup00/LogVol00
Insufficient free extents () in volume group VolGroup00
※空き容量が足りないため作成できない


 なので、今回は論理ボリュームの縮小から行う。以下、手順。


○前提条件
・縮小させる容量の空きがあること(dfコマンドなどで確認)
・/dev/VolGroup00/LogVol00 146G を 135G に縮小し10G程度のスナップショット領域を作成する
・事前に重要なファイルのバックアップを取得すること


・OSを再起動しインストールCDからブート
※論理ボリュームがアクティブな状態で縮小するとファイルシステムが壊れる可能性が高いので、必ずインストールCDからレスキューモードで行うこと。


boot:linux rescue


sh-3.2# lvm vgchange -a y
sh-3.2# fsck.ext3 -f /dev/VolGroup00/LogVol00
sh-3.2# resize2fs /dev/VolGroup00/LogVol00 135G
sh-3.2# lvm lvresize -L 135G /dev/VolGroup00/LogVol00
Do you really want to reduce LogVol00? [y/n]: y
sh-3.2# exit
インストールCDを抜く。


起動後、縮小されたか確認。
[root@centos ~]# lvdisplay /dev/VolGroup00/LogVol00
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID xxxxxxxxxxxxxxxxxxxxxxx
LV Write Access read/write
LV Status available
# open 1
LV Size 135.00 GB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0


[root@centos ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 22
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 148.94 GB
PE Size 32.00 MB
Total PE 4766
Alloc PE / Size 4382 / 136.94 GB
Free PE / Size 384 / 12.00 GB ←空き容量 12G
VG UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

文字コード変換

前回のエントリで行ったWindowsCentOSのデータ同期にて
デフォルトの文字コードが違うため以下の処理を行う。


1)cwRsyncでのデータ同期
2)同期されたディレクトリ内のファイルを[nkf -g]で文字コードを調べる
3)Shift-JISのものを抜き出しeucに変換する


で作成したシェルが以下
[mojicode.sh]
#! /bin/bash
find /var/tmp/ -type f | while read f; do
if [ `nkf -g $f` = "Shift_JIS" ];
then
nkf -e --overwrite $f
echo $f
fi
done

cwRsync+sshでwindowsからCentOSにデータ同期

Windows上にあるデータをcwRsyncを利用してバッチ処理でデータ同期を行う。
バッチ処理で行うためパスフレーズを入力せずにデータ同期できるように認証鍵を利用して行う。


・環境
データ同期先
CentOS5.2
データ同期元
Windows Vista(XP) + cwRsync


○CentOS5.2に以下を設定
1) 認証鍵の作成、設定
root# ssh-keygen -t rsa


Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [enter]
Enter passphrase (empty for no passphrase):[enter]
Enter same passphrase again:[enter]
Your identification has been saved in test.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@localhost


root# cd
root# chmod 700 ./.ssh
root# chmod 600 ./.ssh/*
root# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


2) sshd.confの設定
root# vi /etc/ssh/sshd_config


以下内容を変更


※コメントを外す
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
※以下行を追加
AllowUsers root(root権限での場合、環境に合わせて変更)


root# service sshd restart


3)認証鍵ファイルをwindowsにコピー
root# cd ~/.ssh
root# ./id_rsawindowsの任意のフォルダにコピー


Windowsに以下を設定
1)cwRsyncをインストール


2)動作確認
コマンドプロンプト上にて
c:\>cd c:/Program Files/cwRsync/bin
c:\>rsync.exe -rv -e "ssh-i /cygdrive/c/[id_rsaフォルダパス]/id_rsa" "/cygdrive/c/同期元フォルダパス" root@xxx.xxx.xxx.xxx:[同期先ディレクトパス]


3)2で動作確認が取れれば2の内容をxxx.batに記載しタスクスケジューラにxxx.batを登録