目次
(LVMから素のext4にしました)
概要
USBにインストールしたgrub2からLVMのLinuxを起動しLVMのハードディスクを換装したときの記録。ほとんど遭遇しないHDDの換装だが学習かねて頑張ってみた。役に立つ機会が来ればよいが、ブート周りはUEFI?というようなものに変わるようだし、今後役に立つ知識になるだろうか。今回限りになりそうな気もする。
LVMではファイルシステムを異なる物理ドライブ間で動かすことができる。ddもdump/restoreも使わず。またレスキューモード等ではなく、対象となるPCでネットしながらでも作業を行える点はお家PCでも重宝するはず。
ゴール
以下のようなパーティション構成の128GBHDDを1TBのHDDに換装した。OSはLinux Mint 18.1。
/boot /dev/sda1 (ext2)
/ /dev/mapper/mint–vg-root
作業の流れ
作業の流れ、といってもLVMの操作は詳しい他のサイトがある。私は「LVMのトラブルShooting☆Star(チガウ その2 [Linux(LVM/RAID/Storage)]」を参考にした。丁寧に書かれているので、ほとんどの作業はそちらを参考にした方が良い。(10年近くも前の記事だ。その間私もLVMを使っていたはずだが、換装や追加するような状況はほとんどなかったように思う。)
ただし、上記参考サイトではMBR、/boot があるドライブは、換装しようとするHDDとは別である点が、私の状況と異なっていた。私の場合はHDDはひとつしか接続しない。貧乏性なので、取り除いたHDDは別のマシンで使うという状況。
なので今回特別に行わなければならなかったのはUSBメモリインストールしたgrub2(以下ではレスキューgrub USBと言う)でLVMのシステムを起動させることだけだった。
全体の作業は以下のような感じ。
- 新HDDを接続
- レスキューgrub USBで起動(確認のため)
- 新HDDのパーティション設定
- オンラインでLVM操作(換装中のマシンで調べながら、新HDDにデータ移行)
- 不要になったHDDの取り外し
- レスキューgrub USBで起動。
- /boot/* を新HDDの/boot 以下にコピー。/etc/fstab 編集
- レスキューgrub USBで起動。新/bootがマウントされているはず。
- grubを新HDDのMBRに書き込む
- 再起動後、パーティションを伸長
作業詳細
レスキューgrub USBで起動
レスキューgrubの作り方はこちら(boot with grub)。
$ grub-install –root-directory=/media/USBDISK/ /dev/sdd
後になって、これがgrub2ではなく、その前のバージョンの説明だとわかったが、レスキューgrub USBとしてちゃんと動作した。後で気づいたが、レスキューgrub USBではなく、LinuxのOSインストールDVDとかUSBでもよかったのかもしれない。
シャットダウン後、新HDDを接続して起動してみる。
私が使っているPCのasrockのマザーボードでは、起動時にF11を押せばUSBからの起動を選択できた。
grub2の起動後、grub2のコマンドを手動で入力し、起動してみる。
/boot/grub/grub.cfg の中を覗いてみると(これもレスキューusb grubからcatできる) root=lvmid/(以下長い不規則な英数字が続く) やUUIDなどがあるが、一番簡単そうな root=/dev/mapper/mint–vg-root を試してみた。パーティションの指定方法はlsを実行すれば表示される。lvmパーティションは insmod lvmを実行するまでは表示されない。
set root=’lvm/mint–vg-root’
insmod lvm
insmod ext2
insmod gzio
insmod part_msdos
linux (hd1,msdos1)/vmlinuz〜 root=/dev/mapper/mint–vg-root ro
initrd (hd1,msdos1)/init 〜boot
オンラインでLVM操作
新HDDのパーティションは、以下のようにした。
/boot (ext2)
/ (LVM)
あとはLVM用のパーティションを参考サイトを見ながらLVMのグループに追加するだけである。
~ # pvcreate /dev/sdb2
Physical volume “/dev/sdb2” successfully created
~ # vgdisplay -v
(内容確認)
~ # vgextend mint-vg /dev/sdb2
Volume group mint-vg successfully extended
~ # vgdisplay -v
(内容確認)
Volume Group に新ディスクのパーティションが追加されたら、中身を移動。
~ # pvmove /dev/sda1
~ # vgreduce mint-vg /dev/sda1
vgreduceコマンドまでやったら、次は/bootとMBRの設定。
レスキューgrub USBで起動後(前でも良いかもしれない)/boot/* を新HDDの/boot 以下にコピー。/etc/fstab を編集し、新ドライブの/bootがマウントされるようにする。UUIDはblkidコマンドで知ることができる。
シャットダウンし、旧HDDを抜いて再起動。USBのgrubでboot。
あとはgrubのMBRへの書き込みを行う。update-grubがgrub.cfgを作り(更新し)、grub-installがMBRかPBRだかに書き込むコマンドなはず。
~ # grub-install /dev/sda
~ # grub-update
レスキューgrub USBを外して再起動。
パーティションの伸長
~ # lvextend -l +100%FREE /dev/mint-vg/root
~ # resize2fs /dev/mapper/mint–vg-root
とすればHDDの残りを全てルートパーティションに割り当てられる。少しだけ増やす場合は、
~ # lvextend -L+20G /dev/mint-vg/root
私は、少しだけ増やして、残りに別のlvを作りhomeとした。
~ # lvcreate -n mylv00 -l 100%FREE mint-vg
~ # mkfs.ext4 /dev/mint-vg/mylv00
~ # resize2fs /dev/mint-vg/mylv00
これを/homeにマウントするにはシングルユーザーモードに入って作業を行えばよいが、私はLinux Mintのインストーラーで起動してやった。/etc/fstabの編集も忘れずに。
/bootがUSB接続の場合
USBメモリに/bootの中身をコピーしてそこのvmlinuzやらinitrdやら読み込んで起動できるかどうかを試した。HDDが増設できないノートPCでも比較的楽に換装できるのではないだろうか。その場合は一旦USB接続のHDDに一旦ファイルシステムを移動して、HDD差し替え後にまた戻すということになると思う。レスキューgrub USBでも出来るが、専用のUSBメモリからLVMファイルシステムのOSをブートできるようにしておけば楽だろう。
/boot用USBメモリは ext2 だ。insmodされているから。しかし、レスキューgrub usbで先ほどと同様に起動してみたがkernel panicとなった。「 not syncing VFS .. 」らしい。どうやら、USBメモリ上のファイルが読めないらしい。そもそもinitrdとは何ぞやというような説明を読んでいくとおそらく、
insmod usb
すれば良さそうだということが分かった。grubディレクトリの下にある*.mod群を見たら(初めて見た)、usb.modはあるので、initrdを作りなおしたりする必要はなさそうだ。
で、無事起動することができた。
次は、/boot にUSBメモリをマウントして grub をインストールする。
深夜で眠くなってきたのでこれ以降はなんとなくの直感に従って作業した。
/boot なんか最初しか使わないであろうと思い、umount してみたら、特に何も障害は起きなかった。そして usbメモリを /bootにmount。
umount /boot
mount -t ext2 /dev/sdd1 /boot
次に /etc/fstab も変更。USBメモリを /boot としてマウントするよう、UUIDで指定する。
次はgrub。update-grubとgrub-installを実行する。
$ update-grub2
Generating grub configuration file …
Warning: Setting GRUB_TIMEOUT to a non-zero value when
GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.0-53-generic
Found initrd image: /boot/initrd.img-4.4.0-53-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done
/boot/grub/grub.cfg が更新されたようだが、insmod usbが追加されていない。
直接書いてやろうかと思ったが、/etc/default/grubか、/etc/grub.d/以下のファイルを弄れと注意書きがあったので、みてみると /etc/grub.d/00_header内に GRUB_PRELOAD_MODULES という変数があったので、/etc/default/grub に、
GRUB_PRELOAD_MODULES=”usb”
と書いて再度実行。
$ grub-install /dev/sdd
Installing for i386-pc platform.
Installation finished. No error reported.
再起動であるが、UEFIの画面にF2で入り起動の順番をUSBに変更して再々起動。
Mintのロゴが出るまでが数秒余計にかかるようになったが、無事成功。起動後、USBメモリが/boot にマウントされているのを確認。また、/dev/sdaのMBRから起動しているわけではないことを確認するため元/bootの/dev/sda1 の中身も別の場所に退避して起動てみたところちゃんと起動した。たぶん意図通りになっているのだろう。
ddからの換装
最初は、MBRやらgrubやらに詳しく無いのでddでやろうと思っていた。その際に参考にしようと思っていたサイトを紹介。雑誌にも記事が掲載されている方の説明です。いろいろな状況の作業手順が詳しく載っている。