最近のストレージは、ディスクボリュームのデータ静止点をスナップショットにて即座に取得する機能が備わっている。さらにそのスナップショットを使って別のボリュームをコピー (クローンともいう) することも簡単にできる。これらのスナップショットの機能は、個人向けのQNAPのNASやFreeNASでさえも使用できる機能となっている。
ただし、スナップショットからコピーしたボリュームは原則ストレージ上でファイルの中身を確認することができないため、一度ファイルシステムを閲覧できるサーバにマウントする必要がある。
Windows Serverであれば深く考えずにコピーしたディスクを接続するだけで問題なくマウントできる。しかし、RHELの場合は、LVMやXFSを使用している関係から、ひと手間が必要となる。
今回は、RHELの環境において、コピーしたディスクを別のマウントポイントにマウントするための手順を記載する。
なお、コピーしたディスクを別のサーバにマウントする手順は以下を参照すること。
環境
- 仮想環境 : ESXi 6.7
- OS : RHEL 7
- ディスク : OSインストール領域 /dev/sda2 16GB
- 複製ディスク : /dev/sdb2
なお、複製したディスクは、ESXiのvmkfstools
を使用して作成した。参考までに実行コマンドを記載しておく。
# vmkfstools -i /vmfs/volumes/ssd_local_02/rhel7/rhel7.vmdk /vmfs/volumes/ssd_local_02/rhel7/rhel7-clone.vmdk
Destination disk format: VMFS zeroedthick
Cloning disk '/vmfs/volumes/ssd_local_02/rhel7/rhel7.vmdk'...
Clone: 100% done.
コピーしたディスクは以下の通りUUIDが同じとなっている。
# vmkfstools -J getuuid /vmfs/volumes/ssd_local_02/rhel7/rhel7.vmdk
UUID is 60 00 C2 97 d9 eb af 77-9a b3 ed 24 0e 90 3b 52
# vmkfstools -J getuuid /vmfs/volumes/ssd_local_02/rhel7/rhel7-clone.vmdk
UUID is 60 00 C2 9c 45 ba 73 2a-f0 2e 18 ca 9b db 42 42
なお、今回はvmdkファイルのUUIDが重複していても仮想マシンに既存のディスクとして問題なく追加することができたが、もし失敗する場合は、以下コマンドでUUIDを変更してリトライするとよいだろう。
# vmkfstools -J setuuid /vmfs/volumes/ssd_local_02/rhel7/rhel7-clone.vmdk
コピーしたディスクをマウントする手順
1. ディスクの状態確認
ディスクの状態確認として、PV、VG、LVの状態をそれぞれ確認してみる。PVの情報が重複していることにより、「duplicate PVs were found」のメッセージが表示されていることがわかる。
# pvs
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: Not using device /dev/sdb2 for PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey.
WARNING: PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey prefers device /dev/sda2 because device is used by LV.
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- <15.00g 0
# vgs
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: Not using device /dev/sdb2 for PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey.
WARNING: PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey prefers device /dev/sda2 because device is used by LV.
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <15.00g 0
# lvs
WARNING: Not using lvmetad because duplicate PVs were found.
WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: Not using device /dev/sdb2 for PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey.
WARNING: PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey prefers device /dev/sda2 because device is used by LV.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 13.39g
swap rhel -wi-ao---- 1.60g
2. vgimportclone
にて重複したVGをインポート
重複したLVM情報を修正し使用できるようにするコマンドとしてvgimportclone
がある。以下、man vgimportclone
の結果から引用となるが、「vgimportclone
は、ハードウェアスナップショットによって既存のPVから作成したことで重複しているPVから、VGをインポートする」と記載されており、完全に今回の用途のみに特化したコマンドとなる。
DESCRIPTION
vgimportclone imports a VG from duplicated PVs, e.g. created by a hardware snapshot of existing PVs.A duplicated VG cannot used until it is made to coexist with the original VG. vgimportclone renames the VG associated with the specified PVs and changes the associated VG and PV UUIDs.
実際にvgimportclone
を実行してみよう。UUIDが変わることを確認するため、前後でblkid
コマンドを実行している。
# blkid | grep UUID | grep sdb2
/dev/sdb2: UUID="FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey" TYPE="LVM2_member"
# vgimportclone /dev/sdb2
WARNING: Not using device /dev/sdb2 for PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey.
WARNING: PV FbbJX5-u5fM-JLHS-nV4k-2kEn-k1CO-d9fUey prefers device /dev/sda2 because device is used by LV.
# blkid | grep UUID | grep sdb2
/dev/sdb2: UUID="z6QKgZ-kaFi-egjF-0GBo-cLHd-fmKc-HNb6ZP" TYPE="LVM2_member"
vgimportclone
を実行したことによって重複していたPVのUUIDの変更とVG名が修正 (末尾に"1"が付与) されており、LVM情報を出力した際に表示されていた警告メッセージも解消されていることがわかる。
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- <15.00g 0
/dev/sdb2 rhel1 lvm2 a-- <15.00g 0
# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <15.00g 0
rhel1 1 2 0 wz--n- <15.00g 0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 13.39g
swap rhel -wi-ao---- 1.60g
root rhel1 -wi------- 13.39g
swap rhel1 -wi------- 1.60g
3. VGのアクティブ化
vgimportclone
を実行後のVGは非アクティブとなっている。非アクティブとなっていることは、vgdisplay -A
で表示されないことで確認できる。
# vgdisplay -A
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
~(以下略)~
VGを使用できるようにするため、以下コマンドでアクティブにする。
# vgchange -ay rhel1
2 logical volume(s) in volume group "rhel1" now active
再度vgdisplay -A
で確認すると、VGが表示される (アクティブ化されている) ことがわかる。
# vgdisplay -A
--- Volume group ---
VG Name rhel1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
~(中略)~
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
~(以下略)~
4. xfsファイルシステムのUUID変更
RHEL 7以降は標準でXFSが使用されているが、XFSにもUUIDが存在しており、重複したままではマウントすることができない。XFSのUUID変更は、xfs_admin -U generate <ストレージデバイス>
にて行う。
# xfs_admin -U generate /dev/mapper/rhel1-root
Clearing log and setting UUID
writing all SBs
new UUID = aea68ec1-63cc-445a-90d2-a37f2b0df0c9
上記コマンドを実行した際に、以下エラーで失敗する場合がある。
# xfs_admin -U generate /dev/mapper/rhel1-root
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_admin. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
いろいろメッセージが書いてあるが、記載されている通り、xfs_repair -L
を使うことで対処する。問題なく修復できたら、再度xfs_admin
コマンドにてUUID変更を実施すればよい。
# xfs_repair -L /dev/mapper/rhel1-root
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
ALERT: The filesystem has valuable metadata changes in a log which is being
destroyed because the -L option was used.
- scan filesystem freespace and inode maps...
agi unlinked bucket 27 is 422747 in ag 1 (inode=4617051)
agi unlinked bucket 30 is 422750 in ag 1 (inode=4617054)
sb_fdblocks 1350116, counted 1358308
- found root inode chunk
~(中略)~
Phase 7 - verify and correct link counts...
Maximum metadata LSN (7:9383) is ahead of log (1:2).
Format log to cycle 10.
done
5. マウントして確認
ここまで対処することで、ようやくファイルシステムをマウントすることができるので、実際にマウントしてファイルが閲覧できることを確認してみよう。
# mount /dev/mapper/rhel1-root /mnt/
# ls -l /mnt/
合計 12
lrwxrwxrwx. 1 root root 7 8月 30 16:25 bin -> usr/bin
drwxr-xr-x. 2 root root 6 8月 30 16:24 boot
drwxr-xr-x. 2 root root 6 8月 30 16:24 dev
drwxr-xr-x. 77 root root 8192 8月 30 16:31 etc
drwxr-xr-x. 2 root root 6 12月 15 2017 home
lrwxrwxrwx. 1 root root 7 8月 30 16:25 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 8月 30 16:25 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 12月 15 2017 media
drwxr-xr-x. 2 root root 6 12月 15 2017 mnt
drwxr-xr-x. 2 root root 6 12月 15 2017 opt
drwxr-xr-x. 2 root root 6 8月 30 16:24 proc
dr-xr-x---. 2 root root 135 8月 30 16:29 root
drwxr-xr-x. 2 root root 6 8月 30 16:24 run
lrwxrwxrwx. 1 root root 8 8月 30 16:25 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 12月 15 2017 srv
drwxr-xr-x. 2 root root 6 8月 30 16:24 sys
drwxrwxrwt. 9 root root 202 8月 30 16:31 tmp
drwxr-xr-x. 13 root root 155 8月 30 16:25 usr
drwxr-xr-x. 19 root root 267 8月 30 16:28 var
まとめ
以上で、RHELにおいてコピーしたディスクをマウントすることができた。しかし、実施しなければならない手順が多く、vgimportclone
のコマンドの存在を知らないとそもそもマウントさせることも難しいので、可能なら、コピーしたディスクは同じOSではなく別のOSなどにマウントする方が、手順としては簡単になると感じた。
0 件のコメント:
コメントを投稿