一昨年の春に買って、当初は初期不良っぽいトラブルもあって手元にない時期がずいぶんあったけど、だいたい1年ぐらい前にちゃんとGentooを入れて以来りっぱなLinuxマシンとして稼働してきたThinkPad X1 Carbon (2G)。
Windowsはイラネーダロな勢いでディスクスペースをまるごとGentooに割り当てていたワケだけど、せっかくQtがWindowsPhoneをサポートしているから何かしてみようにもWindowsの開発環境がない・・・
ま、開発って言ってもマトモなアプリが作れるスキルがあるワケでもなく、ちょこちょこっと動かしてみたいだけなので、新しいPCを買いたいという衝動をなんとか抑え込んで今一度X1 CarbonにWindowsな環境を取り戻してみることにした。
いろいろトライしながらやっててほとんど記録取ってないので、具体的な情報じゃないからそのつもりで。←誰に言ってるんだ?
あ、そうそう、同じ環境で使ってるヒトなんてそうそう居ないと信じてるけど、真似して壊れてもおいらは責任負えないからよろしくね←おやくそく。
1. とりあえずバックアップ
いろいろ細かくパーティション切るのは面倒くさかったので、現状でパーティションは3つだけ。
- efi
- swap
- rootfs
なのでrootfsだけバックアップすればいい。
gentooのインストール時に使ったSystemRescueCD(efi対応。どっかのサイトを参考にして作ったんだけど、どこだったかなぁ・・・??)でブートして、/dev/sda3を/mnt/gentooに、バックアップ用のメディア(今回はTranscend製128GBの外付けSSD)を/mnt/windowsにマウントして、"tar cvjpf"でtarballに固めておいた。
% mount /dev/sda3 /mnt/gentoo
% mount /dev/sdc1 /mnt/windows
% cd /mnt/gentoo
% tar cvpjf ../windows/rootfs.tar.bz2 .
2. リカバリ
そもそも今の構成のままrootfsのパーティションを縮小して空けたスペースにリカバリなんていう事ができれば良かったんだけど、それはできないっぽかった。(新規インストールならできたかもしれない・・・)
というワケで先にWindows環境を作り直す。リカバリは購入直後に作ったリカバリメディアから「出荷時状態」に戻すだけ。楽ちん。
3. Linux用ディスクスペースの確保
Windows 8.1な環境を再構築して「ディスクの管理」から状態を確認したところ以下の4つの領域に分けられていた。
- 復旧用のスペース?
- efi領域
- Windows用のメインスペース
- OEM用?
4つめの領域の用途がよく解らないけど、多分リカバリイメージを入れてあった領域じゃないかな。リカバリメディアを既に作成しているせいか、中身が入っているように見えない。
いずれにしても
ここら辺りを参考に「ディスクの管理」画面の3の領域を右クリックして「領域の縮小」を選択し、メインの領域が約100GBぐらいになるように調整。すぐに適用されて、ディスクスペースが100GBぐらいになる。最近のWindowsは割と優秀だな。
4. Gentoo環境を復旧する。
SystemRescueCDでブートしてGentoo用の領域を確保する。
partedには以下の領域が示されている。(確かこんな順番だった)
- 復旧用?
- efi領域
- 「領域の縮小」で削り出した空きスペース
- Windows用のメインスペース
- OEM用?
"rm"コマンドで3と5を削り、swapとrootfsの領域を作る。efi用の領域は既にあるので作り直す必要はない。
% parted -a optimal /dev/sda
(parted) rm 5
(parted) rm 3
(parted) mkpart primary xxxxx xxxxx
(parted) mkpart primary xxxxx -1
(parted) name 5 swap
(parted) name 6 rootfs
(parted) q
% mkswap /dev/sda5
% mkfs.ext4 /dev/sda6
あとは新たなrootfs領域である/dev/sda7を/mnt/gentooに、1で使ったバックアップメディアを/mnt/windowsにマウントして、"tar xvjpf"で/mnt/gentoo以下にファイルを書き戻す。(通常のGentooのインストールでやるtarballの書き込みと同じ)
% mount /dev/sda6 /mnt/gentoo
% mount /dev/sdc1 /mnt/windows
% cd /mnt/gentoo
% tar xvjpf ../winodws/rootfs.tar.bz2
ファイルの展開が終わったら/dev/sda2(リカバリした時にできたefi領域)を/mnt/gentoo/boot/efiにマウントし、proc、/sys、/devを/mnt/gentoo以下にマウント(バインド)してchrootする。
% mount /dev/sda2 /mnt/gentoo/boot/efi
% mount -t proc proc /mnt/gentoo/proc
% mount --rbind /dev /mnt/gentoo/dev
% mount --rbind /sys /mnt/gentoo/sys
% cd /mnt/gentoo
% chroot /mnt/gentoo /bin/bash
% source /etc/profile
まずはfstabの中身を修正しておこう(efi、swap、rootfsに割り当てるパーティションのUUIDを適切なものに書き直す)。
おわったらefiにgrubを登録する。
% grub2-install --target=x86_64-efi --efi-direcotry=/boot/efi --bootloader-id=Gentoo
% grub2-mkconfig -o /boot/grub/grub.cfg
旧来の「デュアルブート環境」であれば、ここら辺りでgrubからWindowsを起動できるよう設定するところなんだけど、今回ここの部分はefiが担当してくれるので何も考えずにGentooが起動するように設定すればいい。
5. リブート
再起動してLenovoのロゴが表示されたら「Enter」→「F12」で起動ディスクのセレクションができる。ここに「Gentoo」と「Windows Boot Manager」が仲良く並んでいるはずなので、起動したい方を選ぶ。
後からGentooを登録した(しなおした)せいかGentooの方がリストの上に居るので、デフォルトではGetnoo、ブートセレクトすればWindowsという状態になっている。
ここのところは「最後に選択した奴が一番上に来る」とかして欲しいところだなーと、密かに思ったりしている・・・というのも、この後Windows 8.1をWindows 10にアプデしたんだけど、何度か再起動がかかった時にうっかり放置していつのまにかGentooの画面になってる・・・みたいなことがあった。ちょっと勘弁してほしかったりする・・・
(まぁ、今考えたらインストールしている間だけでもブートの優先順位変えればよかったのかもだけど、どうやって変えるのか調べてないし、終わったからまぁいいや←ぉぃ)
6. ってことで
無事にデュアルブートになった。
Windows 10へのアップグレードでは上に書いた通り再起動をずっと監視してなきゃいけなかったり、アップグレード後にgrubがエラー吐くようになったのでブートローダを再インストールしたりと若干バタバタしたけど、現在は概ね問題なく稼働中。ディスクスペースはWindows 10が100GB、Gentooが140GBぐらいの割り当てだけど、まぁなんとか足りてる感じ。
いろいろ試しながら確認しながら作業したから、結局たったこれだけの作業に丸一日かかってしまってちょっと疲れたけど、せっかく手元にLumiaが居るのでまぁぼちぼちいろいろやってみようと思ってる。
あー・・・でもつかれたなー・・・