2020年9月20日日曜日

【RHEL】コピーしたディスクを自分自身にマウントする手順

最近のストレージは、ディスクボリュームのデータ静止点をスナップショットにて即座に取得する機能が備わっている。さらにそのスナップショットを使って別のボリュームをコピー (クローンともいう) することも簡単にできる。これらのスナップショットの機能は、個人向けの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 件のコメント:

コメントを投稿

人気の投稿