以前、チラッと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)
- LV
- vgdata(VxWjQg-yXOm-i9vg-MCZs-P8rs-XfpU-wDKKOE)
- LV
- lvdata
- PV
- /dev/sda1 (vkYyJd-YMLp-QEL2-Rhx9-Ydj8-Owtx-crp2JJ)
- LV
新しいディスクを接続する
旧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に記載します。