Ubuntuで旧PCから新PCへディスクをお引越し

以前、チラッとPCを買い替えたことをお話しましたが、旧PCを完全に使わなくなったので廃棄します。

その前に、旧PCで使っていたディスクを新PCで使えるようにお引越しします。

旧PCのディスクを新PCの増設に使う

前提知識

他のUbuntuで使ってたディスクを新しいPCにつないでも大丈夫?

大丈夫。

ディスク自体は先頭1ブロックと最終ブロックがMBRとかGPTとか特殊な使われ方をするだけで、物理的には単なるディスクとしてOSに認識されます。

MBRやGPT以外の部分にVGやPVの情報が書き込まれていたりしますが、Unix系のOSは勝手に解釈してVGに追加...なんてことはしません。

vgscanコマンドを実行すれば、VGやPVの部分を読み込んで自動でvgの登録をしてくれたりします。

ただ、この方法は推奨しません。移行前と移行後のPCの両方で同じVG名を使っていたりすると良からぬご動作をすることがあるので。

旧OS側からブートしたりしない?

しません。

最近のUbuntuは賢くて、他のディスクにブートローダを発見すると「他にもブートイメージがあるみたいだけどどっちで起動する?」的な画面を出してくれます。

気にしておくことは?

旧PCで使用していたディスクの種類を確認しておきましょう。/dev/sdxなどのデバイスパスがわからなくなるので。

また、作業前に現在のvgdisplay -vの結果を取得しておきましょう。特にGUIDは重要です。VG名がかぶった際に区別ができなくなるので。

設計

VG構成

SSDとHDDを同じVGにするのはよくありません。別のVGにしましょう。
SSD同士、HDD同士でも違う型名やスピードのデバイスを同じVGに入れるのは推奨しません。性能が違うものを混ぜると全体のパフォーマンスが落ちるので。

どうしても1つのVGに複数の仕様がディスクを追加する際は、LVMを作成する際にPV名を指定しましょう。

今回の移行設計

私の設計ポリシーは以下です

  • OSとデータは別ディスクに分ける。(OSが壊れてもデータは他のPCで復旧させる。逆も然り。)
  • OSとデータは別のVGにする。(同上)
  • データの保護はミラーで。同じ型名のディスクを調達できない場合はバックアップで。
  • バックアップはOS,データとは別のVGにする。

上記を踏まえて以下のVG構成にしました。

  • vgubuntu ・・・ OS用VG。新PCのSSD。
  • vgdata ・・・データ用VG。新PCのHDDと旧PCのSSD。LVMで使い方を分ける
    • lvdata … 新PCのHDD(1TB) データの保存用
    • lvwork ... 旧PCのSSD(256GB) 動画などのデータの編集用
  • vgbackup ・・・バックアップ用VG 定期的にlvdataからrsyncでコピー

vgdataにHDDとSSDが混ざってますがやむなし。lvを分けることで性能の低下を回避します。

お引っ越し作業

手順の概要

  • 作業前の状態確認
    • 主にVG、LV、PVの構成とUUIDを確認する
  • vgdataの重複を解消する(旧PCのvgdataをvgbackupにリネーム)
    • VG名を変更
    • VGをアクティブ化
  • vgdataを拡張する(旧PCのSSDをvgdataに追加し、LVに割り当てる)
    • 旧PCのVG(ubuntu-vg)を削除する
    • 旧PCのSSDをvgdataに追加する
    • 追加したSSDを指定してLVを作成する

まずは現状確認

VGのUUIDを確認しておきます

$ sudo vgdisplay | grep -e "VG Name" -e "UUID"
  VG Name               vgubuntu
  VG UUID               6G4QkZ-MjzC-rHMo-WkDj-8YU2-w48c-uiDhHs
  VG Name               vgdata
  VG UUID               VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE

VGごとのLVMの構成も確認しておきましょう。

$ sudo vgdisplay -v vgubuntu | grep -e "LV [PNU]" -e "PV [NU]"
  LV Path                /dev/vgubuntu/root
  LV Name                root
  LV UUID                fRGya5-QMcI-Xobf-NEJF-Kf0j-0kue-wWW8Ai
  LV Path                /dev/vgubuntu/swap_1
  LV Name                swap_1
  LV UUID                EdoC6s-RkyM-brSH-KYAO-nCNC-3f1N-hLsLdN
  PV Name               /dev/nvme0n1p2     
  PV UUID               hOzO9D-DSTc-8KUU-IJsp-K25L-LETs-HyhVxj
 $sudo vgdisplay -v vgdata | grep -e "LV [PNU]" -e "PV [NU]"
  LV Path                /dev/vgdata/lvdata
  LV Name                lvdata
  LV UUID                ijIsVS-pPCi-l2Kv-M64m-KLIq-s6DI-FkTTVP
  PV Name               /dev/sda1     
  PV UUID               vkYyJd-YMLp-QEL2-Rhx9-Ydj8-Owtx-crp2JJ

上記で以下のとおりVG構成とUUIDがわかりました

  • vgubuntu (6G4QkZ-MjzC-rHMo-WkDj-8YU2-w48c-uiDhHs)
    • LV
      • root (fRGya5-QMcI-Xobf-NEJF-Kf0j-0kue-wWW8Ai)
      • swap_1 (EdoC6s-RkyM-brSH-KYAO-nCNC-3f1N-hLsLdN)
    • PV
      • /dev/nvme0n1p2 (hOzO9D-DSTc-8KUU-IJsp-K25L-LETs-HyhVxj)
  • vgdata(VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE)
    • LV
      • lvdata
    • PV
      • /dev/sda1 (vkYyJd-YMLp-QEL2-Rhx9-Ydj8-Owtx-crp2JJ)

新しいディスクを接続する

旧PCから取り出したディスクを新PCに接続して再起動します。

難なく起動しました。

新しいディスクの情報を収集する

先ほどと同じコマンドでVGの構成を確認します

$ sudo vgdisplay | grep -e "VG Name" -e "UUID"
  WARNING: VG name vgdata is used by VGs OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY and VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  VG Name               ubuntu-vg
  VG UUID               29fav1-7oB4-ZDud-hbX2-geV2-kEd5-r0b0QC
  VG Name               vgdata
  VG UUID               OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY
  VG Name               vgubuntu
  VG UUID               6G4QkZ-MjzC-rHMo-WkDj-8YU2-w48c-uiDhHs
  VG Name               vgdata
  VG UUID               VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKO

何ということでしょう! vgdataが2つに増えたせいで警告が出ています!(すっとぼけ)

OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY側のvgdataが増えているのであとで名前を変更しましょう。

ちなみに旧PCで使用していたubuntu-vgというブート用のVGは問題なく読み込めています。

めげずに他の情報も取得しましょう。

$ sudo vgdisplay -v vgubuntu | grep -e "LV [PNU]" -e "PV [NU]"
  WARNING: VG name vgdata is used by VGs OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY and VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  LV Path                /dev/vgubuntu/root
  LV Name                root
  LV UUID                fRGya5-QMcI-Xobf-NEJF-Kf0j-0kue-wWW8Ai
  LV Path                /dev/vgubuntu/swap_1
  LV Name                swap_1
  LV UUID                EdoC6s-RkyM-brSH-KYAO-nCNC-3f1N-hLsLdN
  PV Name               /dev/nvme0n1p2     
  PV UUID               hOzO9D-DSTc-8KUU-IJsp-K25L-LETs-HyhVxj
$ sudo vgdisplay -v ubuntu-vg | grep -e "LV [PNU]" -e "PV [NU]"
  WARNING: VG name vgdata is used by VGs OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY and VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  LV Path                /dev/ubuntu-vg/root
  LV Name                root
  LV UUID                HcP06H-Gdnl-JLBC-nTXN-z6W8-H17Q-4f2fLs
  LV Path                /dev/ubuntu-vg/swap_1
  LV Name                swap_1
  LV UUID                DZXsrR-w8e5-UID0-i3aP-wJKk-ftIR-tpYaiA
  PV Name               /dev/sdc1     
  PV UUID               Ub3fPf-3Udc-2UYW-AXrE-Ofxz-8MWu-QzoiIH
 $sudo vgdisplay -v vgdata | grep -e "LV [PNU]" -e "PV [NU]"
  LV Path                /dev/vgdata/lvdata
  LV Name                lvdata
  LV UUID                ijIsVS-pPCi-l2Kv-M64m-KLIq-s6DI-FkTTVP
  PV Name               /dev/sda1     
  PV UUID               vkYyJd-YMLp-QEL2-Rhx9-Ydj8-Owtx-crp2JJ
  WARNING: VG name vgdata is used by VGs OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY and VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  Multiple VGs found with the same name: skipping vgdata
  Use --select vg_uuid= in place of the VG name.
LV: コマンドが見つかりません
LV: コマンドが見つかりません
LV: コマンドが見つかりません
PV: コマンドが見つかりません
PV: コマンドが見つかりません

vgdataだけかぶって問題を起こしているので次の手順で修正します。

旧PCのvgdataをvgbackupにリネームする

vg名の変更はvgrenameを使います。変更前の名称にはGUIDを指定します。

新しく追加された方のvg(OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY)をvgbackupに変更します。

 $ sudo vgrename OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY vgbackup
  WARNING: VG name vgdata is used by VGs OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY and VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  Processing VG vgdata because of matching UUID OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY
  Volume group "OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY" successfully renamed to "vgbackup"

成功したようです。もう一度VG情報を見てみましょう。

$ sudo vgdisplay | grep -e "VG Name" -e "UUID"
  VG Name               ubuntu-vg
  VG UUID               29fav1-7oB4-ZDud-hbX2-geV2-kEd5-r0b0QC
  VG Name               vgbackup
  VG UUID               OjK1VE-Dbel-H8Oc-08Bp-NcAL-4abd-16oKLY
  VG Name               vgubuntu
  VG UUID               6G4QkZ-MjzC-rHMo-WkDj-8YU2-w48c-uiDhHs
  VG Name               vgdata
  VG UUID               VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE

vg名がvgbackupに変わったおかげで警告が消えました。

しかしこのままではvgbackupを利用できません。

ここまでの作業はあくまで物理ボリュームのPVヘッダを編集しただけなので、/dev/vgbackupというスペシャルファイルはまだ作られていません。

スペシャルファイルをつくるにはvgchangeでアクティベートしてあげる必要があります。

$ sudo vgchange -a y vgbackup
  1 logical volume(s) in volume group "vgbackup" now active
$ ls /dev | grep vg
ubuntu-vg
vga_arbiter
vgbackup
vgdata
vgubuntu

あとは好みでvgbackup内のLVを削除するなりの編集をしてマウントします。

旧PCのSSDで新PCのvgdataを拡張する。

旧PCから移設したubuntuv-vgからSSDを開放して、新PCのvgdataに追加します。

ただ、新PCのvgdataはHDDなので、このままだとSSDのブロックとHDDのブロックが混ざってしまい全体の性能が低下します。

そこで、追加したSSDは全てlvworkというLVに割り当ててしまいます。こうすることで新規にlvdataはHDDのみ、lvworkはSSDのみを利用する公正にできます。

まずは既存のubuntu-vgというVGを削除してPVを自由にしてあげます。

$ sudo vgremove ubuntu-vg
Do you really want to remove volume group "ubuntu-vg" containing 2 logical volumes? [y/n]: y
Do you really want to remove and DISCARD active logical volume ubuntu-vg/root? [y/n]: y
  Logical volume "root" successfully removed
Do you really want to remove and DISCARD active logical volume ubuntu-vg/swap_1? [y/n]: y
  Logical volume "swap_1" successfully removed
  Volume group "ubuntu-vg" successfully removed

途中、本当に消すか確認されるので上記のように全てyで回答します。

vgの削除が終わったらubuntu-vgで使われていたPV(/dev/sdc1)をvgdataに追加します。

vgへのPVの追加はvgextendを使います。

$ sudo vgextend vgdata /dev/sdc1
Volume group "vgdata" successfully extended
$ sudo vgdisplay -v vgdata | grep "PV Name"
  PV Name               /dev/sda1     
  PV Name               /dev/sdc1 

VGを拡張できたらSSD(/dev/sdc1)を指定して作業用のLV(lvwork)を作成します。

lvcreateでPV指定する際はVG名に続いてPV名(/dev/sdc1)を指定します。今回は100%割り当てるので -l 100%PVSも追加します。

併わせて、ファイルシステムとして使用できるようにext4でフォーマットします

$ $ sudo lvcreate -l 100%PVS -n lvwork vgdata /dev/sdc1
  Logical volume "lvwork" created.
$ sudo mkfs.ext4 /dev/vgdata/lvwork
mke2fs 1.45.7 (28-Jan-2021)
Discarding device blocks: done                            
Creating filesystem with 58606592 4k blocks and 14655488 inodes
Filesystem UUID: f0293bb1-9857-47be-931e-3315c2d39db7
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done  

初期化ができたらマウントしてみます。

マウントはmount /dev/vgdata/lvwork /workの様に指定します。

起動時に自動マウントさせる場合は/etc/fstabに記載します。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です