予備の HDDへ起動可能状態で vine linuxをコピー
sorry Japanese only
最終更新日 2010/12/25
page size = Mbyte


関連するページ IDEからIDE IDEからSCSI SCSIからSCSI

linuxは CD-ROM Imageを ring serverなどから Downloadしてきて installするのは、Windows2000などよりも簡単に出来ます。
しかし、色々と設定を進めて自分なりの物にしてくると、はてさて、installやり直したとしたら、又ここまで持ってくるのは大変だぞ?

って事で、現状の起動している linuxを、起動する状態で予備の HDDへコピーを作っておこう!

と言うことでやってみました。

現状は、Maxtor 6Y120P0という 120Gbyteの IDE HDDを、Primary Masterへ 1台だけ接続し、以下のパーティションに切り linuxを installしてあります。
ディスク /dev/hda: ヘッド 255, セクタ 63, シリンダ 14946
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム               マウントポイント
/dev/hda1             1       127   1020096   83  Linux                  /boot
/dev/hda2           128      1402  10241437+  83  Linux                  /usr
/dev/hda3          1403      2677  10241437+  83  Linux                  /home
/dev/hda4          2678     14946  98550742+   f  Win95 拡張領域 (LBA)
/dev/hda5          2678      2932   2048256   82  Linux スワップ
/dev/hda6          2933      3059   1020096   83  Linux                  /tmp
/dev/hda7          3060      3123    514048+  83  Linux                  /
/dev/hda8          3124      3299   1413688+  83  Linux                  /var
/dev/hda9          3300      5500  17679501   83  Linux                  /home/localhost
fdiskコマンドの pコマンドにマウントポイントを手書きしました。
まずは、これと同じようにパーティーション切りから始めます。

Primaryの Slaveへ IBM IC35AVVA120という、120Gbyteの IDE HDDを接続して立ち上げ直します。

fdiskコマンド

まずは、取り付けた HDDへ同じ容量でパーティーションを作成していきます。
パーティーションを切るのは fdiskコマンドを使用します。

[root]# fdisk

使い方: fdisk [-l] [-b SSZ] [-u] デヴァイス
   例: fdisk /dev/hda  (一番目の IDE ディスク)
 又は: fdisk /dev/sdc  (三番目の SCSI ディスク)
 又は: fdisk /dev/eda  (一番目の PS/2 ESDI ドライヴ)
 又は: fdisk /dev/rd/c0d0  又は: fdisk /dev/ida/c0d0  (RAID デヴァイス)
  ...
後ろへデバイス名を付けるらしいです。
Primaryの Slaveへ接続した 2台目の HDDに対して操作するんだから /dev/hdbですね。

[root]# fdisk /dev/hdb

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

コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

コマンド (m でヘルプ): 
mを打ってコマンド一覧を表示させた所です。
同じ 120Gbyteの HDDでも、微妙にシリンダ数に違いがありますね。

サラな状態から同じようにパーティーションを切っていくのは以下のコマンドを使用します。
n 新たに領域を作成する
p 領域テーブルを表示する
t 領域のシステム ID を変更する
w テーブルをディスクに書き込み、終了する

windowsなどで既にパーティーションを切ってあり、それを消してから。
と言う時には、dコマンドを使うんでしょうね。

コマンド (m でヘルプ): n
最初 シリンダ (1-14946, 初期値 1): 
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-14946, 初期値 14946): 127
このようにして、パーティーション 1から順次作成していきます。
全く同じ構成の HDDを作る予定なので、現状立ち上がっている HDDのパーティーション情報に数字を合わせて作成していきます。
パーティーションを切るだけなので、あっという間に終わります。

次は、tコマンド。
pコマンドでパーティション一覧を表示すると、IDの部分が作りたい状態と異なるはずなので、tコマンドを使って合わせていきます。
コマンド (m でヘルプ): t
領域番号 (1-9): 1
16進数コード (L コマンドでコードリスト表示): L

 0  空              1c  隠し Win95 FAT3 65  Novell Netware  bb  隠し Boot Wizar
 1  FAT12           1e  隠し Win95 FAT1 70  DiskSecure Mult c1  DRDOS/sec (FAT-
 2  XENIX root      24  NEC DOS         75  PC/IX           c4  DRDOS/sec (FAT-
 3  XENIX usr       39  Plan 9          80  古い Minix      c6  DRDOS/sec (FAT-
 4  FAT16 <32M      3c  PartitionMagic  81  Minix / 古い Li c7  Syrinx         
 5  拡張領域        40  Venix 80286     82  Linux スワップ  da  非 FS データ   
 6  FAT16           41  PPC PReP Boot   83  Linux           db  CP/M / CTOS / .
 7  HPFS/NTFS       42  SFS             84  OS/2 隠し C: ド de  Dell ユーティリ
 8  AIX             4d  QNX4.x          85  Linux 拡張領域  df  BootIt         
 9  AIX ブート可能  4e  QNX4.x 2nd part 86  NTFS ボリューム e1  DOS access     
 a  OS/2 ブートマネ 4f  QNX4.x 3rd part 87  NTFS ボリューム e3  DOS R/O        
 b  Win95 FAT32     50  OnTrack DM      8e  Linux LVM       e4  SpeedStor      
 c  Win95 FAT32 (LB 51  OnTrack DM6 Aux 93  Amoeba          eb  BeOS fs        
 e  Win95 FAT16 (LB 52  CP/M            94  Amoeba BBT      ee  EFI GPT        
 f  Win95 拡張領域  53  OnTrack DM6 Aux 9f  BSD/OS          ef  EFI (FAT-12/16/
10  OPUS            54  OnTrackDM6      a0  IBM Thinkpad ハ f0  Linux/PA-RISC  
11  隠し FAT12      55  EZ-Drive        a5  FreeBSD         f1  SpeedStor      
12  Compaq 診断     56  Golden Bow      a6  OpenBSD         f4  SpeedStor      
14  隠し FAT16 <32M 5c  Priam Edisk     a7  NeXTSTEP        f2  DOS セカンダリ 
16  隠し FAT16      61  SpeedStor       a9  NetBSD          fd  Linux raid 自動
17  隠し HPFS/NTFS  63  GNU HURD または b7  BSDI fs         fe  LANstep        
18  AST SmartSleep  64  Novell Netware  b8  BSDI スワップ   ff  BBT            
1b  隠し Win95 FAT3
16進数コード (L コマンドでコードリスト表示): 83

コマンド (m でヘルプ): 
パーティーション 1を 83の Linuxへ変更した所です。

一通り実行し、目的の状態と同じになったら wコマンドで HDDへ書き出しを行います。

mkfsコマンド

作成したパーティションをフォーマットします。
使うのは mkfsコマンドです。

[root]# mkfs -t ext3 /dev/hdb2
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1281696 inodes, 2560359 blocks
128017 blocks (5.00%) reserved for the super user
First data block=0
79 block groups
32768 blocks per group, 32768 fragments per group
16224 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

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

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
swapと拡張パーティーション以外を実行しましょう。
私の場合だったら /dev/hdb1,2,3,6,7,8,9に対して実行します。

swapパーティーションは以下のコマンドを使いました。
これで正解なのかは自信を持てないのですが・・
[root]# mkswap /dev/hdb5
Setting up swapspace version 1, size = 2048252K

fsckコマンド

作成したパーティションを確認します。

[root]# fsck /dev/hdb1

ddコマンドでコピー

今までは使っていない HDD(/dev/hdb)へ対しての操作でしたが、ここからは立ち上げている HDD(/dev/hda)からコピーする操作をするので、シングルユーザーモードへして、HDDへの書き込みなどが起きないようにします。
[root]# init 1
一応 ps axコマンドで、余計なプロセスが無いかを確認しましょう。
私の所では /etc/rc.*の作りが悪く、rc.localへ記述してあるプロセスが死んでいませんでした・・・

それでは 1個目のパーティーションをコピーしてみましょう
[root]# dd if=/dev/hda1 of=/dev/hdb1 bs=1024k
読み込んだブロック数は 996+1
書き込んだブロック数は 996+1
ファイルを上書きして良いですか?などとは聞いてきません。
ifと ofのデバイス名の間違えは絶対に間違えないようにしましょう。

if= コピー元のパーティーション名
of= コピー先のパーティーション名
bs= 1回にコピーするブロック数。デフォルトだと 512byteのようで時間がかかるので 1024kbyteごとの指定にしました。

パーティーションサイズの大きい所は、それなりの時間がかかります。
ファイルがそれほど入っていないパーティーションでも、パーティーション丸々コピーするので、ファイルの多い少ないは時間に影響しません。
全く同じパーティーションにしたのに、全部書き込めませんでした。ってエラーの出るパーティーションもありましたが、最後の数バイトだったので気にしませんでした。(本当は良くないんだろうけど)

これを、私の場合だったら 1,2,3,6,7,8,9のパーティーションに対して実行します。

次は MBR領域のコピーを行うために以下のコマンドを実行します。
[root]# dd if=/dev/hda of=/dev/hdb bs=1 count=447
読み込んだブロック数は 447+0
書き込んだブロック数は 447+0
これでコピー完了です。

2010/12/25追加
注:ブートローダーに grubを使った環境だと、次のような問題が出てだめな場合があるようです
LILOが復活

shutdown -h nowで shutdownし、コピーした HDDを Masterの設定とし、それから bootするのを確認して終了です。


hda1,2,3とそれぞれのパーティーションを ddコマンドでコピーするのではなく、丸ごとの指定でもうまくいくのかもしれません。
dd if=/dev/hda of=/dev/hdb bs=1024k

私の場合、120Gの後ろの 80Gbyteは使っていないので、時間の無駄だろうと思いやってはみませんでした。

23820
戻る