LVM2 スナップショットのスナップショット機能を使った安全なファイルシステムバックアップの方法
スナップショット先のデータは変更されないので安全にバックアップが取得できる。
(ファイルシステムよりシステムよりのLVMの層でオリジナルデータと一緒に変更管理を行っているため、小容量で安全にできる)
○ 検証環境作成
# mke2fs -j /dev/testvg/testlv1
# mount /dev/testvg/testlv1 /mnt/test
# echo "aaaaaa" > /mnt/test/aaaaaa
# echo "bbbbbb" > /mnt/test/bbbbbb
○ lvスナップショット
※mysqlなどのデータベースならここでロックをかける。「FLUSH TABLES WITH READ LOCK;」
# lvcreate -s -L 32M -n snaptestlv /dev/testvg/testlv1
Logical volume "snaptestlv" created
※mysqlなどのデータベースならここでロックを解除。「UNLOCK TABLES;」
○ スナップショット取得検証
オリジナルデータの変更
# echo "cccccc" > /mnt/test/cccccc
# echo "bbbaaa" > /mnt/test/bbbbbb
○ スナップショットのデータの確認
# mkdir /mnt/snaptest
# mount /dev/testvg/snaptestlv /mnt/snaptest
# ls /mnt/snaptest
aaaaa bbbbbb lost+found
# cat /mnt/snaptest/bbbbbb
bbbbbb
# cat /proc/mounts
/dev/testvg/testlv1 /mnt/test ext3 rw 0 0
/dev/testvg/snaptestlv /mnt/snaptest ext3 rw 0 0
# umount /mnt/snaptest
# lvm lvdisplay testvg
--- Logical volume ---
LV Name /dev/testvg/snaptestlv
VG Name testvg
LV UUID yoJjdE-LVJE-LHN1-zrBu-u8bB-ra3R-ijQn0Z
LV Write Access read/write
LV snapshot status active destination for /dev/testvg/testlv1
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
COW-table size 32.00 MB
COW-table LE 8
Allocated to snapshot 0.29% ←スナップショット先lvの使用率 オリジナルデータを変更するほど増加
Snapshot chunk size 8.00 KB
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:5
○ スナップショット先のファイルシステムバックアップ
# dump 0f /tmp/testlv.dmp /dev/testvg/snaptestlv
# lvm lvremove /dev/testvg/snaptestlv
※スナップショット先のlvを消さないと、いつまでもlvの古いデータコピーを続ける
○ バックアップデータの検証
# rm /mnt/test/*
# cd /mnt/test
# restore rf /tmp/testlv.dmp
# ls
aaaaaa bbbbbb lost+found restoresymtable
# cat /mnt/test/bbbbbb
bbbbbb
(linux)LVM2の操作方法
いまさらながらLVM2の操作方法
○検証環境作成
# dd if=/dev/zero of=/var/tmp/mounttest1 count=128 bs=1024k
# ls -l /var/tmp/mounttest1
-rw-r–r– 1 root root 134217728 7月 12 09:29 /var/tmp/mounttest1
空いてるループバックデバイスの確認
# losetup /dev/loop0
loop: デバイス /dev/loop0 の情報を取得できません: そのようなデバイスやアドレスはありません
ループバックデバイスとループバックファイルを設定
# losetup /dev/loop0 /var/tmp/mounttest1
# losetup /dev/loop0
/dev/loop0: [fd00]:146028 (/var/tmp/mounttest1)
○ lvm用パーティション作成
fdisk でパーティションを作成。システムタイプをlinux LVMにする
# fdisk /dev/loop0
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-16, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-16, default 16):
Using default value 16
こんな感じで作成
/dev/loop0p1 128M
システムタイプの番号を確認
コマンド (m でヘルプ):l
8e Linux LVM
システムタイプを変更
コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました
コマンド (m でヘルプ): p
Disk /dev/loop0: 134 MB, 134217728 bytes
255 heads, 63 sectors/track, 16 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/loop0p1 1 16 128488+ 8e Linux LVM
書き込み
コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
警告: 領域テーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。
ということで、ループバックデバイスにはパーティションが設定できない模様。
そのまま/dev/loop0を使うことに。
本来ならここで、再起動
# shutdown -r now
○ 物理ボリューム(PV)作成
# lvm pvcreate /dev/loop0
Physical volume “/dev/loop0” successfully created# lvm pvdisplay /dev/loop0
— NEW Physical volume —
PV Name /dev/loop0
VG Name
PV Size 127.81 MB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID WqwiNW-FB83-Cjup-iMQt-YDgp-MSZm-z7py2I
○ ボリュームグループ(VG)作成
# lvm vgcreate testvg /dev/loop0 (-s サイズ でエクステントサイズ指定 エクステント数は最大65535個)
Volume group “testvg” successfully created
# lvm vgdisplay testvg
— Volume group —
VG Name testvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 124.00 MB
PE Size 4.00 MB
Total PE 31
Alloc PE / Size 0 / 0
Free PE / Size 31 / 124.00 MB
VG UUID txlZBT-9tGO-OHcH-eev4-1j8n-gdEa-0f8VVN
○ 論理ボリューム(LV)の作成
# lvm lvcreate -L 32M -n testlv1 testvg # 32MBの大きさのLVを作成
Logical volume “testlv1” created
# lvm lvcreate -l 8 -n testlv2 testvg # 4MBのエクステント8個分の大きさ(32MB)のLVを作成
Logical volume “testlv2” created
# lvm lvdisplay testvg
— Logical volume —
LV Name /dev/testvg/testlv1
VG Name testvg
LV UUID t67uqN-Pfua-RHd9-wDT4-S4wq-HbL9-faBLRU
LV Write Access read/write
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2— Logical volume —
LV Name /dev/testvg/testlv2
VG Name testvg
LV UUID jwFWPR-Jb0k-K0BC-lwBf-rD4L-Wuw8-R252GB
LV Write Access read/write
LV Status available
# open 0
LV Size 32.00 MB
Current LE 8
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:3
○ ファイルシステム作成
# mke2fs -j /dev/testvg/testlv1
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
8192 inodes, 32768 blocks
1638 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33554432
4 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
○ マウント
# mkdir /mnt/test
# mount /dev/testvg/testlv1 /mnt/test
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
31729 4509 25582 15% /mnt/test
# ls -l /dev/testvg/testlv1
lrwxrwxrwx 1 root root 26 7月 12 10:33 /dev/testvg/testlv1 -> /dev/mapper/testvg-testlv1
○ 論理ボリュームの削除
# lvm lvremove /dev/testvg/testlv2
Do you really want to remove active logical volume “testlv2”? [y/n]: y
Logical volume “testlv2” successfully removed
○ 論理ボリュームの拡張
書式
# lvm lvextend [ -l +エクステント数 | -L +バイト数 ] 論理ボリュームのパス
サイズの前に+をつけないと絶対的なサイズ指定になる(現在のサイズからの足し算にならない)
# lvm lvextend -l +1 /dev/testvg/testlv1
Extending logical volume testlv1 to 36.00 MB
Logical volume testlv1 successfully resized
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
31729 4509 25582 15% /mnt/test
※lvのサイズが大きくなるだけで、ファイルシステムのサイズは大きくならない
○ ファイルシステムの拡張
書式
# resize2fs -p 論理ボリュームのパス [新しい全体のサイズ]
# resize2fs -p /dev/testvg/testlv1 #サイズを指定しない場合論理ボリュームのサイズが自動指定される
resize2fs 1.35 (28-Feb-2004)
/dev/testvg/testlv1 is mounted; can’t resize a mounted filesystem!
※アンマウントしろ!と怒られる
※最近のLinuxでは、ファイルシステムの拡張はマウントしたまま resize2fsコマンドが実行できる。なので以降は不要。その影響で後に出てくるext2onlineコマンドもなくなっている。
# umount /mnt/test
# resize2fs -p /dev/testvg/testlv1
resize2fs 1.35 (28-Feb-2004)
Please run ‘e2fsck -f /dev/testvg/testlv1’ first.
※ファイルシステムのチェックをしてねとお願いされる
# e2fsck -f /dev/testvg/testlv1
e2fsck 1.35 (28-Feb-2004)
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/testvg/testlv1: 11/8192 files (9.1% non-contiguous), 5548/32768 blocks
# resize2fs -p /dev/testvg/testlv1
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/testvg/testlv1 to 36864 (1k) blocks.
Begin pass 1 (max = 1)
Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/testvg/testlv1 is now 36864 blocks long.
# mount /dev/testvg/testlv1 /mnt/test
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/testvg-testlv1
35567 4509 29584 14% /mnt/test
※ファイルシステムのサイズが大きくなっていることを確認
※ext3の場合はext2onlineコマンドでマウントしたまま(オンライン)でできる(最近のLinuxではこのコマンドはなくなっています。理由はresize2fsコマンドがマウントしたまま実行可能だからです。)
○ ボリュームグループの削除
# lvm vgremove testvg
(Windows Vista)IEでサイトを表示できなくなった!
2007年6月末ごろからIEでインターネットサイトを表示できなくなった!という事象について。
原因はズバリ、Norton Internet Security 2007(以下NIS2007)。
2007年6月末のWindows Vistaの更新でIEの実行モジュールが変更されたから。
NIS2007のファイアウォールには「プログラム制御」という機能があり、この機能にてアプリ(プログラム)がインターネットにアクセスできるかどうかを制御している。
この制御のアプリの識別に実行モジュールのハッシュ値?(指紋のようなもの)を使用している。
この値は実行モジュールが変更されると変化する。
よって、IEが識別されなくなりインターネットに接続を許可していいのか判断つかなくなる。
○解決法
「プログラム制御」の”Internet Explore”(登録パスはC:Program FilesInternet Exploreiexplore.exe)の設定を一度削除して登録しなおす。登録するときは「許可する」で。