ホーム | カスタムPC | サポート | リナックス | ギャラリー | 会社概要 | お問合せ

ブートディスクの交換方法(Ubuntu 9.04)


 Ubuntu 9.04 でのブートディスクの交換方法です。各種の設定を維持したままブートディスクを交換したい時に有効です。以下の手順で行えば、新規にインストールする事なくブートディスクが交換できます。

1. ディスクの確認
最初に、交換先のディスクを装着し、デバイスの確認をします。交換前のディスクからブートして、

$ dmesg

で、装着されたディスクを確認します。ここで示す例は、/dev/sdb が現在のブートディスク、/dev/sda が新たに装着されたディスです。


[ 1.980204] scsi 0:0:0:0: Direct-Access ATA IBM-DPTA-353750 P51O PQ: 0 ANSI: 5
[ 1.980343] sd 0:0:0:0: [sda] 73261440 512-byte hardware sectors: (37.5 GB/34.9 GiB)
[ 1.980368] sd 0:0:0:0: [sda] Write Protect is off
[ 1.980372] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.980413] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.980503] sd 0:0:0:0: [sda] 73261440 512-byte hardware sectors: (37.5 GB/34.9 GiB)
[ 1.980526] sd 0:0:0:0: [sda] Write Protect is off [ 1.980530] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.980569] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.980574] sda: unknown partition table [ 1.991142] sd 0:0:0:0: [sda] Attached SCSI disk
[ 1.991210] sd 0:0:0:0: Attached scsi generic sg0 type 0

[ 2.589040] scsi 3:0:0:0: Direct-Access ATA ST380013AS 3.18 PQ: 0 ANSI: 5
[ 2.589168] sd 3:0:0:0: [sdb] 156301488 512-byte hardware sectors: (80.0 GB/74.5 GiB)
[ 2.589192] sd 3:0:0:0: [sdb] Write Protect is off
[ 2.589196] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 2.589237] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.589314] sd 3:0:0:0: [sdb] 156301488 512-byte hardware sectors: (80.0 GB/74.5 GiB)
[ 2.589337] sd 3:0:0:0: [sdb] Write Protect is off
[ 2.589341] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 2.589381] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.589386] sdb: sdb1 sdb2 < sdb5 >
[ 2.621976] sd 3:0:0:0: [sdb] Attached SCSI disk
[ 2.622030] sd 3:0:0:0: Attached scsi generic sg2 type 0

/dev/sda は、37.5GB の IBM-DPTA-353750、/dev/sdb は、80GB の ST380013ASである事がわかります。/dev/sda には、パーティションがありません。

2. パーティションの作成
次に、交換先のディスクにパーティションを作成します。まず、現在のスワップの大きさを確認するために、ブートディスクのパーティションを確認します。
# sudo fdisk /dev/sdb

このディスクのシリンダ数は 9729 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

ディスク /dev/sdb: 80.0 GB, 80026361856 バイト
ヘッド 255, セクタ 63, シリンダ 9729
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xddafddaf
デバイス   ブート    始点    終点    ブロック      Id   システム
/dev/sdb1    *           1    9327    74919096  83  Linux
/dev/sdb2            9328    9729     3229065    5  拡張領域
/dev/sdb5            9328    9729     3229033+ 82  Linux スワップ / Solaris
コマンド (m でヘルプ): q










<--- p でパーティションを表示









<-- q で fdisk を終了
この例では、スワップ領域に 3,229,033 ブロック(約 3GB)割り当てられています。
次に、新たに装着したディスクのパーティションを作成します。以下操作は、fdisk でのパーティションの作成例です。/dev/sda1 の作成、/dev/sda2 の作成、/dev/sda5 を作成し、最後に。/dev/sda5 をスワップ領域にします。/dev/sda5 大きさが、/dev/sdb5 と同程度になるように、/dev/sda1 の大きさを調整します。


# sudu fdisk /dev/sda

デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
Building a new DOS disklabel with disk identifier 0xf3b860f3.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.


このディスクのシリンダ数は 4560 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): p
ディスク /dev/sda: 37.5 GB, 37509857280 バイト
ヘッド 255, セクタ 63, シリンダ 4560
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xf3b860f3

デバイス ブート 始点 終点 ブロック Id システム
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-4560, 初期値 1):
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-4560, 初期値 4560): 4159

コマンド (m でヘルプ): p

ディスク /dev/sda: 37.5 GB, 37509857280 バイト
ヘッド 255, セクタ 63, シリンダ 4560
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xf3b860f3

デバイス    ブート    始点    終点    ブロック    Id    システム
/dev/sda1                  1   4159 33407136   83    Linux

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
e
領域番号 (1-4): 2
最初 シリンダ (4160-4560, 初期値 4160):
初期値 4160 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (4160-4560, 初期値 4560):
初期値 4560 を使います

コマンド (m でヘルプ): p

ディスク /dev/sda: 37.5 GB, 37509857280 バイト
ヘッド 255, セクタ 63, シリンダ 4560
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xf3b860f3

デバイス    ブート    始点    終点    ブロック    Id    システム
/dev/sda1                  1   4159 33407136   83    Linux
/dev/sda2             4160   4560   3221032+   5    拡張領域

コマンド (m でヘルプ): n
コマンドアクション
l 論理 (5 以上)
p 基本領域 (1-4)
l
最初 シリンダ (4160-4560, 初期値 4160):
初期値 4160 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (4160-4560, 初期値 4560):
初期値 4560 を使います

コマンド (m でヘルプ): p

ディスク /dev/sda: 37.5 GB, 37509857280 バイト
ヘッド 255, セクタ 63, シリンダ 4560
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xf3b860f3

デバイス    ブート    始点    終点    ブロック    Id    システム
/dev/sda1                  1   4159 33407136   83    Linux
/dev/sda2             4160   4560   3221032+   5    拡張領域
/dev/sda5             4160   4560   3221001   83    Linux

コマンド (m でヘルプ): t
領域番号 (1-5): 5
16進数コード (L コマンドでコードリスト表示): 82
領域のシステムタイプを 5 から 82 (Linux スワップ / Solaris) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sda: 37.5 GB, 37509857280 バイト
ヘッド 255, セクタ 63, シリンダ 4560
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0xf3b860f3

デバイス    ブート   始点    終点    ブロック    Id    システム
/dev/sda1                1    4159 33407136   83    Linux
/dev/sda2           4160    4560  3221032+    5    拡張領域
/dev/sda5           4160    4560  3221001    82    Linux スワップ / Solaris

コマンド (m でヘルプ): wq
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。




















<--- p でパーティションを表示






<--- n でパーティションを作成



<--- p で基本領域を指定
<--- 領域番号は1
<--- そのままリターン

<--- シリンダ数を指定

<--- p でパーティションを表示









<--- n でパーティションを作成



<--- e で拡張を指定
<--- 領域番号は2
<--- そのままリターン

<--- そのままリターン


<--- p でパーティションを表示










<--- n でパーティションを作成



<--- l で論理を指定
<--- そのままリターン

<--- そのままリターン


<--- p でパーティションを表示











<--- t でタイプを選択
<--- 領域5
<--- 82 でスワップ


<--- p でパーティションを表示











<--- wq でパーティションを
書き込んで fdisk を終了。





3. ファイルシステムの作成
ディスクのパーティションができたら、ファイルシステムを作成します。
まず、/dev/sda1 に ext3 ファイルシステムを mkfs.ext3 コマンドで作ります。

$ sudo mkfs.ext3 /dev/sda1
mke2fs 1.41.4 (27-Jan-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2088960 inodes, 8351784 blocks
417589 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
255 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override


次に、/dev/sda5 にスワップファイルシステムを mkswap コマンドで作ります。

$ sudo mkswap /dev/sda5
スワップ空間バージョン 1 を設定します、サイズ = 3220996 KiB
no label, UUID=fc15cc2f-a9b0-4674-b23c-30c5367338e6


ファイルシステムができたら、vol_id コマンドで UUID を確認します。

$ sudo vol_id /dev/sda1
ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=38131450-c75e-450a-b43f-86160ad890ce
ID_FS_UUID_ENC=38131450-c75e-450a-b43f-86160ad890ce
ID_FS_LABEL=
ID_FS_LABEL_ENC=

$ sudo vol_id /dev/sda5
ID_FS_USAGE=other
ID_FS_TYPE=swap
ID_FS_VERSION=2
ID_FS_UUID=fc15cc2f-a9b0-4674-b23c-30c5367338e6
ID_FS_UUID_ENC=fc15cc2f-a9b0-4674-b23c-30c5367338e6
ID_FS_LABEL=
ID_FS_LABEL_ENC=


ここまで来たら、ファイルのコピーができる状態になります。一旦、シャットダウンして、今度は、Ubuntu の CD からシステムをブートします。

4. デバイスの確認
Ubuntu を CD からブートして、「コンピュータに変更を加えないでUbuntuを使ってみる(T)」を選択します。


dmesg コマンドでデバイスを確認します。CD からブートしても、ディスクの順番は変わらないので、/dev/sda と /dev/sdb は同じになります。

[ 2.000207] scsi 0:0:0:0: Direct-Access ATA IBM-DPTA-353750 P51O PQ: 0 ANSI: 5
[ 2.000347] sd 0:0:0:0: [sda] 73261440 512-byte hardware sectors: (37.5 GB/34.9 GiB)
[ 2.000374] sd 0:0:0:0: [sda] Write Protect is off
[ 2.000378] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 2.000420] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.000514] sd 0:0:0:0: [sda] 73261440 512-byte hardware sectors: (37.5 GB/34.9 GiB)
[ 2.000537] sd 0:0:0:0: [sda] Write Protect is off
[ 2.000541] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 2.000581] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.000586] sda: sda1 sda2 < sda5 >
[ 2.028352] sd 0:0:0:0: [sda] Attached SCSI disk
[ 2.028422] sd 0:0:0:0: Attached scsi generic sg0 type 0

[ 2.503573] sd 3:0:0:0: [sdb] 156301488 512-byte hardware sectors: (80.0 GB/74.5 GiB)
[ 2.503598] sd 3:0:0:0: [sdb] Write Protect is off
[ 2.503602] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 2.503643] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.503724] sd 3:0:0:0: [sdb] 156301488 512-byte hardware sectors: (80.0 GB/74.5 GiB)
[ 2.503747] sd 3:0:0:0: [sdb] Write Protect is off
[ 2.503751] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 2.503791] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 2.503796] sdb: sdb1 sdb2 < sdb5 >
[ 2.529159] sd 3:0:0:0: [sdb] Attached SCSI disk
[ 2.529218] sd 3:0:0:0: Attached scsi generic sg2 type 0


ここから先は、すべて root になって行うので、

$ sudo -i

で、root になります。

5. ディスクのコピー
まず、/dev/sda1 と、/dev/sdb1 をマウントするためのマウントポイントを作ります。ここでは判りやすくするために、/media/sda1 と /media/sdb1 をマウントポイントにします。

# mkdir /media/sda1
# mkdir /media/sdb1

次に、マウントポイントにデバイスをマウントします。

# mount -t ext3 /dev/sda1 /media/sda1
# mount -t ext3 /dev/sdb1 /media/sdb1

いよいよ、ファイルのコピーです。tar コマンドを使う方法や、cp コマンドを使う方法もありますが、コピーするファイルの状況がわかるので、rsync を使います。

# rsync -av /media/sdb1/ /media/sda1/


6. grub のインストール
まず、/boot/grub/menu.lst を編集します。ここでは、コピー先のディレクトリは、/media/sda1 なので、編集するのは、/media/sda1/boot/grub/menu.lst です。変更する必要があるのは、UUID= で指定された ID を、/dev/sda1 の vol_id コマンドで得られた ID にします。

63 ## e.g. kopt=root=/dev/hda1 ro
64 ## kopt_2_6_8=root=/dev/hdc1 ro
65 ## kopt_2_6_8_2_686=root=/dev/hdc2 ro
66 # kopt=root=UUID=38131450-c75e-450a-b43f-86160ad890ce ro
67
68 ## default grub root device
69 ## e.g. groot=(hd0,0)
70 # groot=38131450-c75e-450a-b43f-86160ad890ce


133 title      Ubuntu 9.04, kernel 2.6.28-16-generic
134 uuid      38131450-c75e-450a-b43f-86160ad890ce
135 kernel   /boot/vmlinuz-2.6.28-16-generic
                 root=UUID=38131450-c75e-450a-b43f-86160ad890ce ro quiet splash
136 initrd     /boot/initrd.img-2.6.28-16-generic
137 quiet





<--- UUID の値を変更



<--- groot の値を変更



<--- uuid を変更

<--- UUID の値を変更


起動メニューが複数個ある場合、同様に、uuid オプションの指定、kernel オプションの root=UUID= の部分を変更します。
次に、/boot/grub/device.map を編集します。ここでは、コピー先のディレクトリは、/media/sda1 なので、編集するのは、/media/sda1/boot/grud/device.map です。

1 (hd0)       /dev/sda

<--- /dev/sda に修正
新しく起動させたいドライブのデバイスにします。
ここまで編集が済んだら、grub-install コマンドを使って、grub をインストールします。

# grub-install --root-directory=/media/sda1/ /dev/sda
Installing GRUB to /dev/sda as (hd0)...
Installation finished. No error reported.
This is the contents of the device map /media/sda1//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/sda


7. fstab の編集
/etc/fstab にも UUID によるマウントが使われているので、これを変更します。編集するのは、/media/sda1/etc/fstab です。

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# / was on /dev/sda1 during installation
UUID=38131450-c75e-450a-b43f-86160ad890ce / ext3 relatime,errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=fc15cc2f-a9b0-4674-b23c-30c5367338e6 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0












<--- /dev/sda1のUUID

<--- /dev/sda5のUUID
fstab が変更が終われば、新しく装着したディスクからブートできます。ただ、スプラッシュ画面が途中で消えて、テキストの黒い画面になります。

8. initrd の再構成
交換後のディスクからブートしたら、/etc/initramfs-tools/conf.d/resume の UUID を変更します。

RESUME=UUID=fc15cc2f-a9b0-4674-b23c-30c5367338e6

<--- /dev/sda5のUUID
変更が終了したら、

# sudo update-initramfs -u -k all

で、initrd を再構築します。これで、スプラッシュ画面が表示されたまま起動します。