予備の HDDへ起動可能状態で vine linuxをコピー SCSI HDDからSCSI HDDへ
sorry Japanese only
PAGE作成日 2005/04/22
最終更新日 2010/12/25
page size = Mbyte


関連するページ IDEからIDE IDEからSCSI SCSIからSCSI grubのインストール

メインマシンの方の起動ドライブを、シーゲートチータ 15K3 18Gbyteから Maxtor 15K2 36Gbyteへ換えたので、
Linuxサーバーの方へ、お下がりのチータ 15K3 18Gbyteを持ってきました。

今までこの vine linux 2.6で構築している pppoe Bフレッツルーター兼 httpdサーバーは、
Maxtor 6Y120P0 IDE 120Gbyteへインストール
バックアップの意味も兼ねて IBMの 120Gbyte HDDへコピー
SCSI HDDの チータ 10K6 36Gbyteへコピー
そして今回の 10K6 36Gbyteから 15K3 18Gbyteへコピー
と言う経歴を持っています。

現状の確認

今度の DISK COPYも、コピー元よりコピー先の方が HDD容量が小さいので、まずは現状の確認です。

[root]# df -m
ファイルシステム    1M-ブロック   使用中      空き 使用% マウント場所
/dev/sda1                  980        31       900   4% /boot
/dev/sda2                 2957      1339      1468  48% /usr
/dev/sda3                  988       342       596  37% /home
/dev/sda6                  980        18       913   2% /tmp
/dev/sda7                  486       127       335  28% /
/dev/sda8                 1359       320       970  25% /var
/dev/sda9                24723     11534     11933  50% /home/localhost

容量が増える予定も無いのに、無駄に余っているパーティーションが多いです。
小さく分けすぎ、と言う話もあります。

表示されていないパーティーションは
sda4 -- 拡張領域
sda5 -- swapパーティーション
です。

コピー先の HDDは容量半分なので、次のようにパーティーションを切ることにします。
パーティーションの数を減らそうか?とも思ったのですが、それではただ単にコピーした
だけで使えなくなってしまうため、パーティーションは同じように切ることにしました。

sda1 /boot 200M
sda2 /usr  2000M
sda3 /home 800M
sda5 swap  500M
sda6 /tmp  600M
sda7 /     500M
sda8 /var  800M
sda9 /動画 残り全部

パーティーションの削除

新しくパーティーションを切りたい SCSI HDDを、現在使っている SCSI HDDより
大きい IDで設定し、vine linuxを立ち上げます。
小さい SCSI IDから起動しますからね、普通は。

ちなみに、これから説明に用いるデバイス名は、
起動した現在使用しているコピー元、IDの小さい SCSI HDDは /dev/sda
大きいIDを設定した、コピー先の SCSI HDDは /dev/sdbです。
両方とも、1つめのパーティーションは /dev/sda1 /dev/sdb1となります。

新しくコピーしたい先の SCSI HDD 15K3は、今まで windows2000で使用していたので、
linuxの fdiskコマンドでは以下のようなパーティーションとなっていました。

[root]# fdisk /dev/sdb

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

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sdb1   *         1       497   3992121    7  HPFS/NTFS
/dev/sdb2           498      2231  13928355    f  Win95 拡張領域 (LBA)
/dev/sdb5           498      1007   4096543+   7  HPFS/NTFS
/dev/sdb6          1008      2103   8803588+   7  HPFS/NTFS
/dev/sdb7          2104      2231   1028128+   7  HPFS/NTFS
pは、現在のパーティーションを表示するコマンドです。
何もせず抜けるには q を入力します。
mと入力すると、コマンド一覧が表示されます。

それでは続けて、上記で表示されたパーティションを削除していきます。
コマンド (m でヘルプ): d
領域番号 (1-7): 7

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sdb1   *         1       497   3992121    7  HPFS/NTFS
/dev/sdb2           498      2231  13928355    f  Win95 拡張領域 (LBA)
/dev/sdb5           498      1007   4096543+   7  HPFS/NTFS
/dev/sdb6          1008      2103   8803588+   7  HPFS/NTFS

いとも簡単に削除されました。
それでは続けて残りも削除します。

コマンド (m でヘルプ): d
領域番号 (1-6): 6

コマンド (m でヘルプ): d
領域番号 (1-5): 5

コマンド (m でヘルプ): d
領域番号 (1-5): 2

コマンド (m でヘルプ): d
領域番号 (1-4): 1

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム


はい、綺麗さっぱり無くなりました。

失敗!この HDDではなかった!!って時には w で書き込まず q で抜ければ何も変更せず終了します。

それでは、この削除した情報を DISKへ書き出します。
DISKへ書き込むコマンドは w です。
コマンド (m でヘルプ): w
領域テーブルは交換されました!

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

DISKへパーティション情報書き込んだ後 fdiskコマンドは終了します。

パーティションの作成

fdiskコマンドにてパーティションを作成していきます

ちなみに / と /bootのパーティーションの容量を変更すると、
LILOがエラーを出し起動させるまでに尋常ならざる苦労をします。
出来ることなら、/ と /bootはまるきり同じパーティションサイズで
ddコマンド丸ごとコピーをおすすめします。

私は、/ は同じサイズにしましたが /bootは余りにも無駄が大きかった為、
LILOを捨てて grubというブートローダーに乗り換えました。

[root]# fdisk /dev/sdb

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

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-2231, 初期値 1):リターン
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2231, 初期値 2231): 26

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sdb1             1        26    208813+  83  Linux
sdb1が作成されました。
続けて残りも、予定容量通りに作成していきます。
1,2,3と pで基本領域を作成したら、4は eの拡張を残り容量全てで作成。
残りの 5,6,7,8,9は自動的に論理ドライブとなります。

領域番号 (1-4): 2
最初 シリンダ (27-2231, 初期値 27):リターン
初期値 27 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (27-2231, 初期値 2231): +2000M

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 3
最初 シリンダ (282-2231, 初期値 282):リターン
初期値 282 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (282-2231, 初期値 2231): +800M

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
e                                  <=== 拡張領域は、残り全てを確保する
領域番号 (1-4): 4
最初 シリンダ (384-2231, 初期値 384):リターン
初期値 384 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (384-2231, 初期値 2231):リターン
初期値 2231 を使います

コマンド (m でヘルプ): n
最初 シリンダ (384-2231, 初期値 384):リターン
初期値 384 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (384-2231, 初期値 2231): +500M

コマンド (m でヘルプ): n
最初 シリンダ (448-2231, 初期値 448):リターン
初期値 448 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (448-2231, 初期値 2231): +600M

コマンド (m でヘルプ): n
最初 シリンダ (525-2231, 初期値 525):リターン
初期値 525 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (525-2231, 初期値 2231): +300M

コマンド (m でヘルプ): n
最初 シリンダ (589-2231, 初期値 589):リターン
初期値 564 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (589-2231, 初期値 2231): +800M

コマンド (m でヘルプ): n
最初 シリンダ (691-2231, 初期値 691):リターン
初期値 666 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (691-2231, 初期値 2231):リターン
初期値 2231 を使います


それでは今作成したのを確認してみましょう。

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1        26    208813+  83  Linux
/dev/sda2            27       281   2048287+  83  Linux
/dev/sda3           282       383    819315   83  Linux
/dev/sda4           384      2231  14844060    5  拡張領域
/dev/sda5           384       447    514048+  83  Linux
/dev/sda6           448       524    618471   83  Linux
/dev/sda7           525       588    514048+  83  Linux
/dev/sda8           589       690    819283+  83  Linux
/dev/sda9           691      2231  12378051   83  Linux


sdb4と 5が、今使っている 10k6と異なった IDとなっています。
これを修正するのは t コマンドです。

コマンド (m でヘルプ): t
領域番号 (1-9): 5
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 コマンドでコードリスト表示): 82
領域のシステムタイプを 5 から 82 (Linux スワップ) に変更しました

コマンド (m でヘルプ): t
領域番号 (1-9): 4
16進数コード (L コマンドでコードリスト表示): f
領域のシステムタイプを 4 から f (Win95 拡張領域 (LBA)) に変更しました

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

ディスク /dev/sdb: ヘッド 255, セクタ 63, シリンダ 2231
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1        26    208813+  83  Linux
/dev/sda2            27       281   2048287+  83  Linux
/dev/sda3           282       383    819315   83  Linux
/dev/sda4           384      2231  14844060    f  Win95 拡張領域 (LBA)
/dev/sda5           384       447    514048+  82  Linux スワップ
/dev/sda6           448       524    618471   83  Linux
/dev/sda7           525       588    514048+  83  Linux
/dev/sda8           589       690    819283+  83  Linux
/dev/sda9           691      2231  12378051   83  Linux


同じように作成したのに、ブロックの表示の所へ + の付いているのと付いていないのがありますが、何なんでしょうか。

ファイルシステムの作成

今回は、小さいファイルを書き込んだときの無駄を少なくするため、
blockサイズを指定して mkfsを行ってみました。

[root]# mke2fs -j -c -c -v -b 1024 /dev/sdb1
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
52208 inodes, 208812 blocks
10440 blocks (5.00%) reserved for the super user
First data block=1
26 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801

Running command: badblocks -b 1024 -s -w /dev/sdb1 208812
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

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

-cオプションを 2個書いてあるのは書き間違えではありません。
2個書くと、詳細チェックをするようです。(manコマンドでも twiceと書いてあります)

しかし何も表示が出ませんでいたが、本当に ext3で作られているのでしょうか?
作成した file systemの確認方法は mountして df -Tコマンドを実行すると確認できます。

[root]# mount /dev/sdb1 1
[root]# df -T
ファイルシステム  形式  1k-ブロック   使用中      空き 使用% マウント場所
/dev/sdb1     ext3      202219      4127    187652   3% /root/1
他は省略
きちんと ext3ファイルシステムになっているようです。

以下同様に 1024byte par blockの指定で sdb8まで作成していきます。
sdb4は拡張領域なので mkfsしない。
sdb9は大容量なので、これは os指定通りの blockサイズで mkfsしました。

sdb5は swapパーティーションなので、次のコマンドを使って swapパーティーションにします
[root]# mkswap -c /dev/sdb5
Setting up swapspace version 1, size = 514044K
-c オプションは、作成する前に領域の確認を行うオプションです。

tarを使ってファイルをコピー

今までは ddコマンドを使ってファイルのコピーを行ってきましたが、
今回は tarコマンドを使ってファイルのコピーを行いました。

例として /home以下を /mntへマウントした /dev/sdb3へコピーする方法を記述します

[root]# mount /dev/sdb3 /mnt
[root]# cd /home
[root]# tar cf - . | ( cd /mnt ; tar xvf - )

/home以下を /mnt以下へ、grp,own,modeなどを変えずに一括コピーを行えます

ここで問題の出たのが / パーティーション
/dev/sdb7がコピーしたい先の / パーティーションなんですが、/mntへマウントすると
マウントした /mntの中まで読み込みに行き正常にコピーできませんでした。
(後に tarのオプションで --exclude=mntとやると除外するのが分かりました)

と言うことで、/ は、いつもの ddコマンドにてコピーしました。
[root]# dd if=/dev/sda7 of=/dev/sdb7 bs=1024k

次にぶち当たったのが /bootパーティーション
tarでコピー後に立ち上げてみたところ LILOが LIで止まるのです。
この前は LIL+だったけど、今度は LIかよ・・と googleしてみたら、
/boot/boot.bというファイルの書かれている HDD上の物理的位置が、/sbin/liloを
実行したときと変わってしまったから、MBRに書かれた boot loaderがファイルを探せないエラー

オイオイ tarでコピーしたら、HDD上のどこへ書かれるか定かでないよ・・
確かに ls -liで boot.bを確認すると、/dev/sda1の方は inode=27
/dev/sdb1の方は inode=25に書かれています。
これはちょっと boot.bの位置を特定してコピーするのは、やり方が分かりませんでした。

と言うことで、別ページの grubのインストールに続きます。



2010/12/25追加
grubで運用している SCSI HDDのコピーを作る時、上記方法ではうまく bootしませんでした

grubを起動するようにするには、grubの installが必要でした
grubの installページで make installまで行い
mount /dev/sdb1 /mnt
で、新しく作る側の rootパーティションを /mntへマウント
ここへ向かって grubをインストールします
[root]# grub-install --root-directory=/mnt /dev/sdb

また、どういう訳か /boot/grubに menu.lstが作成されず grubプロンプトで止まってしまうので
menu.lstを作成しました

/boot/grub/menu.lst
default=0
timeout=10

title 3
root (hd0,0)
kernel /boot/bzImage-20070124 ro root=/dev/sda1
initrd=/boot/initrd-2.4.31-0vl1.8.img

それと、失敗だったのが
MBR領域のコピーを行うために以下のコマンドを今まで実行していました
[root]# dd if=/dev/hda of=/dev/hdb bs=1 count=447
これを行うと、LILOが復活してしまいました
其れも LILOのブート部分だけが復活して設定がされてないもんだから途中で止まり、
まるでだめです。grubの環境では、上記コマンドは使えません
11613
戻る