linuxの後にwindowsをインストール

以前,ミスってwindows領域を消してしまったことがあったが,
(d:id:pneumaster:20080219:1203356562)
必要に迫られて再インストール.


Linuxの後にwindowsをインストールするのは(ある意味)初なので,
メモしておく.


今回,想定しているのは次の状態.
# というか後付け.
grubからNTLDRを呼び出すようにしたかったがよく分からず諦めた.

起動 -> NTLDR -+-> windows
              |
               `-> GRUB -> linux

ちなみに以前はよくある構成.

起動 -> GRUB -+-> windows
             |
              `-> linux

現在の状態.

# fdisk -l

Disk /dev/sda: 163.9 GB, 163928604672 bytes
255 heads, 63 sectors/track, 19929 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3824    30716248+   7  HPFS/NTFS
/dev/sda2            3825        3837      104422+  83  Linux
/dev/sda3            3838       19929   129258990   8e  Linux LVM
$ LANG=C df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                     123187084  75365780  41462676  65% /
/dev/sda2               101105     16605     79279  18% /boot
tmpfs                  1037408         0   1037408   0% /dev/shm


現行のgrub関連ファイルを/root/grub.backup以下にバックアップとっておく

# cp /boot/grub/grub.conf /root/grub.backup/
# cp /boot/grub/device.map /root/grub.backup/


その中身.

grub.conf (menu.lst)

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,1)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=7
splashimage=(hd0,1)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.22.14-72.fc6)
        root (hd0,1)
        kernel /vmlinuz-2.6.22.14-72.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb q
uiet
        initrd /initrd-2.6.22.14-72.fc6.img
title Fedora Core (2.6.22.7-57.fc6)
        root (hd0,1)
        kernel /vmlinuz-2.6.22.7-57.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb qu
iet

本件とは関係ないが,
ファイルシステムのルートがdfの結果と違うことに気づいた.
dfでは/dev/mapper/VolGroup00-LogVol00だったのに,
grub.confでは/dev/VolGroup00/LogVol00になってる.


/boot以下と/boot/grub以下のファイルと,そのタイムスタンプをメモっておく.

# ls -l /boot/
total 10750
-rw-r--r-- 1 root root  996318 Nov 22  2007 System.map-2.6.22.14-72.fc6
-rw-r--r-- 1 root root  998929 Sep 22  2007 System.map-2.6.22.7-57.fc6
-rw-r--r-- 1 root root   80079 Nov 22  2007 config-2.6.22.14-72.fc6
-rw-r--r-- 1 root root   80133 Sep 22  2007 config-2.6.22.7-57.fc6
drwxr-xr-x 2 root root    1024 Jun 30  2008 grub
-rw------- 1 root root 2332933 Jun 30  2008 initrd-2.6.22.14-72.fc6.img
-rw------- 1 root root 2332327 Sep 26  2007 initrd-2.6.22.7-57.fc6.img
drwx------ 2 root root   12288 Apr 26  2007 lost+found
-rw-r--r-- 1 root root 2057300 Nov 22  2007 vmlinuz-2.6.22.14-72.fc6
-rw-r--r-- 1 root root 2059764 Sep 22  2007 vmlinuz-2.6.22.7-57.fc6
# ls -l /boot/grub/
total 218
-rw-r--r-- 1 root root     63 Apr 26  2007 device.map
-rw-r--r-- 1 root root   7616 Apr 26  2007 e2fs_stage1_5
-rw-r--r-- 1 root root   7456 Apr 26  2007 fat_stage1_5
-rw-r--r-- 1 root root   6720 Apr 26  2007 ffs_stage1_5
-rw------- 1 root root    897 Jun 30  2008 grub.conf
-rw-r--r-- 1 root root   6720 Apr 26  2007 iso9660_stage1_5
-rw-r--r-- 1 root root   8192 Apr 26  2007 jfs_stage1_5
lrwxrwxrwx 1 root root     11 Apr 26  2007 menu.lst -> ./grub.conf
-rw-r--r-- 1 root root   6880 Apr 26  2007 minix_stage1_5
-rw-r--r-- 1 root root   9248 Apr 26  2007 reiserfs_stage1_5
-rw-r--r-- 1 root root  17127 Sep 25  2006 splash.xpm.gz
-rw-r--r-- 1 root root    512 Apr 26  2007 stage1
-rw-r--r-- 1 root root 104924 Apr 26  2007 stage2
-rw-r--r-- 1 root root   7040 Apr 26  2007 ufs2_stage1_5
-rw-r--r-- 1 root root   6272 Apr 26  2007 vstafs_stage1_5
-rw-r--r-- 1 root root   8864 Apr 26  2007 xfs_stage1_5


ところで,sda(MBR??)とsda1の先頭512バイトは異なるという認識でよいのだろうか?

# dd if=/dev/sda of=./grub_mbr_sda.br bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 8.5036e-05 seconds, 6.0 MB/s
# dd if=/dev/sda1 of=./grub_mbr_sda1.br bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0110187 seconds, 46.5 kB/s
# cmp grub_mbr_sda*
grub_mbr_sda.br grub_mbr_sda1.br differ: char 2, line 1

sdaとsda1の先頭512バイトは異なるようだ.


さて,Fedoraのインストール時にどっちにgrubをインストールしたっけなあ.

MBRにインストールされているgrubを/bootパーティション内にインストール

どちらもバックアップはとっておいたので,MBRにインストールされているものとして
話を進めることにしよう.

まず,grub.confからwindowsの部分を消去する.
default=0
timeout=7
splashimage=(hd0,1)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.22.14-72.fc6)
        root (hd0,1)
        kernel /vmlinuz-2.6.22.14-72.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
        initrd /initrd-2.6.22.14-72.fc6.img
title Fedora Core (2.6.22.7-57.fc6)
        root (hd0,1)
        kernel /vmlinuz-2.6.22.7-57.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
        initrd /initrd-2.6.22.7-57.fc6.img
MBRにインストールされていたgrubを/dev/sda1にインストール

http://www.itmedia.co.jp/help/tips/linux/l0556.html
http://okwave.jp/qa4332276.html
http://www.gnu.org/software/grub/manual/grub.txt
ここを参考にした.

# grub-install --root-directory=/ /dev/sda1

としてみた.
これをファイル化.

# dd if=/dev/sda1 of=/root/grub.backup/grub_sda1.br bs=512 count=1

これをUSBメモリに入れておき,後でwindowsから読ませるようにする.

windowsをインストール.

windowsインストール時にMBRが書き換えられて,従来のGRUBが使えなくなるはず.

インストール完了後,再起動するとwindowsが起動した.OK.


次に,
http://www.nina.jp/server/redhat/grub/dualboot_ntldr.html
に書かれている通りに先ほどUSBメモリに入れておいたgrub_sda1.brを
C:\grub_sda1.brとしてコピー.


そして,BOOT.INIを編集してNTLDRからGRUBが起動するようにする.
通常では,BOOT.INIが見えない状態なので,
「システムフォルダとファイルを見えるようにする」にチェックを入れたが,
残念ながら見えなかった.


仕方がないので,「ファイル名を指定して実行」からmsconfigを呼び出し,
BOOT.INIを編集しようと考えたが,チェックボックスのみであって,
文字列は入力できない.


試しに復元ポイントを作ってみると,
これのおかげなのか,C:\WINDOWS\pss\にBOOT.INI.backupができた.
# もしかしたら復元ポイントを作らなくても,
# backupファイルは作成されるのかもしれない.
# これは確認してない.


このBOOT.INI.backupをC:\にコピーして以下を追加.
(http://www.nina.jp/server/redhat/grub/dualboot_ntldr.html)

c:\grub.br="Linux"

再起動すれば,NTLDRでOSの選択画面が表示される.