[Linux]ddを使用せずLVMのHDD交換方法

1.環境

OS : CentOS Stream release 8 [4.18.0-348.el8.x86_64]
※KVM上で動作

2.やること

LVM構成のLinuxで新しいHDDに交換する。
同じ容量、移行に多くのの時間をかけることができれば、ddコマンドを利用するのが単純で楽だが、少し手間が増えるがLVMの機能を利用すると停止時間を短く移行できる可能性がある。

LVMを使用していないシステムとは違い、リカバリディスクは不要

前提として、移行対象のマシンは停止できることとGrub2を利用していること

3.手順

  1. 移行対象のマシンをシャットダウンし、移行先のHDDを接続する
  2. 通常通り起動する
  3. 移行先のHDDのパーティションを切る
  4. 移行先の/boot用パーティションをフォーマットする
  5. 移行先の/bootをマウントする
  6. 移行元から移行先へ/boot以下をコピーする
  7. /etc/fstabがUUIDで記載されている場合移行先のHDDのものに修正する
  8. 移行先HDDをLVMに追加し移行操作を行う
  9. 再起動する
  10. grubのconfigファイルを生成する
  11. 移行先HDDにgrubをインストールする
  12. シャットダウンし、移行元ディスクを取り除いたら起動確認を行う

以上

4.手順詳細

1.移行対象のマシンをシャットダウンし、移行先のHDDを接続する

2.通常通り起動する

3.移行先のHDDのパーティションを切る

fdisk, parted, gdiskなどを利用して移行先HDDのパーティションを作成する。とくに構成を変える必要がなければ移行元と揃えるのが楽

・移行元のパーティション情報

# fdisk -l /dev/vda

・移行先のパーティション作成

[root@develop ~]# fdisk /dev/vdb

fdisk (util-linux 2.32.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

デバイスには認識可能なパーティション情報が含まれていません。
新しい DOS ディスクラベルを作成しました。識別子は 0x1ef41471 です。

コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1): 
最初のセクタ (2048-268435455, 既定値 2048): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-268435455, 既定値 268435455): 2099199

新しいパーティション 1 をタイプ Linux、サイズ 1 GiB で作成しました。

コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (1 プライマリ, 0 拡張, 3 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (2-4, 既定値 2): 
最初のセクタ (2099200-268435455, 既定値 2099200): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2099200-268435455, 既定値 268435455): 

新しいパーティション 2 をタイプ Linux、サイズ 127 GiB で作成しました。

コマンド (m でヘルプ): a
パーティション番号 (1,2, 既定値 2): 1

パーティション 1 の起動フラグを有効にしました。

コマンド (m でヘルプ): t
パーティション番号 (1,2, 既定値 2): 
16 進数コード (L で利用可能なコードを一覧表示します): 8e

パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

[root@develop ~]# fdisk -l /dev/vdb
ディスク /dev/vdb: 128 GiB, 137438953472 バイト, 268435456 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x1ef41471

デバイス   起動 開始位置  終了位置    セクタ サイズ Id タイプ
/dev/vdb1  *        2048   2099199   2097152     1G 83 Linux
/dev/vdb2        2099200 268435455 266336256   127G 8e Linux LVM

4.移行先の/boot用パーティションをフォーマットする

# mkfs.xfs /dev/vdb1

5.移行先の/bootをマウントする

# mount /dev/vdb1 /mnt

6.移行元から移行先へ/boot以下をコピーする

cp、rsyncなどを利用してコピー、cp の場合は -p 、rsync の場合は -a オプションなどを利用して所有者、パーミッションなどが変わらないようにする。

# cp -p /boot/ /mnt/

or

# rsync -avu --delete --progress /boot/ /mnt/

7./etc/fstabがUUIDで記載されている場合移行先のHDDのものに修正する

# blkid /dev/vdb1

8.移行先HDDをLVMに追加し移行操作を行う

# vgs
VG #PV #LV #SN Attr VSize VFree
cs 1 3 0 wz--n- <127.00g 0

# pvcreate /dev/vdb2 # vgextend VGNAME /dev/vdb2

# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 cs lvm2 a-- <127.00g 0
/dev/vdb2 cs lvm2 a-- <127.00g <127.00g
# pvmove /dev/vda2 /dev/vdb2
/dev/vda2: Moved: 0.07%
/dev/vda2: Moved: 0.36%
/dev/vda2: Moved: 0.63%
/dev/vda2: Moved: 0.88%
:
:
/dev/vda2: Moved: 99.81%
/dev/vda2: Moved: 100.00%

# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 cs lvm2 a-- <127.00g <127.00g
/dev/vdb2 cs lvm2 a-- <127.00g 0
# vgreduce VGNAME /dev/vda2
# pvremove /dev/vda2

9.再起動する

# reboot

10.grubのconfigファイルを生成する

# grub2-mkconfig -o /boot/grub2/grub.cfg

11.移行先HDDにgrubをインストールする

# grub2-install /dev/vdb

12.シャットダウンし、移行元ディスクを取り除いたら起動確認を行う

無事起動確認完了

以上

[Linux]ddを使用せずLVMでないHDD交換方法

1.環境

OS : CentOS Linux release 7.9.2009 (Core) [3.10.0-1160.45.1.el7.x86_64]
※KVM上で動作

2.やること

LVM構成していないHDDを新しいHDDに交換する。
同じ容量、移行に多くのの時間をかけることができれば、ddコマンドを利用するのが単純で楽だが、パーティションの構成変更や、ファイルシステム変更、容量の少ないHDDに移行は難しい。これらを実現するためにddコマンドを利用しないHDD移行手順について説明する。

前提として、移行対象のマシンは停止できることとGrub2を利用していること

3.手順

  1. 移行対象のマシンをシャットダウンし、移行先のHDDを接続する
  2. インストーラディスクを利用してメンテナンスモードやライブモードで起動する
    ※インストーラーディスクはLinuxが起動できればなんでもいいが、できれば同じディストリビューション、バージョンがあると望ましい
  3. 移行先のHDDのパーティションを切る
  4. 移行先のパーティションをフォーマットする
  5. 移行元、移行先をそれぞれマウントする
    ※移行元は読込専用でマウントするのが望ましい
  6. 移行元から移行先へコピーする
  7. 5,6をパーティションの数だけ繰り返す
  8. /etc/fstabがUUIDで記載されている場合移行先のHDDのものを修正する
  9. シャットダウンし、移行元HDDを取り外す
  10. 2と同様、インストーラディスクを利用してメンテナンスモードやライブモードで起動する
  11. 移行先HDDを/mnt以下にfstab通り+αをマウントする
    ※Swapは不要
  12. chrootし、grubのconfigファイルを生成する
  13. 移行先HDDにgrubをインストールする
  14. シャットダウンし、インストーラーディスクを取り除いたら起動確認を行う

以上

4.手順詳細

1.移行対象のマシンをシャットダウンし、移行先のHDDを接続する

2.インストーラディスクを利用してメンテナンスモードやライブモードで起動する

インストーラーディスクはLinuxが起動できればなんでもいいが、できれば同じディストリビューション、バージョンがあると望ましい。
例ではCentOS7のインストーラディスクを利用して説明する。

・Troubleshootingを選択する

・Rescue a CentOS systemを選択

・マウントは手動で行うので 3 を選択肢 shell に移動する

・キーマップが英字になっているので、日本語に変更すると作業しやすい。

# localectl set-keymap jp106

3.移行先のHDDのパーティションを切る

fdisk, parted, gdiskなどを利用して移行先HDDのパーティションを作成する。とくに構成を変える必要がなければ移行元と揃えるのが楽

・移行元のパーティション情報

# fdisk -l /dev/vda

・移行先のパーティション作成

4.移行先のパーティションをフォーマットする

例では、/dev/vdb3のみ swap 、レガシーBootの場合はその他のパーティションは任意のファイルシステムで問題ない。しかし、UEFIの場合はbootパーティションはfatにする必要がある。

# mkfs.ext4 /dev/vdb1
# mkfs.ext4 /dev/vdb2
# mkswap /dev/vdb3

5.移行元、移行先をそれぞれマウントする

※移行元は読込専用でマウントするのが望ましい

# mkdir /mnt/vda
# mkdir /mnt/vdb
# mount -r /dev/vda1 /mnt/vda
# mount /dev/vdb1 /mnt/vdb

6.移行元から移行先へコピーする

cp、rsyncなどを利用してコピー、cp の場合は -p 、rsync の場合は -a オプションなどを利用して所有者、パーミッションなどが変わらないようにする。

# cp -p /mnt/vda/ /mnt/vdb/

or

# rsync -avu --delete --progress /mnt/vda/ /mnt/vdb/

7.5,6をパーティションの数だけ繰り返す

※Swapは除く

8./etc/fstabがUUIDで記載されている場合移行先のHDDのものを修正する

blkidコマンドで調べたUUIDでfstabのUUIDの箇所を修正する。

# blkid /dev/vdb1
# blkid /dev/vdb2
# blkid /dev/vdb3

例:fstabにblkidコマンドの結果を貼り付けた結果

・以下のように書き換える

9.シャットダウンし、移行元HDDを取り外す

 

10.2と同様、インストーラディスクを利用してメンテナンスモードやライブモードで起動する

手順2を参照

11.移行先HDDを/mnt以下にfstab通り+αをマウントする

※Swapは不要

・ここの例では以下のようにマウントする

# mount /dev/vda2 /mnt
# mount /dev/vda1 /mnt/boot

・proc, dev, sysをマウント、バインドする

# mount -t proc proc /mnt/proc
# mount -B /dev /mnt/dev
# mount -B /sys /mnt/sys
# mount -B /run /mnt/run

12.chrootし、grubのconfigファイルを生成する

・レガシーBootの場合、EFIの場合はgrubのconfigファイルの場所が違うので注意

# chroot
# grub2-mkconfig -o /boot/grub2/grub.cfg

13.移行先HDDにgrubをインストールする

※レガシーBootの場合

# grub2-install /dev/vda

エラーなし「Installation finished. No error reported.」と表示されれば問題なし

14.シャットダウンし、インストーラーディスクを取り除いたら起動確認を行う

無事起動確認完了

 

以上